Discussion:
Programmiersprache = turingmächtig?
(zu alt für eine Antwort)
Carsten Krueger
2007-03-11 12:07:42 UTC
Permalink
Hallo,

wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Wo finde ich eine Definition von einem Informatikpapst die explizit besagt,
daß eine Programmiersprache turingmächtig sein muss?
Ich finde leider immer nur sehr abstrakte Definitionen wo drin steht, ein
Computer macht was er soll oder Definitionen wo als Bspe.
turingmächtige Sprachen genannt werden.

Gruß Carsten
--
0x2BFBF5D8 FP = 53CA 1609 B00A D2DB A066 314C 6493 69AB 2BFB F5D8
http://www.realname-diskussion.info - Realnames sind keine Pflicht
http://www.spamgourmet.com/ + http://www.temporaryinbox.com/ - Antispam
cakruege (at) gmail (dot) com | http://www.geocities.com/mungfaq/
Stefan Ram
2007-03-11 13:09:25 UTC
Permalink
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Wenn ich mich recht erinnere, engagierst Du dich zu diesem
Thema bereits seit einer Weile in de.soc.recht.marken+urheber
und seit kurzem auch in de.sci.mathematik und vertrittst dort
teilweise sehr bestimmt und nachdrücklich die Ansicht, daß
jede Programmiersprache turingvollständig sein müsse.

Da in dieser Runde ein neuer Verlauf eröffnet wurde, fasse
ich den bisherigen Erkenntnisstand noch einmal zusammen:

Ein "Programm" ist ein Werk, das Informationen enthält, die
Aspekte eines Prozesses bestimmen (einschränken) können. Der
Schöpfer des Werkes steuert den Prozeß dabei also nicht selber
interaktiv (wie ein Auto), sondern durch eine Vorausverfügung
(das Programm), ohne daß er bei dem Prozeß anwesend sein muß.

Durch eine HTML-Quelle wird eben der Anzeige- und
Interaktionsprozeß beim Betrachten der Seite mitbestimmt,
vorausbestimmt oder eben "programmiert". (Es gab früher
auch Bücher zum »Programmierten Lernen«: »Wenn Sie die
Antwort A für richtig halten, lesen Sie auf Seite 73 weiter.«)

Die Art der Programmierung ist in HTML aber weniger imperativ
als deklarativ. Der Autor baut ein Textmodell auf. Dadurch
legt er den Prozeß nicht genau fest. Schließlich muß eine
HTML-Seite gar nicht in einem Browser betrachtet werden,
sondern sie kann auch ausgedruckt oder maschinell vorgelesen
werden.

Der Programmierer bestimmt nicht genau, was wann passiert,
sondern legt nur bestimmte Informationen und Einschränkungen
fest. Dadurch bestimmt er bestimmte Aspekte der Verarbeitung
einer HTML-Quelle mit, ohne alles genau und vollständig zu
kontrollieren. Selbst bei klassischen imperativen Sprachen
wird nicht alles genau festgelegt, in BASIC bei "PRINT 10"
beispielsweise weder Farbe noch Schriftart der "10".

Daher kann man schon sicher sagen, daß HTML keine /imperative/
Programmiersprache sei. Man sieht aber auch bestimmte
deklarative Sprachen, wie Prolog, als "Programmiersprachen"
an. In Prolog beschreibt man vorwiegend Aussagenmengen, in
HTML eine Hypertextstruktur. Dadurch ist die Art der
Prozeßsteuerung indirekter als bei imperativen Sprachen.

Es gibt eben anerkannte Autoren, die den Begriff
"Programmieren" sogar noch weiter auslegen. Ich zitiere hier
einmal aus dem folgenden de-Gruyter-Lehrbuch:

"Methodisches Programmieren - Entwicklung von Algorithmen
durch schrittweise Verfeinerung" von

Dr. Günter Hommel, Professor für Informatik an der
Technischen Universität München;

Dr. Stefan Jänichen, Hochschulassisten am Fachbereich
Informatik der Technischen Universität Berlin; und

Cornelis H. A. Koster, Professor für Informatik an der
Katholieke Universiteit Nijmegen.

(Berlin; New York: de Gruyter, 1983; ISBN 3-11-009636-6)

Das Zitat lautet:

Unter Programmieren verstehen wir den Versuch, ein Ziel
durch den systematischen Einsatz vorgegebener Mittel zu
erreichen. Erfolgreiches Programmieren setzt genaue
Kenntnisse über Ziel und Mittel voraus, vor allem aber
Erfahrung im systematischen Überbrücken der Lücke zwischen
dem Problem und den verfügbaren Mitteln. Programmieren ist
eine sehr allgemeine, bestimmt nicht auf die Informatik
beschränkte, menschliche Tätigkeit:

Fernseh-Programmierung

Fernseh-Programmierung ist der Versuch, innerhalb eines
vorgegebenen Budgets und gewisser physikalischer
Resourcen, einen angenehmen und interessanten
Fernsehabend aus vorgegebenen Western, Quiz und anderen
Produktionen zusammenzustellen.

Lineare Programmierung

Lineare Programmierung ist z.B. die Technik, aus
Fleisch, Casein, Gewürzen u.s.w. mit gegebenen Preisen
eine Wurst zusammenzustellen, die den gesetzlichen
Bestimmungen nicht widerspricht und maximalen Profit
bringt.

Computer-Programmierung

Computer-Programmierung ist nur dadurch besonders
gekennzeichnet, daß der Computer als Prozessor zum
Ausführen von Algorithmen verwendet wird, die zur
Durchführung gewisser Aufgaben erstellt werden.

(Ende des Zitats)

Also, wenn diese Hochschulprofessoren der Informatik davon
sprechen, einen Fernsehabend oder eine Wurst zu programmieren,
wer will es dann als sicher falsch bezeichnen, wenn jemand von
»Webseiten programmieren« spricht?

Allerdings verwenden manche Menschen tatsächlich das
Wort »Programm« als eine Art von Synekdoche, wenn
»Text einer formalen Sprache« treffender wäre, weil ihnen der
Begriff »formale Sprache« nicht bekannt ist. Möglicherweise
ist mit »Computerprogramm« in manchen Texte ein
»von Menschen geschriebener und zur maschinellen Verarbeitung
geeigneter Text einer formalen Sprache« gemeint.

Andere meinen mit »programmieren« wiederum nur
»imperativ-prozedurales Programmieren« und haben so
umgekehrt ein zu enges Verständnis des Begriffs.

Anhang: Ein Tic-Tac-Toe-Spiel in reinem HTML:

http://www.geocities.com/flo_kreidler/tictactoe.html
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die
explizit besagt, daß eine Programmiersprache turingmächtig sein
muss?
Turingvollständigkeit wird von einer Programmiersprache nicht
verlangt. Laut des Fachgebrauchs (bestimmte
SPS-Programmiersprachen sind nicht turingvollständig) und der
relevanten Norm

ISO/IEC 2382-1:1993, Information technology -- Vocabulary
-- Part 1: Fundamental terms

DIN-Normen werden meist verträglich mit solchen ISO-Normen
gestaltet. Außerdem dienen diese ISO-Begriffsnormen auch als
Grundlage für ISO-Normen zu speziellen Sprachen und Techniken.

Auch die amerikanischen Normen folgen den ISO-Begriffen:

http://www.incits.org/tc_home/k5htm/p3.htm#programming_language

Ursprünglich wurde ja die Frage nach »Programm« in
juristischen Texten diskutiert.

Manche Menschen verwenden das Wort »Programm« als eine Art von
Synekdoche, wenn »Text einer formalen Sprache« treffender
wäre, weil ihnen der Begriff »formale Sprache« nicht bekannt
ist. Möglicherweise ist mit »Computerprogramm« auch in manchen
Rechtsnormen ein »von Menschen geschriebener und zur
maschinellen Verarbeitung geeigneter Text einer formalen
Sprache« gemeint.

Andere meinen mit »programmieren« wiederum nur
»imperativ-prozedurales Programmieren« und haben so
umgekehrt ein zu enges Verständnis des Begriffs.

Inzwischen habe ich einen ISO-Normentwurf gefunden, der
anscheinend sogar speziell zur Klärung der Begriffe »Programm«
und »Programmiersprache« für den Geschäftsverkehr und die
Rechtssprechung gedacht ist:

ISO/IEC JTC 1/SC 32/WG1 N 0210R
Languages and Jurisdiction: "Natural", "Special",
"Official", "Artificial", "Indexing", "Programming," etc.

http://metadata-standards.org/metadata-stds/Document-library/Meeting-reports/SC32WG2/2002-05-Seoul/WG2-SEL-003-Languages-&-Jurisdiction-(WG1N210r).rtf
http://jtc1sc36.org/doc/36N0463.pdf
http://vocabulary.jtc1sc36.org/doc/SC36_WG1_N0058.pdf

Auch dort findet sich nichts von »turingmächtigkeit«.

Für Informatiker sind nocht die folgenden Quellen interessant,
die einen "Turing-Mythos" noch auf andere Weise in Frage stellen:

http://www.engr.uconn.edu/~dqg/papers/myth.pdf
http://www.cse.uconn.edu/~dqg/papers/cie05.pdf
http://c2.com/cgi/wiki?InteractiveComputationIsMorePowerfulThanNonInteractive
Carsten Krueger
2007-03-11 13:24:56 UTC
Permalink
Post by Stefan Ram
Da in dieser Runde ein neuer Verlauf eröffnet wurde, fasse
Du meinst du widerholst deine Meinung.

Zeige mir ein "HTML-Programm" was die Eingabe verdoppelt oder eines was
unendlich viele 1en ausgibt.

Gruß Carsten
--
0x2BFBF5D8 FP = 53CA 1609 B00A D2DB A066 314C 6493 69AB 2BFB F5D8
http://www.realname-diskussion.info - Realnames sind keine Pflicht
http://www.spamgourmet.com/ + http://www.temporaryinbox.com/ - Antispam
cakruege (at) gmail (dot) com | http://www.geocities.com/mungfaq/
Hans-Peter Diettrich
2007-03-11 15:18:00 UTC
Permalink
Post by Carsten Krueger
Zeige mir ein "HTML-Programm" was die Eingabe verdoppelt oder eines was
unendlich viele 1en ausgibt.
Ich kann Dir Programme in jeder beliebigen Programmiersprache zeigen,
die das nicht tun. Sind das dann keine Programme?

DoDi
Stefan Ram
2007-03-11 15:35:20 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Carsten Krueger
Zeige mir ein "HTML-Programm" was die Eingabe verdoppelt oder eines was
unendlich viele 1en ausgibt.
Ich kann Dir Programme in jeder beliebigen Programmiersprache zeigen,
die das nicht tun. Sind das dann keine Programme?
Oder noch anders herum:

Das kann man in keiner Programmiersprache schreiben.

Wenn man die zu verdoppelnde Zahl aber in der Größe beschränkt
(etwa auf Werte bis zu 16383) und die Zahl der Einsen
beschränkt, dann kann man so etwas mit dem Datentyp »int« in
der Programmiersprache »C« schreiben oder nach dem
Tic-Tac-Toe-Prinzip auch in HTML (man klickt auf eine Zahl und
der Browser springt zu ihrem Doppeltem, man klickt auf »Start«
und der Browser springt zu einer bestimmten Anzahl von Einsen).

Abgesehen davon verlangt aber niemand als Kriterium für eine
Programmiersprache, daß so etwas möglich ist. So gibt es
eingebettete Systeme, die mangels entsprechender Gerätschaften
keine Möglichkeit bieten, etwas einzulesen beziehungsweise
auszugeben. Solche System werden aber auch »programmiert«.
Till Potinius
2007-03-11 16:42:33 UTC
Permalink
Post by Stefan Ram
Post by Hans-Peter Diettrich
Post by Carsten Krueger
Zeige mir ein "HTML-Programm" was die Eingabe verdoppelt oder eines was
unendlich viele 1en ausgibt.
Ich kann Dir Programme in jeder beliebigen Programmiersprache zeigen,
die das nicht tun. Sind das dann keine Programme?
Das kann man in keiner Programmiersprache schreiben.
Wenn man die zu verdoppelnde Zahl aber in der Größe beschränkt
(etwa auf Werte bis zu 16383) und die Zahl der Einsen
beschränkt, dann kann man so etwas mit dem Datentyp »int« in
der Programmiersprache »C« schreiben oder nach dem
Tic-Tac-Toe-Prinzip auch in HTML (man klickt auf eine Zahl und
der Browser springt zu ihrem Doppeltem, man klickt auf »Start«
und der Browser springt zu einer bestimmten Anzahl von Einsen).
Der Unterschied ist, beide Probleme(Eingabe verdoppeln und unendlich viele
Einsen ausgeben) lassen sich in einer Programmiersprache ohne
Einschränkung realisieren.

Zur Verdoppelung der Eingabe:
Geht in Haskell zum Beispiel sehr einfach. Ohne Einschränkung.
Anderes Beispiel:
Das Sieb des Eratosthenes zur Bestimmung von Primzahlen. Die Menge der
bestimmbaren Primzahlen wird nur durch die Grenzen der Hardware bestimmt.

Deine "HTML-Programme" sind auch durch eine Verbesserung der Hardware
nicht leistungsfähiger. Ein richtiger Algorithmus wird nicht durch sich
selbst, sondern nur durch die Hardware eingeschränkt.


Was dazu fehlt: Programmiersprachen sind formal definiert, es ist genau
festgelegt, wie sich zum Beispiel eine while-Schleife bei einer
Ausführung verhalten soll.
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung der Tags
gibt, wie aber ein Browser ein "<em>Text</em>" interpretiert, ist nicht
genauer definiert.
Diese fehlenden Definitionen machen einen großen Unterschied aus:
Bei einer Programmiersprache ist genau festgelegt, wie sich was verhält,
bei Kenntnis des Programmes und der Eingabe lässt sich die Ausgabe
vorhersagen.
Das ist bei HTML nicht möglich, da es nicht präzise genug definiert ist.


Zu den Einsen:

----------------------------------------
public class Hallowelt {
pulic static void main( String[] args) {
while(true) {
system.out.println("1");
}
}
}
----------------------------------------

Das kann HTML nicht.
Post by Stefan Ram
Abgesehen davon verlangt aber niemand als Kriterium für eine
Programmiersprache, daß so etwas möglich ist. So gibt es
eingebettete Systeme, die mangels entsprechender Gerätschaften
keine Möglichkeit bieten, etwas einzulesen beziehungsweise
auszugeben. Solche System werden aber auch »programmiert«.
Ein System, was keine Ausgabe und keine Eingabe besitzt, besitzt keine
Möglichkeit, mit seiner Umgebung zu interagieren bzw. irgend etwas zu
tun, das einen Einfluss auf die Umgebung hat.
Mit anderen Worten: Es kann per Definition nichts tun.
Daher kann es nicht programmiert werden, denn eine andere Programmierung
würde voraussetzen, dass das Verhalten des Systems geändert wird. Bleibt
das Verhalten gleich, ist es logischerweise nicht anders programmiert
worden.
Wenn es überhaupt keine Programmierung gibt, die das Verhalten nach
außen ändert, kann es logischerweise nicht programmierbar sein.

MFG, Till
--
angelheaded hipsters burning for the
ancient heavenly connection to the
starry dynamo in the machinery of night
Howl - Allen Ginsberg
Stefan Ram
2007-03-11 17:17:24 UTC
Permalink
Post by Till Potinius
Deine "HTML-Programme" sind auch durch eine Verbesserung der
Hardware nicht leistungsfähiger.
Die maximale Größe der Zahl, deren Doppeltes am Ende einer
HTML-Verbindung steht, ist genauso nur durch die Geräte
bestimmt, die man zur Verarbeitung der HTML-Seite nimmt.
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es
ist genau festgelegt, wie sich zum Beispiel eine while-Schleife
bei einer Ausführung verhalten soll.
Dann wäre C keine Programmiersprache, da es dort
implementationsspezifiziertes Verhalten gibt. Schon

( 20000 + 20000 )

hat in C einen implementationsspezifizierten Wert.
Post by Till Potinius
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung
der Tags gibt, wie aber ein Browser ein "<em>Text</em>"
interpretiert, ist nicht genauer definiert.
Dann wäre C auch keine Programmiersprache, da bei

printf( "Text" )

die Schriftart und Schriftfarbe der Ausgabe ebenfalls nicht
durch C spezifiziert ist. Eine C-Implementation dürfte
sogar das »e« kursiv und das »x« fett darstellen.
Post by Till Potinius
public class Hallowelt {
pulic static void main( String[] args) {
while(true) {
system.out.println("1");
}
}
}
Dieses Programm vollendet sein Werk ja nie.
Insofern hat es keine bestimmte Ausgabe.
Post by Till Potinius
Das kann HTML nicht.
<a href="#loop" id="loop">1</a>
Post by Till Potinius
Ein System, was keine Ausgabe und keine Eingabe besitzt,
Ich meinte ein System, das nur eine Ausgabe oder nur
eine Eingabe besitzt, aber nicht unbedingt beides:
Nur-Eingabe wäre beispielsweise ein Fahrtenschreiber.
Nur-Ausgabe wärem bestimmte einfache Steuerungen.
Till Potinius
2007-03-11 18:49:46 UTC
Permalink
Post by Stefan Ram
Post by Till Potinius
Deine "HTML-Programme" sind auch durch eine Verbesserung der
Hardware nicht leistungsfähiger.
Die maximale Größe der Zahl, deren Doppeltes am Ende einer
HTML-Verbindung steht, ist genauso nur durch die Geräte
bestimmt, die man zur Verarbeitung der HTML-Seite nimmt.
Was ist eine "HTML-Verbindung"?
Und wieso "Verarbeitung"? HTML wird nur angezeigt.

Oder anders: Zeig mir eine HTML-Seite, die das doppelte einer Zahl angibt,
und ich nenn dir eine Zahl, bei der die Seite nicht das gewünschte
liefert.
Post by Stefan Ram
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es
ist genau festgelegt, wie sich zum Beispiel eine while-Schleife
bei einer Ausführung verhalten soll.
Dann wäre C keine Programmiersprache, da es dort
implementationsspezifiziertes Verhalten gibt. Schon
( 20000 + 20000 )
hat in C einen implementationsspezifizierten Wert.
Natürlich gibt es implementationsspezifische Unterschiede. Aber es gibt
eine formale Definition, wie sich Implementationen der Sprache verhalten
sollen, z.B. die ISO/IEC 9899:1999
Und da ist nichts implementationsspezifisch, entweder es entspricht dem
Standard, oder nicht.
Post by Stefan Ram
Post by Till Potinius
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung
der Tags gibt, wie aber ein Browser ein "<em>Text</em>"
interpretiert, ist nicht genauer definiert.
Dann wäre C auch keine Programmiersprache, da bei
printf( "Text" )
die Schriftart und Schriftfarbe der Ausgabe ebenfalls nicht
durch C spezifiziert ist. Eine C-Implementation dürfte
sogar das »e« kursiv und das »x« fett darstellen.
Falsch. printf gibt die Zeichen auf die jeweilige Ausgabe aus. Innerhalb
der Implementation ist das bloss die Codierung der Zeichen als ASCII oder
z.B. unicode, aber mehr nicht.
Wie die darstellende Umgebung das anzeigt, ist unerheblich, denn die
Ausgabe des Programmes ist immer gleich.
Wenn du das Ergebnis von printf siehst, ist es schon nicht mehr in der
Zuständigkeit des C-Programmes. Das Programm schreibt die Daten auf
stdout, was danach geschieht, ist nicht in der Zuständigkeit von printf.
Post by Stefan Ram
Post by Till Potinius
public class Hallowelt {
pulic static void main( String[] args) {
while(true) {
system.out.println("1");
}
}
}
Dieses Programm vollendet sein Werk ja nie.
Insofern hat es keine bestimmte Ausgabe.
Nur weil ein Programm nicht terminiert, kann es trotzdem sinvoll arbeiten.
Nimm nur als Beispiel dein Betriebssystem. Du nutzt es nur, wenn es nicht
terminiert ist.
Post by Stefan Ram
Post by Till Potinius
Das kann HTML nicht.
<a href="#loop" id="loop">1</a>
Erfordert aber für jedes Zeichen Interaktion mit dem Benutzer.
Post by Stefan Ram
Post by Till Potinius
Ein System, was keine Ausgabe und keine Eingabe besitzt,
Ich meinte ein System, das nur eine Ausgabe oder nur
Nur-Eingabe wäre beispielsweise ein Fahrtenschreiber.
Nur-Ausgabe wärem bestimmte einfache Steuerungen.
Ein Fahrtenschreiber hat eine Ausgabe. Sonst könnte man die Daten nicht
auswerten, die Ausgabe erfolgt da z.B. dann auf Papierscheiben oder
irgendwelche Speichermedien.

Wenn die Steuerung keine Eingabe besitzt, gibt es nur drei Fälle:
1)Die Steuerung ist gedächtnislos und arbeitet ständig:
Es wird immer dasselbe ausgegeben. Damit wären wir bei den Einsen.
2)Die Steuerung hat ein Gedächtnis: Damit wären wir bei Speicher und
Variablen, was es in HTML nicht gibt.
3)Die Steuerung gibt Daten aus und terminiert danach
a)Alle Daten auf einmal. Das ist keine Steuerung, sondern bestenfalls ein
Speicher.
b)Die Daten in Zeitabständen nacheinander. Auch das kann HTML nicht.

MFG, Till
--
"Computer gehorchen deinen Befehlen, nicht deinen Absichten."

- Quelle unbekannt
Stefan Ram
2007-03-11 19:22:00 UTC
Permalink
Post by Till Potinius
Was ist eine "HTML-Verbindung"?
Englisch: »hyperlink« oder »link«.
Post by Till Potinius
Und wieso "Verarbeitung"? HTML wird nur angezeigt.
HTML wird vorgelesen, von Suchmaschinen interpretiert, von
Microsoft® Word eingelesen, in andere Formate gewandelt u.s.w.
Dabei jeweils im Sinne der spezifizierten Semantik.
Post by Till Potinius
Oder anders: Zeig mir eine HTML-Seite, die das doppelte einer
Zahl angibt, und ich nenn dir eine Zahl, bei der die Seite
nicht das gewünschte liefert.
Das kann ich bei einem C-Programm auf einem bestimmten
Rechner genauso. Man kann sicher eine bestimmte Zahl
angegeben, deren Dezimalentwicklung von keinen System
mehr ausgegeben werden kann. Siehe auch

http://home.earthlink.net/~mrob/pub/math/largenum-2.html
Post by Till Potinius
Natürlich gibt es implementationsspezifische Unterschiede. Aber
es gibt eine formale Definition, wie sich Implementationen der
Sprache verhalten sollen, z.B. die ISO/IEC 9899:1999 Und da ist
nichts implementationsspezifisch, entweder es entspricht dem
Standard, oder nicht.
Wenn Du die ISO/IEC 9899:1999 (E) kennst, dann schaue
einmal in den Anhang J.3.
Post by Till Potinius
Wenn du das Ergebnis von printf siehst, ist es schon nicht mehr in der
Zuständigkeit des C-Programmes. Das Programm schreibt die Daten auf
stdout, was danach geschieht, ist nicht in der Zuständigkeit von printf.
Wenn Du das selber einsiehst, verstehe ich nicht,
warum Du meine Erklärung dann »falsch« nennst.
Post by Till Potinius
Ein Fahrtenschreiber hat eine Ausgabe. Sonst könnte man die
Daten nicht auswerten, die Ausgabe erfolgt da z.B. dann auf
Papierscheiben oder irgendwelche Speichermedien.
Der Fahrtenschreiber /im Auto/ oder Flugschreiber im Flugzeug
nicht immer. Man kann manchmal nur das Medium entnehmen und
auf einem anderen Gerät auslesen.
Till Potinius
2007-03-11 20:10:23 UTC
Permalink
Post by Stefan Ram
Post by Till Potinius
Was ist eine "HTML-Verbindung"?
Englisch: »hyperlink« oder »link«.
Nun, um dann zu deiner Aussage zurückzukommen:
| Die maximale Größe der Zahl, deren Doppeltes am Ende einer
| HTML-Verbindung steht, ist genauso nur durch die Geräte
| bestimmt, die man zur Verarbeitung der HTML-Seite nimmt.

Die maximale Größe ist durch die Erzeugung der Verbindung festgelegt.
Wenn ich einen anderen Browser nehme, bleibt die maximale Größe gleich.
HTML ist statisch.
Post by Stefan Ram
Post by Till Potinius
Oder anders: Zeig mir eine HTML-Seite, die das doppelte einer
Zahl angibt, und ich nenn dir eine Zahl, bei der die Seite
nicht das gewünschte liefert.
Das kann ich bei einem C-Programm auf einem bestimmten
Rechner genauso. Man kann sicher eine bestimmte Zahl
angegeben, deren Dezimalentwicklung von keinen System
mehr ausgegeben werden kann. Siehe auch
http://home.earthlink.net/~mrob/pub/math/largenum-2.html
Wenn man die Zahl eingeben kann, so kann man sie auch ausgeben.
Das C-Programm ist, im Gegensatz zu HTML, nicht gezwungen, die Ein- und
Ausgabe zu speichern.

Ich kann zum Beispiel eine Zahl ziffernweise von rechts einlesen, die
Ziffer verdoppeln, das Ergebnis modulo 10 ausgeben, ggf. den Übertrag
merken, die nächste Ziffer lesen, verdoppeln, Übertrag addieren, modulo
10, Ziffer ausgeben, Übertrag merken etc.

Das funktioniert mit beliebig großen Zahlen, die eingegeben werden.
Und das Programm ist nicht besonders groß oder speicherlastig.
Post by Stefan Ram
Post by Till Potinius
Natürlich gibt es implementationsspezifische Unterschiede. Aber es gibt
eine formale Definition, wie sich Implementationen der Sprache verhalten
sollen, z.B. die ISO/IEC 9899:1999 Und da ist nichts
implementationsspezifisch, entweder es entspricht dem Standard, oder
nicht.
Wenn Du die ISO/IEC 9899:1999 (E) kennst, dann schaue einmal in den
Anhang J.3.
Und? Da steht, dass es implementationsspezifische Unterschiede gibt.
Das ist kein Geheimnis.
Post by Stefan Ram
Post by Till Potinius
Wenn du das Ergebnis von printf siehst, ist es schon nicht mehr in der
Zuständigkeit des C-Programmes. Das Programm schreibt die Daten auf
stdout, was danach geschieht, ist nicht in der Zuständigkeit von printf.
Wenn Du das selber einsiehst, verstehe ich nicht, warum Du meine
Erklärung dann »falsch« nennst.
"Nicht in der Zuständigkeit" heißt nicht nur, dass es nichts ändern
muss, sondern dass es nichts ändern darf.
Post by Stefan Ram
Post by Till Potinius
Ein Fahrtenschreiber hat eine Ausgabe. Sonst könnte man die Daten nicht
auswerten, die Ausgabe erfolgt da z.B. dann auf Papierscheiben oder
irgendwelche Speichermedien.
Der Fahrtenschreiber /im Auto/ oder Flugschreiber im Flugzeug nicht
immer. Man kann manchmal nur das Medium entnehmen und auf einem
anderen Gerät auslesen.
Auch das ist eine Ausgabe, auf ein Ausgabemedium. Es muss ja nicht immer
direkt durch Menschen lesbar sein.
Auch eine Datei auf einer Festplatte ist eine Ausgabe.

MFG, Till
--
"Manche sagen, Computer seien besser als Menschen
- aber viel Spass im Leben haben sie nicht."

- Peter Ustinov
Stefan Ram
2007-03-11 20:43:35 UTC
Permalink
Post by Till Potinius
Wenn ich einen anderen Browser nehme, bleibt die maximale Größe
gleich. HTML ist statisch.
Ja, insofern ist HTML statisch. Nur die gerade angezeigte
Stelle ist zur »Laufzeit« veränderlich (so arbeitet das
Tic-Tac-Toe in HTML).
Post by Till Potinius
Post by Stefan Ram
Wenn Du die ISO/IEC 9899:1999 (E) kennst, dann schaue einmal in den
Anhang J.3.
Und? Da steht, dass es implementationsspezifische Unterschiede gibt.
Das ist kein Geheimnis.
Das sind eben Dinge, die nicht durch die Norm spezifiziert
sind, sondern durch eine Implementation. Insofern legt die
Norm nicht alle Details fest.
Post by Till Potinius
"Nicht in der Zuständigkeit" heißt nicht nur, dass es nichts ändern
muss, sondern dass es nichts ändern darf.
Durch die Festlegung von Kursivschrift ändert das Ausgabegerät
ja nichts, weil das C-Programm dazu gar nichts festlegt.

Wenn beispielsweise ein C-Programm etwas auf einem Drucker
ausgibt, dessen Farbvorrat langsam zu Ende geht, so daß sich
die Schriftfarbe während der Ausgabe von schwarz nach
dunkelgrau verändert, ist dies immer noch eine
C-Implementation, wenn es abgesehen davon eine ist.

Die C-Norm legt keine Anforderungen an die Schriftfarbe des
stdout-Ausgabegeräts fest, auch nicht, daß diese sich nicht ändert.

Eine C-Implementation muß die Anforderungen der
C-Spezifikation erfüllen, aber nicht mehr. Was von der
Spezifikation nicht verlangt wird, muß auch nicht erfüllt
werden.
Andreas Eibach
2007-03-11 19:48:02 UTC
Permalink
Post by Till Potinius
Deine "HTML-Programme" sind auch durch eine Verbesserung der Hardware
nicht leistungsfähiger. Ein richtiger Algorithmus wird nicht durch sich
selbst, sondern nur durch die Hardware eingeschränkt.
Schon dieser Name (" ") lässt mich frösteln.
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es ist genau
festgelegt, wie sich zum Beispiel eine while-Schleife bei einer
Ausführung verhalten soll.
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung der Tags
gibt, wie aber ein Browser ein "<em>Text</em>" interpretiert, ist nicht
genauer definiert.
Bei einer Programmiersprache ist genau festgelegt, wie sich was verhält,
bei Kenntnis des Programmes und der Eingabe lässt sich die Ausgabe
vorhersagen.
Das ist bei HTML nicht möglich, da es nicht präzise genug definiert ist.
HTML läuft ja auch unter _Seitenbeschreibungssprache_.
Ich habe bei vorgedruckten Bewerbungsformularen
(IT-Personaldienstleister) früher auch immer HTML unter
"Programmiersprachen:" eingetragen; nicht weil ich's nicht besser
wüsste, sondern weil es ständig falsch eingeordnet wird.
Und da die Vordrucke meist sehr engstirnig verfasst sind und das nicht
unter "Sonstige Sprachen" firmieren lassen - tja. Vordruck ist
Vordruck - und die kann ich nicht ändern.
Nur in meinem Kopf kann ich das sehr wohl auseinanderhalten.

-Andreas
Andreas Eibach
2007-03-11 19:49:29 UTC
Permalink
Post by Till Potinius
Deine "HTML-Programme" sind auch durch eine Verbesserung der Hardware
nicht leistungsfähiger. Ein richtiger Algorithmus wird nicht durch
sich selbst, sondern nur durch die Hardware eingeschränkt.
Schon dieser Name (" ") lässt mich frösteln.
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es ist
genau festgelegt, wie sich zum Beispiel eine while-Schleife bei einer
Ausführung verhalten soll.
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung der
Tags gibt, wie aber ein Browser ein "<em>Text</em>" interpretiert, ist
nicht genauer definiert.
Bei einer Programmiersprache ist genau festgelegt, wie sich was
verhält, bei Kenntnis des Programmes und der Eingabe lässt sich die
Ausgabe vorhersagen.
Das ist bei HTML nicht möglich, da es nicht präzise genug definiert ist.
HTML läuft ja auch unter _Seitenbeschreibungssprache_!
Ich habe bei vorgedruckten Bewerbungsformularen
(IT-Personaldienstleister) früher auch immer HTML unter
"Programmiersprachen:" eingetragen; nicht weil ich's nicht besser
wüsste, sondern weil es ständig falsch eingeordnet wird.
Und da die Vordrucke meist sehr engstirnig verfasst sind und das nicht
unter "Sonstige Sprachen" firmieren lassen - tja. Vordruck ist
Vordruck - und die kann ich nicht ändern.
Nur in meinem Kopf kann ich das sehr wohl auseinanderhalten.

-Andreas
Hans-Peter Diettrich
2007-03-12 06:17:37 UTC
Permalink
Post by Andreas Eibach
HTML läuft ja auch unter _Seitenbeschreibungssprache_!
Dazu ist mir inzwischen eingefallen, daß HTML durchaus die Steuerung
eines Ablaufs erlaubt, per Bedingung oder Ereignis. Wenn das Ereignis
"Klick auf Link" eintritt, dann wird die zugehörige Aktion ausgeführt,
d.h. zu einer bestimmten Position oder Seite gesprungen, eine Mail
erstellt...

Und wie sind eingebettete Skripte zu bewerten? Ist HTML eine
erweiterbare Sprache, sowohl syntaktisch wie semantisch? Das wäre
jedenfalls eine Eigenschaft, die vielen anderen Programmiersprachen
völlig fehlt. Ein Basic Interpreter oder C Compiler würde nur
"Syntaxfehler" melden, wenn er im Quelltext auf ein Applet oder
JavaScript stößt - ganz anders bei HTML. Und wenn ein Browser ein
entsprechendes PlugIn nicht finden kann, oder ein anderes externes
Objekt, das kann auch bei Programmen in anderen Sprachen passieren.

DoDi
Dietz Proepper
2007-03-14 14:58:52 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Andreas Eibach
HTML läuft ja auch unter _Seitenbeschreibungssprache_!
Dazu ist mir inzwischen eingefallen, daß HTML durchaus die Steuerung
eines Ablaufs erlaubt, per Bedingung oder Ereignis. Wenn das Ereignis
"Klick auf Link" eintritt, dann wird die zugehörige Aktion ausgeführt,
d.h. zu einer bestimmten Position oder Seite gesprungen, eine Mail
erstellt...
Dies ist allerdings eine statische Festlegung.
Post by Hans-Peter Diettrich
Und wie sind eingebettete Skripte zu bewerten?
Diese sind kein Teil von HTML.
Stefan Nobis
2007-03-12 20:56:35 UTC
Permalink
Post by Andreas Eibach
HTML läuft ja auch unter _Seitenbeschreibungssprache_!
Ich habe bei vorgedruckten Bewerbungsformularen
(IT-Personaldienstleister) früher auch immer HTML unter
"Programmiersprachen:" eingetragen; nicht weil ich's nicht besser
wüsste, sondern weil es ständig falsch eingeordnet wird.
Und da die Vordrucke meist sehr engstirnig verfasst sind und das nicht
unter "Sonstige Sprachen" firmieren lassen - tja. Vordruck ist
Vordruck - und die kann ich nicht ändern.
Nur in meinem Kopf kann ich das sehr wohl auseinanderhalten.
Dann versuch mal eine formale Definition von Programmiersprache
aufzustellen, die nicht auf Aufzählungen und Beispiele zurückgreift
und dabei HTML ausschließt, vieles andere hingegen, was so
üblicherweise als Programmiersprache angesehen wird, noch einschließt.

Ich war auch lange Zeit einer dieser "Was für ein Schwachsinn, HTML
als Programmierung zu bezeichnen"-Leute. Heute sehe ich das viel
gelassener und pragmatischer: Eine eher großzügige Interpretation von
Programmierung und Programmiersprache hat auch ihre Vorteile und
Turingvollständigkeit ist letztlich (für die Bewertung einer
Programmiersprache) eh eine ziemlich leere Hülse (DSL müssen nicht per
se turingvollständig sein und viele turingvollständige Sprachen sind
dennoch für viele Aufgaben unpraktisch, umständlich oder völlig
ungeeignet).

So what? Ich habe hier den Eindruck, man möchte seinen Elitarismus
pflegen (so ging es mir früher ja auch, ich kann das gut
nachempfinden). Wenn dem nicht so wäre, gäbe es keine große
Diskussion, sondern irgendjemand könnte eine ziemlich hieb- und
stichfeste formale Definition vorweisen. Kann aber keiner so
richtig...

Just my 0.2EUR, insgesamt ist die Diskussion schon recht müßig.
--
Stefan.
Sebastian Biallas
2007-03-12 21:32:50 UTC
Permalink
Post by Stefan Nobis
So what? Ich habe hier den Eindruck, man möchte seinen Elitarismus
pflegen (so ging es mir früher ja auch, ich kann das gut
nachempfinden). Wenn dem nicht so wäre, gäbe es keine große
Diskussion, sondern irgendjemand könnte eine ziemlich hieb- und
stichfeste formale Definition vorweisen. Kann aber keiner so
richtig...
Der Hintergrund der Diskusstion ist der Thread ab
<hh5jkucuy41c$***@cakruege.my-fqdn.de>. Es geht also um die juristische
Definition von Computerprogramm.
--
Gruß,
Sebastian
Ole Hinz
2007-03-11 20:06:29 UTC
Permalink
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es ist genau
festgelegt, wie sich zum Beispiel eine while-Schleife bei einer
Ausführung verhalten soll.
Wenn es denn eine while-Schleife gibt. Dies ist ja nicht gesagt.
Post by Till Potinius
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung der Tags
gibt, wie aber ein Browser ein "<em>Text</em>" interpretiert, ist nicht
genauer definiert.
In C wird ein Header stdio.h definiert, der für printf zuständig ist.
Aber es gibt eine ganze Reihen von Systemen, die man in C programmiert,
die aber keinen oder einen unvollständigen Header stdio.h haben.
Beispielsweise, weil das zu steuernde Gerät kein stdout hat. Und
trotzdem würde man sagen, dass das Gerät/der uController in C
programmiert wurde.
Post by Till Potinius
Bei einer Programmiersprache ist genau festgelegt, wie sich was verhält,
bei Kenntnis des Programmes und der Eingabe lässt sich die Ausgabe
vorhersagen.
Das ist doch bei HTML nicht anders...
Wenn Du eine Seite nimmst und die in einen spezifischen Browser
(HTML-Prozessor) lädst, kannst Du die Ausgabe sehr wohl vorhersagen.
Das es auch andere HTML-Prozessoren/Browser gibt, stört nicht.
Post by Till Potinius
----------------------------------------
public class Hallowelt {
pulic static void main( String[] args) {
while(true) {
system.out.println("1");
}
}
}
----------------------------------------
Das kann HTML nicht.
Muß eine Sprache das eigentlich können? Man kann doch auch sinnvolle
Programme schreiben, ohne einen Sprungbefehl zu nutzen.


Gruß
Ole
--
http://www.ole-hinz.de
Till Potinius
2007-03-11 20:51:43 UTC
Permalink
Post by Ole Hinz
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es ist genau
festgelegt, wie sich zum Beispiel eine while-Schleife bei einer
Ausführung verhalten soll.
Wenn es denn eine while-Schleife gibt. Dies ist ja nicht gesagt.
Es gibt einige Definitionen, die ein Schleifenkonstrukt, welcher Form auch
immer, für nötig halten für eine Programmiersprache.
Post by Ole Hinz
Post by Till Potinius
Das fehlt bei HTML zu großen Teilen, da es zwar eine Bedeutung der Tags
gibt, wie aber ein Browser ein "<em>Text</em>" interpretiert, ist nicht
genauer definiert.
In C wird ein Header stdio.h definiert, der für printf zuständig ist.
Aber es gibt eine ganze Reihen von Systemen, die man in C programmiert,
die aber keinen oder einen unvollständigen Header stdio.h haben.
Beispielsweise, weil das zu steuernde Gerät kein stdout hat. Und
trotzdem würde man sagen, dass das Gerät/der uController in C
programmiert wurde.
Das war auch nur ein Beispiel. Selbstverständlich ist eine
Programmiersprache nicht darüber definiert, dass es printf oder
ähnliches gibt.
Und diese Geräte ohne stdio.h mögen zwar in einer Sprache programmiert
werden, die C ähnlich ist, aber es ist kein vollständiges C, da dafür
eben auch die stdio.h implementiert sein muss.
Post by Ole Hinz
Post by Till Potinius
Bei einer Programmiersprache ist genau festgelegt, wie sich was verhält,
bei Kenntnis des Programmes und der Eingabe lässt sich die Ausgabe
vorhersagen.
Das ist doch bei HTML nicht anders...
Wenn Du eine Seite nimmst und die in einen spezifischen Browser
(HTML-Prozessor) lädst, kannst Du die Ausgabe sehr wohl vorhersagen.
Das es auch andere HTML-Prozessoren/Browser gibt, stört nicht.
Der Unterschied ist, bei HMTL musst du den Browser kennen, um zu wissen,
ob <em> zum Beispiel Fett oder kursiv oder blinkend dargestellt wird.

Bei einem C-Programm reicht der Quelltext unahbhängig von Hardware.

Aber der eigentliche Unterschied ist doch, dass Programmiersprachen dazu
dienen, Algorithmen formal festzuhalten(und dann später automatisiert
auszuführen).
Und ein Quicksort lässt sich in HTML nicht schreiben, in Java, C, oder
auch Haskell aber schon.
Post by Ole Hinz
Post by Till Potinius
----------------------------------------
public class Hallowelt {
pulic static void main( String[] args) {
while(true) {
system.out.println("1");
}
}
}
----------------------------------------
Das kann HTML nicht.
Muß eine Sprache das eigentlich können? Man kann doch auch sinnvolle
Programme schreiben, ohne einen Sprungbefehl zu nutzen.
Ohne Sprungbefehle gibt es kein if.
Ohne if kann man wenig sinnvolles schreiben.

Mir fällt jetzt nichts ein, was ohne if-Abfragen/bedingte Sprünge
auskommt. Und Schleifen sind ja nichts anderes als bedingte Sprünge im
Programmtext.

Gut, einfache Arithmetik, aber sonst?
Mir fällt zumindest gerade nichts ein.

MFG, Till
--
"Denken sie auch oder schlurfen sie nur sinnlos ber die Erde?"

- Franz Kafka
Stefan Ram
2007-03-11 21:17:04 UTC
Permalink
Post by Till Potinius
Es gibt einige Definitionen, die ein Schleifenkonstrukt,
welcher Form auch immer, für nötig halten für eine
Programmiersprache.
(Das ist vielleicht die sogenannte LOOP-Äquivalenz.)

Jetzt würde mich aber doch einmal interessieren,
in welcher Quelle dies verlangt wird.
Post by Till Potinius
Der Unterschied ist, bei HMTL musst du den Browser kennen, um
zu wissen, ob <em> zum Beispiel Fett oder kursiv oder blinkend
dargestellt wird.
Allerdings muß man dies ja nicht wissen. Wenn ich heute eine
Webseite schreibe, kann es ja sein, daß die sich später jemand
mit einem Browser anschaut, den es heute noch gar nicht gibt.
Daher kann ich im allgemeinen nicht erwartet, dies zu wissen.

Ich verwende also »em« um etwas zu /betonen/, nicht um es
kursiv darzustellen.

Außerdem - ich wiederhole mich -, wenn ich etwas mit printf
nach stdout schreibe, weiß ich auch nicht, ob es fett oder
kursiv oder blinkend dargestellt werden wird.
Post by Till Potinius
Und ein Quicksort lässt sich in HTML nicht schreiben, in Java,
C, oder auch Haskell aber schon.
Quicksort ist ein Sortierverfahren für prozedurale Sprachen
(teilweise auch ähnliche Sprachen). Das kann man im
klassischen FORTRAN mangels Rekursion auch nicht direkt
formulieren.

Man kann in HTML etwas schreiben, das man mit gutem Willen
als Sortierprogramm ansehen kann, aber mit einem anderen
Verfahren. So:

<a href="#m12">12</a>
<a href="#m12">21</a>
<a href="#m13">13</a>
<a href="#m13">31</a>
<a id="m12">12</a>
<a id="m13">13</a>

Im Turing-Modell implementiert ein Programm eine berechenbare
Funktion. Auf realen Computer geht das immer nur für endlich
viele Ein- und Ausgabezustände. Solch eine real-berechenbare
Funktion kann man immer trivial durch eine Wertetabelle
implementieren.

Interaktive Programme lassen sich mit dem Turing-Modell
möglicherweise gar nicht beschreiben. Darum geht es ja in
den von mir heute schon genannten Quellen:

http://www.engr.uconn.edu/~dqg/papers/myth.pdf
http://www.cse.uconn.edu/~dqg/papers/cie05.pdf
http://c2.com/cgi/wiki?InteractiveComputationIsMorePowerfulThanNonInteractive
Post by Till Potinius
Ohne Sprungbefehle gibt es kein if.
Ohne if kann man wenig sinnvolles schreiben.
In Haskell kann man dies weitgehend durch »pattern matching«
ersetzen und in objektorientierten-Sprachen durch Polymorphie.

»Replace Conditional With Polymorphism (...) This is the
heart of why ObjectOrientedProgramming is better.«

http://c2.com/cgi/wiki?ReplaceConditionalWithPolymorphism
Michael Hofmann
2007-03-12 08:19:29 UTC
Permalink
Post by Stefan Ram
Post by Till Potinius
Und ein Quicksort lässt sich in HTML nicht schreiben, in Java,
C, oder auch Haskell aber schon.
Quicksort ist ein Sortierverfahren für prozedurale Sprachen
(teilweise auch ähnliche Sprachen). Das kann man im
klassischen FORTRAN mangels Rekursion auch nicht direkt
formulieren.
Das Sortierverfahren Quicksort ist weder für noch gegen proz. oder funk. Sprache. Auch sind die Mittel von klassischem Fortran sind völlig ausreichend um Quicksort für die Ausführung zu formulieren.
Post by Stefan Ram
Man kann in HTML etwas schreiben, das man mit gutem Willen
als Sortierprogramm ansehen kann, aber mit einem anderen
<a href="#m12">12</a>
<a href="#m12">21</a>
<a href="#m13">13</a>
<a href="#m13">31</a>
<a id="m12">12</a>
<a id="m13">13</a>
Damit programmierst Du das Sortierprogramm nicht zur Ausführung durch den Computer/Browser sondern durch den Menschen vor dem Bildschirm. Den er wird es sein der es durch entsprechende Klicks abarbeitet. Dies ist aber vollkommen unabhängig von HTML auch mit Zettel und Stift möglich. Die Programmiersprachen sind in beiden Fällen die Zeichen und Ziffern die der Mensch entsprechend interpretiert und abarbeitet.


Michael
Till Potinius
2007-03-12 08:26:41 UTC
Permalink
Post by Stefan Ram
Post by Till Potinius
Ohne Sprungbefehle gibt es kein if.
Ohne if kann man wenig sinnvolles schreiben.
In Haskell kann man dies weitgehend durch »pattern matching«
ersetzen und in objektorientierten-Sprachen durch Polymorphie.
»Replace Conditional With Polymorphism (...) This is the
heart of why ObjectOrientedProgramming is better.«
Auch Polymorphie, Pattern-Matching und ähnliches sind letzlich bedingte
Sprünge bzw. Abfragen.

Es wird, bei einem bestimmten Eingabewert(Bedingung) zu einer
Methode/Befehl gesprungen(Sprung).
Oder es wird eben überprüft, ob ein bestimmtes Muster auf den Ausdruck
passt.

MFG, Till
--
"Nach ber 10 Jahren Computertechnik mssten die
Tastaturhersteller eigentlich gelernt haben, dass
Tastaturen unten Abflusslcher fr den Kaffee brauchen."
- Peter Becker
Thomas Stanka
2007-03-12 09:08:10 UTC
Permalink
Post by Stefan Ram
Post by Till Potinius
Es gibt einige Definitionen, die ein Schleifenkonstrukt,
welcher Form auch immer, für nötig halten für eine
Programmiersprache.
(Das ist vielleicht die sogenannte LOOP-Äquivalenz.)
Jetzt würde mich aber doch einmal interessieren,
in welcher Quelle dies verlangt wird.
Gegenfrage, wo wird ernsthaft das Gegenteil behauptet?

In der formalen Semantik wird versucht die Bedeutung eines
Computerprogrammes zu berechnen. Innerhalb der Semantik lässt sich
zeigen, dass eine Semantik ohne While-Schleife nicht ausreicht um alle
Programme zu berechen. Somit ist die Semantik der While-Schleife wohl
ein notwendiges Kriterium für eine x-bel. Programmiersprache. Jetzt
kann man nur noch diskutieren, aus welchem Grund man eine spezielle
Sprache die semantisch nur eine Teilfunktion aufweist trotzdem zu den
Programmiersprachen rechnen will.

bye Thomas
Hans-Peter Diettrich
2007-03-12 12:31:06 UTC
Permalink
Post by Thomas Stanka
In der formalen Semantik wird versucht die Bedeutung eines
Computerprogrammes zu berechnen. Innerhalb der Semantik lässt sich
zeigen, dass eine Semantik ohne While-Schleife nicht ausreicht um alle
Programme zu berechen.
Programmiersprachen werden auch (und gerade) für spezielle Gebiete
benötigt, in denen eine unspezifische Sprache zu unhandlich ist. Diese
Sprachen müssen dann nur über solche Sprachmittel verfügen, die zur
Bearbeitung der entsprechenden Aufgabenstellungen auch tatsächlich
notwendig sind.

DoDi
Thomas Stanka
2007-03-13 06:42:56 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Thomas Stanka
In der formalen Semantik wird versucht die Bedeutung eines
Computerprogrammes zu berechnen. Innerhalb der Semantik lässt sich
zeigen, dass eine Semantik ohne While-Schleife nicht ausreicht um alle
Programme zu berechen.
Programmiersprachen werden auch (und gerade) für spezielle Gebiete
benötigt, in denen eine unspezifische Sprache zu unhandlich ist. Diese
Sprachen müssen dann nur über solche Sprachmittel verfügen, die zur
Bearbeitung der entsprechenden Aufgabenstellungen auch tatsächlich
notwendig sind.
Wenn eine Sprache keine Semantik der While-Schleife enthält, warum
soll sie dann eine Programmiersprache sein? Aufrund welcher
Eigenschaft?
Ich sehe da zwar durchaus Diskussionspotential, aber in dem Thread
noch keine echten Argumente.

bye Thomas
Ole Hinz
2007-03-14 19:36:15 UTC
Permalink
Post by Thomas Stanka
Wenn eine Sprache keine Semantik der While-Schleife enthält, warum
soll sie dann eine Programmiersprache sein? Aufrund welcher
Eigenschaft?
Ich sehe da zwar durchaus Diskussionspotential, aber in dem Thread
noch keine echten Argumente.
Dies gilt umgekehrt auch. Warum sollte eine Programmiersprache eine
While-Schleife haben?
Man kann vieles auch ohne eine while-Schleife machen. Beispielsweise
primitv rekursive Funktionen berechnen...


Gruß
Ole Hinz
--
http://www.ole-hinz.de
Ole Hinz
2007-03-12 20:20:06 UTC
Permalink
Post by Till Potinius
Post by Ole Hinz
Post by Till Potinius
Was dazu fehlt: Programmiersprachen sind formal definiert, es ist genau
festgelegt, wie sich zum Beispiel eine while-Schleife bei einer
Ausführung verhalten soll.
Wenn es denn eine while-Schleife gibt. Dies ist ja nicht gesagt.
Es gibt einige Definitionen, die ein Schleifenkonstrukt, welcher Form auch
immer, für nötig halten für eine Programmiersprache.
Mit meinen paar Kenntnissen der theoretischen Informatik kenn ich die
Definitionen nicht. Wenn ich als Maschine einen Kellerautomaten habe,
brauche ich keine Schleifen.
Post by Till Potinius
Post by Ole Hinz
Post by Till Potinius
Bei einer Programmiersprache ist genau festgelegt, wie sich was verhält,
bei Kenntnis des Programmes und der Eingabe lässt sich die Ausgabe
vorhersagen.
Das ist doch bei HTML nicht anders...
Wenn Du eine Seite nimmst und die in einen spezifischen Browser
(HTML-Prozessor) lädst, kannst Du die Ausgabe sehr wohl vorhersagen.
Das es auch andere HTML-Prozessoren/Browser gibt, stört nicht.
Der Unterschied ist, bei HMTL musst du den Browser kennen, um zu wissen,
ob <em> zum Beispiel Fett oder kursiv oder blinkend dargestellt wird.
Wenn ich ein C-Programm kompiliere und unter einem gängigen OS zur
Ausführung bringe, dann "sagt" das OS dem Prozessor: Schau dir mal die
Daten an und nehme sie als Input zu Deinem uCode. Der Prozessor
behandelt mein Programm als Daten.
Wenn ich jetzt einen Browser als Prozessor ansehe, gebe ich ihm ein
HTML-"Programm" und sage: Führ das aus und gibt mir eine "entsprechende"
Ausgabe.
Die sieht dann zugegeben unter Lynx anders aus als unter Safari, IE oder
was auch immer.
Post by Till Potinius
Bei einem C-Programm reicht der Quelltext unahbhängig von Hardware.
Fast. Wenn wir mal beispielsweise Floatingpoint-Effekte außer acht
lassen, die von Hardware zu Hardware unterschiedlich sein kann. (Nicht
nur mit Pentium-Bug.)
Post by Till Potinius
Aber der eigentliche Unterschied ist doch, dass Programmiersprachen dazu
dienen, Algorithmen formal festzuhalten(und dann später automatisiert
auszuführen).
In HTML wird ein Inhalt algorithmisch beschrieben. Dieser Algorithmus
wird dann durch einen Interpreter (Browser) interpretiert.
Post by Till Potinius
Und ein Quicksort lässt sich in HTML nicht schreiben, in Java, C, oder
auch Haskell aber schon.
Was sicherlich damit zusammenhängt, dass HTML nicht turingmächtig ist.
Aber diese Forderung steht auch noch als ungeklärt im Raum. Ich fordere
nicht die Turingmächtigkeit und kann deshalb damit leben, dass ich in
HTML keinen Quicksort programmieren kann.
Post by Till Potinius
Gut, einfache Arithmetik, aber sonst?
Reicht das nicht? Dafür wurden durch ursprünglich
Computer/Rechenmaschinen konstruiert.

Man könnte auch einem Roboter eine Sequenz von Bewegungen programmieren,
die er nur einmal ausführen soll. Der letzte Befehl (der auch
automatisch angehängt werden kann), lautet dann: Fahr in den Anfangszustand.
Damit kann man eine Menge machen...

Gruß
Ole
--
http://www.ole-hinz.de
Stefan Ram
2007-03-12 20:42:56 UTC
Permalink
Post by Ole Hinz
Wenn ich ein C-Programm kompiliere und unter einem gängigen OS zur
Ausführung bringe, dann "sagt" das OS dem Prozessor: Schau dir mal die
Daten an und nehme sie als Input zu Deinem uCode. Der Prozessor
behandelt mein Programm als Daten.
Wenn der 6502 auf ein

LDA 0

stößt, dann behandelt er den Inhalt der Adresse 0 als
ein Datum. Bei einem

JMP 0

würde ich aber sagen, daß es dann den Inhalt der Adresse
0 als ein Programm(stück) ansieht.

(Ja! Man kann es auch als Datum ansehen, es ist nur die
/übliche Sichtweise/, es dann als »Programmstück« anzusehen.)
Post by Ole Hinz
Wenn ich jetzt einen Browser als Prozessor ansehe, gebe ich ihm
ein HTML-"Programm" und sage: Führ das aus und gibt mir eine
"entsprechende" Ausgabe.
Die Frage ist, ob diese operationale Semantik sich bei
einem bestimmten Prozessor als eine spezielle Eigenart
dieses Prozessors ergibt, oder ob sie durch die Spezifikation
der Sprache festgelegt ist.

In C ist die Operation »while(1);« durch die Spezifikation
festgelegt.

HTML kann aber entsprechend seiner Spezifikation auch durch
einen Interpretierer verarbeitet werden, der gar nichts
anzeigt, sondern etwas vorliest oder dem Dokument einzelne
Daten entnimmt, um sie weiterzuverarbeiten.

Daher gehört das Verhalten einer C-Implementation bei
»while(1);« zur Sprachsematik, das Verhalten eines
HTML-Verarbeiters jedoch nicht und kann daher nicht der
Sprache zugerechnet werden. Diese erhält dadurch also
keine operationale Semantik.
Post by Ole Hinz
In HTML wird ein Inhalt algorithmisch beschrieben.
Das kann man nun wirklich nicht so sagen - oder für
Dich bedeutet »algorithmisch« etwas ganz anderes als
für mich.
Post by Ole Hinz
Dieser Algorithmus wird dann durch einen Interpreter (Browser)
interpretiert.
Das wollte ich ja eben widerlegen.
Post by Ole Hinz
Man könnte auch einem Roboter eine Sequenz von Bewegungen
programmieren, die er nur einmal ausführen soll. Der letzte
Befehl (der auch automatisch angehängt werden kann), lautet
dann: Fahr in den Anfangszustand. Damit kann man eine Menge
machen...
Die meisten Laufroboter laufen derzeit noch so
vorprogrammiert. (Das wäre übrigens ein Nur-Ausgabe-System.)

Eine Ausnahme:

http://paulgraham.com/anybots.html
Hans-Peter Diettrich
2007-03-13 02:07:45 UTC
Permalink
Post by Stefan Ram
Wenn der 6502 auf ein
LDA 0
stößt, dann behandelt er den Inhalt der Adresse 0 als
ein Datum. Bei einem
JMP 0
würde ich aber sagen, daß es dann den Inhalt der Adresse
0 als ein Programm(stück) ansieht.
Information ist nichts Absolutes. Ob die Bits an einer bestimmten
Speicheradresse Daten, Maschinenbefehle oder sonstwas sind, ergibt sich
nur aus deren Verwendung, zu jedem beliebigen Zeitpunkt. Damit folgt die
Bedeutung (Information) aus der Verwendung, nicht umgekehrt.
Post by Stefan Ram
In C ist die Operation »while(1);« durch die Spezifikation
festgelegt.
HTML kann aber entsprechend seiner Spezifikation auch durch
einen Interpretierer verarbeitet werden, der gar nichts
anzeigt, sondern etwas vorliest oder dem Dokument einzelne
Daten entnimmt, um sie weiterzuverarbeiten.
Ein Quelltext kann mit den unterschiedlichsten Programmen be/verarbeitet
werden. Was aus einem C Quelltext erzeugt wird, hängt vom jeweiligen
Compiler ab - und das muß nicht notwendigerweise ein C Compiler sein.
Ich erinnere mich an ein Beispiel, das sowohl von einem Fortran- als
auch von einem Algol-Compiler fehlerfrei compiliert werden konnte - mit
völlig unterschiedlichem Ergebnis: das compilierte Programm hat
ausgegeben, mit welchem Compiler es übersetzt wurde. Man könnte das ggf.
weiterführen, indem sogar ein compiliertes Programm auf
unterschiedlichen Prozessoren ein völlig unterschiedliches Verhalten
zeigt, weil der vom Compiler erzeugten Maschinencode eben gemäß dem
Befehlssatz des jeweiligen Prozessors interpretiert wird.

Damit hängt die Interpretation eines beliebigen Textes vom jeweiligen
Kontext ab. Legt man die reine Sprachspezifikation zugrunde, ergibt sich
die Bedeutung aus dieser Spezifikation, unabhängig davon, was ein
konkreter Browser oder sonst ein Programm aus dem selben Text machen würde.

Zudem gibt es mehr oder weniger präzise (restriktive)
Sprachdefinitionen. Die C Spezifikation läßt für die Interpretation von
"while" usw. nur wenig Spielraum offen, während die HTML Spezifikation
nur wenige Einschränkungen vorgibt. Englische Spezifikationen haben da
ihre liebe Mühe mit "must", das nicht fälschlierweise als "muß"
übersetzt werden darf. Die Java-Spezifikation enthält einen eigenen
Abschnitt "On the meaning of 'must'".

DoDi
Stefan Ram
2007-03-13 03:55:45 UTC
Permalink
Ob die Bits an einer bestimmten Speicheradresse Daten,
Maschinenbefehle oder sonstwas sind,
¯¯¯¯
Bits »sind« nicht Daten oder Maschinenbefehle.
Dies ist nur eine Art, sie zu interpretieren.
Damit folgt die Bedeutung (Information) aus der Verwendung,
nicht umgekehrt.
Die Bedeutung eines Symbols ergibt sich aus
der Sprache dieses Symbols. Die Sprache stellt
dafür eine sogenannte »Semantik« bereit.

Wenn die Sprache des Symbols nicht bekannt ist,
dann kann die Bedeutung eben nicht ermittelt werden.
Ein Bitwert (»0« oder »1«) ist ein Symbol in diesem Sinne.
Was aus einem C Quelltext erzeugt wird, hängt vom jeweiligen
Compiler ab - und das muß nicht notwendigerweise ein C Compiler sein.
Es gibt im Englischen beispielsweise die Verbform »bitten«,
die soviel wie »gebissen« bedeutet. Man kann dieses Wort
zufälligerweise auch als deutschen Infinitiv »bitten«
interpretieren. Diese Interpretation folgt dann aber nicht
mehr den Regeln der englischen Sprache und ist insofern
irrelevant, wenn man etwas über das Englische aussagen will.
Damit hängt die Interpretation eines beliebigen Textes vom
jeweiligen Kontext ab.
In irgend etwas einen »Text« zu sehen, ist bereits eine
Interpretation. Etwa, wenn man auf der Marsoberfläche
eine Formation findet, die dem Wort »Hallo« ähnelt.
Ist es ein Text oder nur eine Textur?
Englische Spezifikationen haben da ihre liebe Mühe mit "must",
das nicht fälschlierweise als "muß" übersetzt werden darf.
Je nach der Spezifikation und Situation kann »muß« auch oft
richtig sein.
Die Java-Spezifikation enthält einen eigenen Abschnitt "On the
meaning of 'must'".
Nein. Überzeuge dich selber:

http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html

Allerdings findet man in ISO/IEC 9899:1999 (E), 4

»In this International Standard, "shall" is to be
interpreted as a requirement on an implementation or on a
program; conversely, "shall not" is to be interpreted as a
prohibition.«

Oder

»1. MUST This word, or the terms "REQUIRED" or "SHALL",
mean that the definition is an absolute requirement of the
specification.

2. MUST NOT This phrase, or the phrase "SHALL NOT", mean
that the definition is an absolute prohibition of the
specification.«

http://www.ietf.org/rfc/rfc2119.txt
Hans-Peter Diettrich
2007-03-13 11:44:05 UTC
Permalink
Post by Stefan Ram
Ob die Bits an einer bestimmten Speicheradresse Daten,
Maschinenbefehle oder sonstwas sind,
¯¯¯¯
Bits »sind« nicht Daten oder Maschinenbefehle.
Dies ist nur eine Art, sie zu interpretieren.
Danke, daß Du meine Erklärungen durch Deine ersetzt hast ;-]
Post by Stefan Ram
Die Java-Spezifikation enthält einen eigenen Abschnitt "On the
meaning of 'must'".
Schau selber:
<http://java.sun.com/docs/books/jvms/first_edition/html/Instructions.doc.html#53441>

DoDi
Stefan Ram
2007-03-13 23:21:29 UTC
Permalink
Post by Hans-Peter Diettrich
Die Java-Spezifikation enthält einen eigenen Abschnitt "On
the meaning of 'must'".
<http://java.sun.com/docs/books/jvms/first_edition/html/Instructions.doc.html#53441>
Das ist allerdings nicht die Spezifikation der
Programmiersprache Java, sondern die der JVM.
(Die JVM interpretiert auch Bytecode aus anderen
Sprachen wie Groovy, Scala oder JRuby.)

Außerdem heißt der Abschnitt nicht »On the meaning of 'must'".

Dieser Wortlaut ist deshalb relevant, weil ich diesen Titel
zunächst mit einer Suchmaschine gesucht hatte und Du diesen
Wortlaut in Anführungszeichen setztest, was üblicherweise ein
/wortgetreues/ Zitat kennzeichnet. So konnte ich diesen
JVM-Abschnitt aber nicht findet.

In wörtlichen Sinne gibt es also diesen Abschnitt also
tatsächlich nicht. Der Titel des Abschnitts lautet

»6.1 Assumptions: The Meaning of "Must"«
Hans-Peter Diettrich
2007-03-14 03:39:42 UTC
Permalink
Post by Stefan Ram
Post by Hans-Peter Diettrich
Die Java-Spezifikation enthält einen eigenen Abschnitt "On
the meaning of 'must'".
<http://java.sun.com/docs/books/jvms/first_edition/html/Instructions.doc.html#53441>
Das ist allerdings nicht die Spezifikation der
Programmiersprache Java, sondern die der JVM.
(Die JVM interpretiert auch Bytecode aus anderen
Sprachen wie Groovy, Scala oder JRuby.)
Außerdem heißt der Abschnitt nicht »On the meaning of 'must'".
Du mußt etwas flexibel sein, der Wortlaut kann sich in verschiednen
Versionen eines Dokuments unterscheiden. Da ich das ursprüngliche
Dokument nicht mehr im Web gefunden habe, habe ich ersatzweise eine
andere Stelle des i.W. gleichen Inhalts gepostet.
Post by Stefan Ram
Dieser Wortlaut ist deshalb relevant, weil ich diesen Titel
zunächst mit einer Suchmaschine gesucht hatte und Du diesen
Wortlaut in Anführungszeichen setztest, was üblicherweise ein
/wortgetreues/ Zitat kennzeichnet. So konnte ich diesen
JVM-Abschnitt aber nicht findet.
Wie sieht dann üblicherweise ein /sinngemäßes/ Zitat aus?

Mit Deiner engstirnigen Einstellung stehst Du Dir nur selbst im Wege.
Die zwischenmenschliche Kommunikation verläuft nun mal etwas anders, als
die mit einem Programm.

DoDi
Till Potinius
2007-03-12 23:07:23 UTC
Permalink
Post by Ole Hinz
Mit meinen paar Kenntnissen der theoretischen Informatik kenn ich die
Definitionen nicht. Wenn ich als Maschine einen Kellerautomaten habe,
brauche ich keine Schleifen.
Das ist eine Frage des Gesichtspunktes. Der nächste Zustand in einem
Kelleratomat ist definiert durch Eingabeelement, oberstes Kellerelement
und momentanen Zustand.
Sobald diese drei Sachen im Ablauf des Automaten noch einmal identisch
auftreten, ist das im Prinzip eine Schleife.
Post by Ole Hinz
Post by Till Potinius
Aber der eigentliche Unterschied ist doch, dass Programmiersprachen
dazu dienen, Algorithmen formal festzuhalten(und dann später
automatisiert auszuführen).
In HTML wird ein Inhalt algorithmisch beschrieben. Dieser Algorithmus
wird dann durch einen Interpreter (Browser) interpretiert.
Jain. In HTML wird der Inhalt durch einen bestimmten Algorithmus
interpretiert, dieser ist aber für alle HTML-Seiten(bei gleicher
HTML-Version) identisch.
Die Umwandlung von HTML in eine Ausgabe auf dem Bildschirm folgt einem
Alorithmus, dieser ist aber nicht in HTML geschrieben, sondern nutzt nur
die HTML-Befehle als Steueranweisungen.

In einem C-Programm dagegen kann man auch neue Algorithmen formulieren und
ausführen.

Der Algorithmus zur Darstellung von HTML ist eben statisch, egal welche
Daten ich eingebe, es gibt nur eine endliche Anzahl an Möglichkeiten, was
der Algorithmus ausführen kann.

Bei anderen Sprachen, wie C, ist der Algorithmus zur Darstellung
erweiterbar, ich kann einen nahezu beliebigen Algorithmus in der Sprache
niederschreiben und dieser kann ausgeführt werden.


Oder anders formuliert:
Es gibt eine endliche Menge an Eingabedaten, bei deren Interpretation
(durch einen Browser/Interpreter) alle für HTML möglichen Algorithmen
ausgeführt werden.

Für C, Java und ähnliches sieht das anders aus:
Zu jeder endlichen Menge an Eingabedaten eines Interpreters/Compilers
einer Sprache(C, Java, Haskell u.a.) existiert ein Algorithmus, der bei
der Interpretation der Eingabedaten in der Sprache nicht ausgeführt wird.
Post by Ole Hinz
Post by Till Potinius
Gut, einfache Arithmetik, aber sonst?
Reicht das nicht? Dafür wurden durch ursprünglich
Computer/Rechenmaschinen konstruiert.
Rechenmaschinen ja, Computer nein.
Siehe die Prinzipien des John von Neumann, der eben explizit bedingte
Sprünge im Programm fordert.
Post by Ole Hinz
Man könnte auch einem Roboter eine Sequenz von Bewegungen
programmieren, die er nur einmal ausführen soll. Der letzte Befehl (der
auch automatisch angehängt werden kann), lautet dann: Fahr in den
Anfangszustand. Damit kann man eine Menge machen...
Wobei du damit eine Schleife hättest, wenn auch ohne Bedingung.
--
"Die Arznei macht kranke,
die Mathematik traurige und
die Theologie sndhafte Leute."
- Martin Luther
Hans-Peter Diettrich
2007-03-12 05:48:02 UTC
Permalink
Post by Stefan Ram
Abgesehen davon verlangt aber niemand als Kriterium für eine
Programmiersprache, daß so etwas möglich ist. So gibt es
eingebettete Systeme, die mangels entsprechender Gerätschaften
keine Möglichkeit bieten, etwas einzulesen beziehungsweise
auszugeben. Solche System werden aber auch »programmiert«.
Im ersten Semester habe ich noch gelernt, daß es keine Programme gibt,
die weder Input noch Output haben. Naja, konstruieren könnte man solche
Programme schon...

Zumindest gibt es aber einen Grund, warum eingebettete Systeme überhaupt
einen Prozessor brauchen - irgendwelchen Input und Output muß der ja
sinnvollerweise auch tätigen. Und wenn's nur die Ausgabe eines RFID ist...

DoDi
Florian Kreidler
2007-03-11 19:37:14 UTC
Permalink
Post by Carsten Krueger
Post by Stefan Ram
Da in dieser Runde ein neuer Verlauf eröffnet wurde, fasse
Du meinst du widerholst deine Meinung.
Zeige mir ein "HTML-Programm" was die Eingabe verdoppelt oder eines was
unendlich viele 1en ausgibt.
Letzteres könnte aus zwei Dateien one.html und ones.html bestehen:

one.html
----------------------
<HTML><BODY>1</BODY></HTML>
----------------------

ones.html
----------------------
<HTML>
<FRAMESET COLS="*,*">
<FRAME NAME="car" SRC="one.html">
<FRAME NAME="cdr" SRC="ones.html">
</FRAMESET></HTML>
----------------------

Aus Sicherheitsgründen weigern sich viele HTML-Renderer, rekursive
HTML-Programme zu interpretieren. Daher wird man in der Praxis Hyperlinks
verwenden, bei deren Anwahl der jeweils nächste Rekursionsschritt
ausgeführt wird. Mit dieser Methode läßt sich dann auch ein endlicher
Automat realisieren, der die ziffernweise Eingabe einer Dezimalzahl erlaubt
und das Doppelte dieser Zahl berechnet.
Stefan Ram
2007-03-11 13:19:39 UTC
Permalink
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Wenn ich mich recht erinnere, engagierst Du dich zu diesem
Thema bereits seit einer Weile in de.soc.recht.marken+urheber
und seit kurzem auch in de.sci.mathematik und vertrittst dort
teilweise sehr bestimmt und nachdrücklich die Ansicht, daß
jede Programmiersprache turingvollständig sein müsse.

Da in dieser Runde ein neuer Verlauf eröffnet wurde, fasse
ich den bisherigen Erkenntnisstand noch einmal zusammen:

Ein "Programm" ist ein Werk, das Informationen enthält, die
Aspekte eines Prozesses bestimmen (einschränken) können. Der
Schöpfer des Werkes steuert den Prozeß dabei also nicht selber
interaktiv (wie ein Auto), sondern durch eine Vorausverfügung
(das Programm), ohne daß er bei dem Prozeß anwesend sein muß.

Durch eine HTML-Quelle wird eben der Anzeige- und
Interaktionsprozeß beim Betrachten der Seite mitbestimmt,
vorausbestimmt oder eben "programmiert". (Es gab früher
auch Bücher zum »Programmierten Lernen«: »Wenn Sie die
Antwort A für richtig halten, lesen Sie auf Seite 73 weiter.«)

Die Art der Programmierung ist in HTML aber weniger imperativ
als deklarativ. Der Autor baut ein Textmodell auf. Dadurch
legt er den Prozeß nicht genau fest. Schließlich muß eine
HTML-Seite gar nicht in einem Browser betrachtet werden,
sondern sie kann auch ausgedruckt oder maschinell vorgelesen
werden.

Der Programmierer bestimmt nicht genau, was wann passiert,
sondern legt nur bestimmte Informationen und Einschränkungen
fest. Dadurch bestimmt er bestimmte Aspekte der Verarbeitung
einer HTML-Quelle mit, ohne alles genau und vollständig zu
kontrollieren. Selbst bei klassischen imperativen Sprachen
wird nicht alles genau festgelegt, in BASIC bei "PRINT 10"
beispielsweise weder Farbe noch Schriftart der "10".

Daher kann man schon sicher sagen, daß HTML keine /imperative/
Programmiersprache sei. Man sieht aber auch bestimmte
deklarative Sprachen, wie Prolog, als "Programmiersprachen"
an. In Prolog beschreibt man vorwiegend Aussagenmengen, in
HTML eine Hypertextstruktur. Dadurch ist die Art der
Prozeßsteuerung indirekter als bei imperativen Sprachen.

Die rein funktionale Sprache Haskell wird von jedem als
Programmiersprache angesehen, kennt aber weder Variablen (also
Speicherplätze mit zeitlichen veränderlichen Werten innerhalb
eines Gültigkeitsbereichs und einer Inkarnation) noch
Anweisungen.

Es gibt eben anerkannte Autoren, die den Begriff
"Programmieren" sogar noch weiter auslegen. Ich zitiere hier
einmal aus dem folgenden de-Gruyter-Lehrbuch:

"Methodisches Programmieren - Entwicklung von Algorithmen
durch schrittweise Verfeinerung" von

Dr. Günter Hommel, Professor für Informatik an der
Technischen Universität München;

Dr. Stefan Jänichen, Hochschulassisten am Fachbereich
Informatik der Technischen Universität Berlin; und

Cornelis H. A. Koster, Professor für Informatik an der
Katholieke Universiteit Nijmegen.

(Berlin; New York: de Gruyter, 1983; ISBN 3-11-009636-6)

Das Zitat lautet:

Unter Programmieren verstehen wir den Versuch, ein Ziel
durch den systematischen Einsatz vorgegebener Mittel zu
erreichen. Erfolgreiches Programmieren setzt genaue
Kenntnisse über Ziel und Mittel voraus, vor allem aber
Erfahrung im systematischen Überbrücken der Lücke zwischen
dem Problem und den verfügbaren Mitteln. Programmieren ist
eine sehr allgemeine, bestimmt nicht auf die Informatik
beschränkte, menschliche Tätigkeit:

Fernseh-Programmierung

Fernseh-Programmierung ist der Versuch, innerhalb eines
vorgegebenen Budgets und gewisser physikalischer
Resourcen, einen angenehmen und interessanten
Fernsehabend aus vorgegebenen Western, Quiz und anderen
Produktionen zusammenzustellen.

Lineare Programmierung

Lineare Programmierung ist z.B. die Technik, aus
Fleisch, Casein, Gewürzen u.s.w. mit gegebenen Preisen
eine Wurst zusammenzustellen, die den gesetzlichen
Bestimmungen nicht widerspricht und maximalen Profit
bringt.

Computer-Programmierung

Computer-Programmierung ist nur dadurch besonders
gekennzeichnet, daß der Computer als Prozessor zum
Ausführen von Algorithmen verwendet wird, die zur
Durchführung gewisser Aufgaben erstellt werden.

(Ende des Zitats)

Also, wenn diese Hochschulprofessoren der Informatik davon
sprechen, einen Fernsehabend oder eine Wurst zu programmieren,
wer will es dann als sicher falsch bezeichnen, wenn jemand von
»Webseiten programmieren« spricht?

Anhang: Ein Tic-Tac-Toe-Spiel in reinem HTML:

http://www.geocities.com/flo_kreidler/tictactoe.html
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die
explizit besagt, daß eine Programmiersprache turingmächtig sein
muss?
Turingvollständigkeit wird von einer Programmiersprache nicht
verlangt. Laut des Fachgebrauchs (bestimmte
SPS-Programmiersprachen sind nicht turingvollständig) und der
relevanten Norm

ISO/IEC 2382-1:1993, Information technology -- Vocabulary
-- Part 1: Fundamental terms

DIN-Normen werden meist verträglich mit solchen ISO-Normen
gestaltet. Außerdem dienen diese ISO-Begriffsnormen auch als
Grundlage für ISO-Normen zu speziellen Sprachen und Techniken.

Auch die amerikanischen Normen folgen den ISO-Begriffen:

http://www.incits.org/tc_home/k5htm/p3.htm#programming_language

Ursprünglich wurde ja die Frage nach »Programm« in
juristischen Texten diskutiert.

Manche Menschen verwenden das Wort »Programm« als eine Art von
Synekdoche, wenn »Text einer formalen Sprache« treffender
wäre, weil ihnen der Begriff »formale Sprache« nicht bekannt
ist. Möglicherweise ist mit »Computerprogramm« auch in manchen
Rechtsnormen ein »von Menschen geschriebener und zur
maschinellen Verarbeitung geeigneter Text einer formalen
Sprache« gemeint.

Andere meinen mit »programmieren« wiederum nur
»imperativ-prozedurales Programmieren« und haben so
umgekehrt ein zu enges Verständnis des Begriffs.

Inzwischen habe ich einen ISO-Normentwurf gefunden, der
anscheinend sogar speziell zur Klärung der Begriffe »Programm«
und »Programmiersprache« für den Geschäftsverkehr und die
Rechtssprechung gedacht ist:

ISO/IEC JTC 1/SC 32/WG1 N 0210R
Languages and Jurisdiction: "Natural", "Special",
"Official", "Artificial", "Indexing", "Programming," etc.

http://metadata-standards.org/metadata-stds/Document-library/Meeting-reports/SC32WG2/2002-05-Seoul/WG2-SEL-003-Languages-&-Jurisdiction-(WG1N210r).rtf
http://jtc1sc36.org/doc/36N0463.pdf
http://vocabulary.jtc1sc36.org/doc/SC36_WG1_N0058.pdf

Auch dort findet sich nichts von »turingmächtigkeit«.

Für Informatiker sind nocht die folgenden Quellen interessant,
die einen "Turing-Mythos" noch auf andere Weise in Frage stellen:

http://www.engr.uconn.edu/~dqg/papers/myth.pdf
http://www.cse.uconn.edu/~dqg/papers/cie05.pdf
http://c2.com/cgi/wiki?InteractiveComputationIsMorePowerfulThanNonInteractive

Supersedes: <Informatikpapst-***@ram.dialup.fu-berlin.de>

Durch das Supersedes wurden zwei irrtümlich doppelt eingefügte
Absätze entfernt, und ein Absatz zu Haskell wurde hinzugefügt.
Stefan Reuther
2007-03-11 16:07:07 UTC
Permalink
Post by Stefan Ram
Daher kann man schon sicher sagen, daß HTML keine /imperative/
Programmiersprache sei. Man sieht aber auch bestimmte
deklarative Sprachen, wie Prolog, als "Programmiersprachen"
an. In Prolog beschreibt man vorwiegend Aussagenmengen, in
HTML eine Hypertextstruktur. Dadurch ist die Art der
Prozeßsteuerung indirekter als bei imperativen Sprachen.
Würde ich nicht so sehen. Der HTML-"Befehl"
<ul> ..... </ul>
heißt eben ganz klassisch imperativ "mach hier eine Liste mit
Aufzählungszeichen hin".

Bekanntermaßen kann man die SGML-Notation und S-Expressions trivial
aufeinander abbilden, z.B.
<ul class="foo" id="1">
<li>eins</li>
<li>zwei</li>
</ul>
auf
(ul '(class "foo" id "1") (li nil "eins") (li nil "zwei")
Was dann damit passiert, hängt ganz vom Interpreter ab. Ein HTML-
Renderer wird das ganz klassisch "ausführen" und ein Textdokument draus
bauen. Und man kann über DOM / XPath / whatever das "Programm" manipu-
lieren. Genauso, wie man die entsprechende S-Expression in Lisp aus-
führen oder manipulieren kann. Ein paar Funktionen 'ul' und 'li' zu
definieren, die obiges zu
* eins
* zwei
rendern, sollte nicht zu schwer sein.


Stefan
Stefan Ram
2007-03-11 16:27:42 UTC
Permalink
Post by Stefan Reuther
Würde ich nicht so sehen. Der HTML-"Befehl"
<ul> ..... </ul>
heißt eben ganz klassisch imperativ "mach hier eine Liste mit
Aufzählungszeichen hin".
Das ist keine Frage der Sichtweise, sondern der
HTML-Spezifikation.

http://www.w3.org/TR/REC-html40/html40.txt

Die erklärt nur, daß man damit eine Liste auszeichnet.

Die Darstellung ist darin nicht normativ »The following is an
informative description of the behavior of some current visual
user agents when formatting lists«.

Außerdem gibt es nicht nur visuelle Anzeigeprogramme, sondern
auch Vorleseprogramme und maschinelle Interpretierer, wie
beispielsweise Suchmaschinen.
Post by Stefan Reuther
Was dann damit passiert, hängt ganz vom Interpreter ab.
Man kann eine C-Übersetzungseinheit auch durch einen
Interpretierer schicken, der daraus ein buntes Bild macht,
indem er jedem Buchstaben des Quelltextes eine Farbe eines
Pixels zuordnet.

Das hat aber nichts mehr mit der Syntax und Semantik der
Programmiersprache C zu tun, die durch eine Spezifikation
gegeben ist.

Genauso gibt es für HTML auch eine Spezifikation.
Ich habe sie Dir oben genannt.

Der Clou an dem Tic-Tac-Toe-Programm von Flo ist eben, daß es
HTML entsprechend der Spezifikation (»12.1 Introduction to
links and anchors«) verwendet.
Stefan Reuther
2007-03-11 17:23:43 UTC
Permalink
Post by Stefan Ram
Post by Stefan Reuther
Würde ich nicht so sehen. Der HTML-"Befehl"
<ul> ..... </ul>
heißt eben ganz klassisch imperativ "mach hier eine Liste mit
Aufzählungszeichen hin".
Das ist keine Frage der Sichtweise, sondern der
HTML-Spezifikation.
http://www.w3.org/TR/REC-html40/html40.txt
Die erklärt nur, daß man damit eine Liste auszeichnet.
...also heißt <ul> "mach hier eine Liste hin". Hat nur nichts damit zu
tun, ob man das nun "imperativ" nennt oder nicht. Die Struktur meines
trivialst-HTML-Renderers unterscheidet sich jedenfalls nicht großartig
von der eines Interpreters für eine imperative Sprache, bis auf die
Tatsache, dass er keine Schleifen unterstützen muss.
Post by Stefan Ram
Post by Stefan Reuther
Was dann damit passiert, hängt ganz vom Interpreter ab.
Man kann eine C-Übersetzungseinheit auch durch einen
Interpretierer schicken, der daraus ein buntes Bild macht,
indem er jedem Buchstaben des Quelltextes eine Farbe eines
Pixels zuordnet.
Das ist natürlich Blödsinn. Aber man kann aber eine C-Übersetzungs-
einheit durch einen Interpreter schicken, der daraus ein buntes Bild
macht, das die Programmstruktur verdeutlicht: zum Beispiel ein
Struktogramm, einen Aufrufbaum, ein Klassen-Diagramm, etc. Das sind
alles sinnvolle Anwendungen.


Stefan
Stefan Ram
2007-03-11 17:28:07 UTC
Permalink
Post by Stefan Reuther
Post by Stefan Ram
Die erklärt nur, daß man damit eine Liste auszeichnet.
...also heißt <ul> "mach hier eine Liste hin".
Es heißt, daß der Inhalt eine Liste /ist/.
Stefan Reuther
2007-03-11 22:13:58 UTC
Permalink
Post by Stefan Ram
Post by Stefan Reuther
Post by Stefan Ram
Die erklärt nur, daß man damit eine Liste auszeichnet.
...also heißt <ul> "mach hier eine Liste hin".
Es heißt, daß der Inhalt eine Liste /ist/.
Genauso, wie 'for (....) { Zeug }' heißt, dass der Inhalt ein
Schleifenrumpf ist. Wo ist jetzt der Unterschied?


Stefan
Stefan Ram
2007-03-11 23:06:26 UTC
Permalink
Post by Stefan Reuther
Post by Stefan Ram
Es heißt, daß der Inhalt eine Liste /ist/.
Genauso, wie 'for (....) { Zeug }' heißt, dass der Inhalt ein
Schleifenrumpf ist. Wo ist jetzt der Unterschied?
Das kommt auf die Programmiersprache an, zu der »for (....) {
Zeug }« gehört und was es darin sein soll.

Aber auch dann ist die Frage nach »dem Unterschied« nicht
immer einfach zu beantworten.

»Was ist der Unterschied zwischen einem Stein?«
Matthias Opatz in Message-ID: <***@40tude.net>

Fragen nach dem Unterschied zwischen zwei Wörtern, Begriffen
oder Objekten sind oft kaum zu beantworten, weil es meistens
nicht nur einen bestimmten Unterschied gibt. Selbst wenn
jemand beide Wörter, Begriffe oder Objekte gut kennt, fällt es
oft schwer, den Unterschied zwischen beiden anzugeben. Der
Leser versuche selbst einmal zu beantworten: »Was ist der
Unterschied zwischen einem Auto und einem Text?«. Im
allgemeinen ist es besser nach beiden Wörtern, Begriffen oder
Objekten einzeln zu fragen, also beispielsweise: »Was ist ein
Auto? Was ist ein Text?« Davor schrecken manche Fragesteller
zurück, weil es besonders deutlich macht, daß der Fragesteller
beide Begriffe nicht kennt oder nicht gut kennt. Aber, wenn
dies so ist, ist es einfacher, dies geradeheraus zu sagen, als
es umständlich verdecken zu wollen und dadurch eine Antwort zu
erschweren.

Eine Frage nach dem Unterschied verlangt als Antwort keinen
Satz, sondern einen Begriff (ein Substantiv). Richtig
eingesetzt wird das beispielsweise in der Frage »Was ist der
Unterschied zwischen Drei und Zwölf?«, die mit »Neun«
beantwortet werden kann. Auch noch akzeptabel ist die Nennung
der Art (Dimension) des Unterschieds, wenn diese eindeutig
bestimmt ist, weil sich zwei Dinge nur in dieser Hinsicht
unterscheiden, wie in »Was ist der Unterschied zwischen zwei
Elektronen im selben Orbital eines Atoms?» - »Der Spin.« Eine
Frage nach dem Unterschied zwischen einem Auto und einem Text
läßt sich aber sinnvoll nur beantworten, wenn diese Form
gerade verletzt wird, etwa in der Art »Der Unterschied ist,
daß ...« und es folgt dann ein Satz, der die Begriffe erklärt,
aber den Unterschied als Substantiv gerade nicht nennt. Das
ist also nicht die Antwort auf die gestellte Frage. Etwas
übertrieben kann man dieses Umgehen einer direkten Antwort
deutlich machen, wenn man als Beispiel annimmt, die Frage
»Was ist Zwei plus Vier?« würde beantwortet werden mit »Zwei
plus Vier ist, daß Du jetzt endlich ins Bett gehen mußt!«.
Stefan Reuther
2007-03-12 17:11:36 UTC
Permalink
Post by Stefan Ram
Post by Stefan Reuther
Post by Stefan Ram
Es heißt, daß der Inhalt eine Liste /ist/.
Genauso, wie 'for (....) { Zeug }' heißt, dass der Inhalt ein
Schleifenrumpf ist. Wo ist jetzt der Unterschied?
Das kommt auf die Programmiersprache an, zu der »for (....) {
Zeug }« gehört und was es darin sein soll.
Ich dachte, mit einem intelligenten Menschen zu reden, der vielleicht
von alleine auf ein Fragment einer C-oiden Sprache schließt. Zumal im
Vorposting von C die Rede war.

'for (....) { Zeug }' heißt für einen C ausführenden Interpreter
imperativ "wiederhole Zeug, solange die Schleifen-Bedingung erfüllt
ist", für einen Struktogrammgenerator deklarativ "Zeug ist der
Schleifenrumpf".

'<ul><li>...</ul>' heißt für einen HTML anzeigenden Interpreter
imperativ "mach eine Liste", für einen (keine-Ahnung-was) deklarativ
"der Inhalt ist eine Liste".

Daher ist '<ul>' nicht weniger imperativ als 'for'.
Post by Stefan Ram
Fragen nach dem Unterschied zwischen zwei Wörtern, Begriffen
oder Objekten sind oft kaum zu beantworten, weil es meistens
nicht nur einen bestimmten Unterschied gibt.
Deine Strohmänner kannst du für dich behalten.


Stefan
Ole Hinz
2007-03-11 18:08:53 UTC
Permalink
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Gar nicht?
Unabhängig von dem, was man möglicherweise meinte, als man ein
SQL-Statement formuliert hat, könnte man einen Automaten generieren, der
SQL (beispielsweise) als Eingabe akzeptiert und irgendetwas macht.
Und sei es nur, dass der Automat "Hello World" schreibt, wenn das
SQL-Statement ein gültiges Wort ist, und "Hallo Carsten", wenn es kein
gültiges Wort ist.
Damit wäre SQL eine Programmiersprache für den beschriebenen Automaten.
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die explizit besagt,
daß eine Programmiersprache turingmächtig sein muss?
Warum sollte dies so sein?
Nehmen wir einfach mal an, ich möchte einen "Computer"/Automaten bauen,
der ein grünes Licht zeigt, wenn ein Wort ein Palindrom (mit
Trennelement) ist. Dann brauche ich für den Computer keine
turingmächtige Sprache.
Post by Carsten Krueger
Ich finde leider immer nur sehr abstrakte Definitionen wo drin steht, ein
Computer macht was er soll oder Definitionen wo als Bspe.
turingmächtige Sprachen genannt werden.
Viele Programmiersprachen sind sicherlich turingmächtig. Wahrscheinlich
auch, weil die darunter liegende Maschienensprache turingmächtig ist.
Aber es muß nicht unbedingt sein.

Mit freundlichen Grüßen
Ole Hinz
--
http://www.ole-hinz.de
Stefan Ram
2007-03-11 18:21:50 UTC
Permalink
Post by Ole Hinz
Damit wäre SQL eine Programmiersprache für den beschriebenen
Automaten.
Dieser Interpretierer wäre dann keine Implementation der
spezifizierten SQL-Semantik. SQL würde dadurch also nicht zu
einer Programmiersprache für ihn werden.
Post by Ole Hinz
dass der Automat "Hello World" schreibt, wenn das
SQL-Statement ein gültiges Wort ist
Dadurch definierst Du eine neue Programmiersprache.
Das ist legitim. Nur solltest Du sie dann nicht "SQL"
nennen. Sie hätte vielleicht SQL-Syntax, aber nicht
die SQL-Semantik und SQL-Pragmatik.
Joachim Pimiskern
2007-03-12 10:21:29 UTC
Permalink
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Viele SQL-Dialekte enthalten prozedurale
Elemente, z.B. für Stored Procedures und Trigger.

Läßt man nur Statements der Art select,
insert, update und delete zu, so müßte man
tricksen.

Bsp: wählbar sei eine Liste fester SQL-Statements,
die in einer Schleife wiederholt werden (das ist
der Trick), sowie einige initialisierte Tabellen.
Damit sollte man programmieren können. Das Band
realisiert man durch eine Tabelle, die zwei Spalten
hat, nämlich Zellennummer und Markierung.
Die Lesekopfposition durch eine Tabelle mit
einer Zeile und einer Spalte für die Zellennummer.
Den aktuellen Zustand speichert man ebenfalls in einer
Tabelle mit einer Zeile und einer Spalte.
Den Rest überlasse ich dem Leser zur Ausarbeitung.

Grüße,
Joachim
Joachim Pimiskern
2007-03-12 10:22:31 UTC
Permalink
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Viele SQL-Dialekte enthalten prozedurale
Elemente, z.B. für Stored Procedures und Trigger.

Läßt man nur Statements der Art select,
insert, update und delete zu, so müßte man
tricksen.

Bsp: wählbar sei eine Liste fester SQL-Statements,
die in einer Schleife wiederholt werden (das ist
der Trick), sowie einige initialisierte Tabellen.
Damit sollte man programmieren können. Das Band
realisiert man durch eine Tabelle, die zwei Spalten
hat, nämlich Zellennummer und Markierung.
Die Lesekopfposition durch eine Tabelle mit
einer Zeile und einer Spalte für die Zellennummer.
Den aktuellen Zustand speichert man ebenfalls in einer
Tabelle mit einer Zeile und einer Spalte.
Den Rest überlasse ich dem Leser zur Ausarbeitung.

Grüße,
Joachim
Christian
2007-03-12 13:29:54 UTC
Permalink
Post by Carsten Krueger
Hallo,
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Wo finde ich eine Definition von einem Informatikpapst die explizit besagt,
daß eine Programmiersprache turingmächtig sein muss?
Ich finde leider immer nur sehr abstrakte Definitionen wo drin steht, ein
Computer macht was er soll oder Definitionen wo als Bspe.
turingmächtige Sprachen genannt werden.
Gruß Carsten
Was ist eine Programmiersprache... für mich ist eine Programmiersprache
eine Beschreibungsmöglichkeit von einem Programm in Computer
verständlichen Form... was für mich so viel heißt wie Logik der ersten
Stufe bei allen Programmiersprachen.
Grundsätzlich kannst du mit einer Markup Language wie html genau solche
Beschreibungen anfertigen. Z.B. kann man mit hilfe von XML das mit HTML
ja sehr Verwandt ist auch C oder Java programmieren .. dafür sind genug
Parser auf dem Markt.


Die Sprache legt nur den Syntax fest, ob der Syntax mächtig genug ist um
die Semantik auszudrücken sollte leicht in allen fällen möglich sein ..
da HTML (und auch SQL) recht frei ist, kann ja fast beliebigen Text in
seine Struktur einfügen.

Wer den Syntax am Ende Interpretiert und ob das durch diese
Interpretation entstehende Programm dann Touringmächtig ist ist doch
dann Sache des Interpreters. Wenn der Browser lieber das Programm als
Webseite interpretiert als es auszuführen ist das doch nicht schuld der
Mächtigkeit der Sprache.

Gruß Christian
Till Potinius
2007-03-12 18:04:01 UTC
Permalink
Post by Christian
Was ist eine Programmiersprache... für mich ist eine Programmiersprache
eine Beschreibungsmöglichkeit von einem Programm in Computer
verständlichen Form... was für mich so viel heißt wie Logik der ersten
Stufe bei allen Programmiersprachen.
Grundsätzlich kannst du mit einer Markup Language wie html genau solche
Beschreibungen anfertigen. Z.B. kann man mit hilfe von XML das mit HTML
ja sehr Verwandt ist auch C oder Java programmieren .. dafür sind genug
Parser auf dem Markt.
XML und HTML sind zwei komplett verschiedene Sprachen.
Post by Christian
Die Sprache legt nur den Syntax fest, ob der Syntax mächtig genug ist um
die Semantik auszudrücken sollte leicht in allen fällen möglich sein ..
da HTML (und auch SQL) recht frei ist, kann ja fast beliebigen Text in
seine Struktur einfügen.
In txt-Dateien kann ich sogar beliebigen Text einfügen, trotzdem ist
ASCII keine Programmiersprache.
Post by Christian
Wer den Syntax am Ende Interpretiert und ob das durch diese
Interpretation entstehende Programm dann Touringmächtig ist ist doch
dann Sache des Interpreters. Wenn der Browser lieber das Programm als
Webseite interpretiert als es auszuführen ist das doch nicht schuld der
Mächtigkeit der Sprache.
In der Sprache ist aber definiert, dass die Inhalte selbst zwischen den
Tags nicht interpretiert werden. Und die Tags sind in ihrer Syntax und
Semantik definiert.
Ein Browser, der sich anders verhält, würde alles machen, aber kein HTML
darstellen.
Natürlich wäre es denkbar, aus einigen HTML-Tags eine Programmiersprache
aufzubauen, indem man den Zeichen eine neue Semantik gibt. Das wäre aber
kein HTML mehr.

MFG, Till
--
int getRandomNumber()
{
return 4; //chosen by fair dice roll.
} //guaranted to be random.
Wolfgang May
2007-03-12 19:53:06 UTC
Permalink
Post by Till Potinius
Post by Christian
Was ist eine Programmiersprache... für mich ist eine Programmiersprache
eine Beschreibungsmöglichkeit von einem Programm in Computer
verständlichen Form... was für mich so viel heißt wie Logik der ersten
Stufe bei allen Programmiersprachen.
Grundsätzlich kannst du mit einer Markup Language wie html genau solche
Beschreibungen anfertigen. Z.B. kann man mit hilfe von XML das mit HTML
ja sehr Verwandt ist auch C oder Java programmieren .. dafür sind genug
Parser auf dem Markt.
XML und HTML sind zwei komplett verschiedene Sprachen.
XML ist erstmal gar keine Sprache, sondern eine Metasprache (d.h.
eine Menge von Regeln, mit denen eine Familie von Sprachen
definiert ist).
Bzw. darueber besteht nicht einmal Einigkeit im engeren Sinne. Fuer
viele Leute ist XML erstmal nur ein baumartiges Datenmodell, und
besitzt zufaellig eine ASCII-Repraesentation mit spitzen
Klammern etc, die eine Metasprache definiert.

Erst durch Angabe der erlaubten Element- und Attributnamen erhaelt man
aus den XML-Vorgaben eine Sprache, z.B. XHTML, XSLT (was selbst eine
Programmiersprache ist), WSDL, whatever -- man kann auch ein
XML-Markup fuer Java definieren, was von einem geeigneten Wrapper
verstanden und in ein "normales" Java-Programm konvertiert wird.

Ueblicherweise wird SQL der Gruppe der Anfragesprachen zugeordnet,
HTML der Gruppe der Beschreibungssprachen. Der Begriff
"Programmiersprache" ist nicht klar definiert. Bei "typischen"
Programmiersprachen wie Cobol, Basic, Pascal, C, C++, Java, perl etc
ist man sich ueblicherweise einig, bei LISP und funktionalen
Programmiersprachen auch noch. Prolog mit der Prolog-Semantik wird
auch noch als Programmiersprache angesehen; Datalog (was ganz aehnlich
aussieht wie Prolog) hingegen wird eher nicht als Programmiersprache
gesehen. Postscript und TeX sind andererseits (AFAIK
turingvollstaendige!) Programmiersprachen, die aber nur in speziellen
Anwendungsbereichen verwendet werden. Mit SQL kann man etwas
"programmieren" indem man eine SQL-Engine dazu bringt, die Anfrage
auszufuehren (die prozeduralen Erweiterungen mal ausser Acht
lassend). Im selben Stil koennte man sagen, dass man mit HTML einen
Browser dazu bringen kann, ein ASCII-File in bestimmter Weise
darzustellen, also sehr eingeschraenkte Dinge durchaus (deklarativ)
programmieren kann. "Programmieren" ist ein relativer Begriff, man
denke nur an "programmierbare" Waschmaschinen.

Wolfgang
Stefan Ram
2007-03-12 20:27:55 UTC
Permalink
Post by Wolfgang May
XML ist erstmal gar keine Sprache, sondern eine Metasprache (d.h.
eine Menge von Regeln, mit denen eine Familie von Sprachen
definiert ist).
Da die Schöpfer dieses Ding »XML« genannt haben und darin das
»L« für »language« steht, darf man XML wohl - zumindest
vereinbarungsgemäß (also diesem Namen nach) und ohne Ansicht
der Spezifikation - als »Sprache« bezeichnen.

XML enthält mindestens zwei Teile:

1.) Die Syntax des Symbols »document«

2.) Die Syntax und Semantik einer DTD.

Die Dokument-Syntax ist keine Metasprache, sondern eine
/Obersprache/ eines Dokuments einer XML-Anwendung (wie XHTML).

Die DTD ist dann tatsächlich eine Art syntaktischer
Metasprache, in dem Sinne, wie BNF eine ist.
Post by Wolfgang May
Mit SQL kann man etwas "programmieren" indem man eine
SQL-Engine dazu bringt, die Anfrage auszufuehren (die
prozeduralen Erweiterungen mal ausser Acht lassend). Im selben
Stil koennte man sagen, dass man mit HTML einen Browser dazu
bringen kann, ein ASCII-File in bestimmter Weise darzustellen,
also sehr eingeschraenkte Dinge durchaus (deklarativ)
programmieren kann.
Hier gibt es einen wichtigen Unterschied zwischen SQL und HTML:

In SQL ist für eine SQL-Implementation festgelegt, was

SELECT 2 + 3;

ergeben soll. Das Ergebnis »5« ist also /durch SQL/
spezifiziert. Damit hat man eine Auswertungssemantik
/als Teil der Sprachspezifikation/.

In HTML ist jedoch nur definiert, daß

<cite>a</cite>

eine Quellenangabe /ist/. Was ein (maschineller) Leser
damit anstellt, ist durch HTML nicht festgelegt. Somit
fehlt HTML die Auswertungssemantik, die SQL noch hat.

Wenn es eine Summe in HTML gäbe, dann wäre dort

<sum><value>2</value><value>3</value></sum>

eben einfach die Summe von 2 und 3. Es würde aber nicht von
einem HTML-Interpretierer verlangt werden (wie oben noch bei
SQL), dies auszurechnen oder ausrechnen zu können.
Bernd Strieder
2007-03-12 13:49:51 UTC
Permalink
Hallo,
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Die einzige Möglichkeit bei HTML weiterzukommen, ist ein Klick, man
bräuchte daher viele und vermutlich dynamische Seiten. Dann könnte man
z.B. eine HTML-Seite aufbauen, die den aktuellen Zustand einer
Turing-Maschine darstellt, und mit einem Klick, wird in den nächsten
geschaltet. Dazu ist aber zwingend sowas wie ein Benutzer
vorausgesetzt, der klickt, und man bräuchte sowas wie einen dynamischen
Webserver, der die eigentlichen Seiten berechnet, der auch erstmal
beschrieben sein will. HTML wäre dabei nur ein Teil des Ganzen, um
Zustände zu beschreiben. Das ist zu wenig für eine Programmiersprache.
Bei SQL ohne Stored Procedures und Trigger dürfte es ähnlich aussehen.
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die explizit
besagt, daß eine Programmiersprache turingmächtig sein muss?
Das wirst du nicht finden.

Es gibt sehr viele Programmiersprachen, die nicht Turing-mächtig sind,
aber für ihre Zwecke voll ausreichend, z.B. einfache Formeln in
Tabellenkalkulationen oder Taschenrechner. Es ist aber auch oft nicht
besonders schwer, eine Sprache Turing-mächtig zu machen.

Man kann nur sagen, wenn eine Programmiersprache Turing-mächtig ist,
kann man damit alles berechnen, was man sich sinnvoll als berechenbar
vorstellen kann, um es mal ganz salopp zu sagen. Dahinter steht die
These von Church, die nur eine These ist, d.h. es gibt keinen Beweis
dafür, es wird einfach vorausgesetzt.

Die Turing-Mächtigkeit wird im wesentlichen nur in der Theorie benutzt.
Hinter jeder Programmiersprache steht, oft vergessen, auch immer eine
Maschine, die letztendlich festlegt, wie das Programm zu lesen ist, und
was das Programm berechnet. Meistens ist bei den grundlegenden Sprachen
diese Maschine so, dass man sie nicht in echt realisieren könnte
(beliebig langes Band, beliebig breite Register). Keine echte Hardware
wird jemals Turing-mächtig sein. Man wird immer unendlich viele
Probleme finden können, die für einen bestimmten realen Rechner zu groß
sind.

Hier ist auch die Gefahr, wenn man sagt, Sprache X ist Turing-mächtig.
Die Maschine, die ein X-Programm liest und abarbeitet hat auf die
Mächtigkeit der Kombination Sprache-Maschine gewöhnlich viel mehr
Einfluss. Wenn man mal C nimmt, da hatte der Typ int gewöhnlich 16 Bit,
später dann 32 Bit als Standard. Ein Programm, das ein Produkt
berechnet, das größer als 2^16 ist, hätte auf dem alten Rechner einen
Überlauf gezeigt, auf dem neueren vermutlich das richtige Ergebnis.
Wenn eine Sprache X Turing-mächtig ist, meint man wohl damit, dass die
Sprache beliebig große Maschinen unterstützt, um damit beliebige
Turing-Maschinen simulieren zu können, wobei man quasi zur Laufzeit bei
Bedarf auf eine größere Maschine wechseln darf.
Post by Carsten Krueger
Ich finde leider immer nur sehr abstrakte Definitionen wo drin steht,
ein Computer macht was er soll oder Definitionen wo als Bspe.
turingmächtige Sprachen genannt werden.
Berechenbarkeit ist ein abstraktes Feld, das man in sich geschlossen
betrachten kann. Man sollte sich erstmal komplett vom Programmieren im
üblichen Sinn lösen, um da einen Einstieg zu finden. Später kann man
dann die Analogien zu den üblichen Programmiersprachen suchen. Das
wichtige an z.B. Turing-Maschinen ist, dass man viele grundlegende
Aussagen darüber beweisen kann, und das fällt mit üblichen
Programmiersprachen oft nicht leicht. Die wichtigste unbewusste
Tätigkeit eines Programmierers ist Beweisen, auch wenn das in der
Praxis viel zu oft falsche, unvollständige, formal unzureichende und
niemals aufgeschriebene Beweise sind.

Viele Grüße,

Bernd Strieder
Joachim Pimiskern
2007-03-12 14:10:51 UTC
Permalink
Post by Bernd Strieder
Die einzige Möglichkeit bei HTML weiterzukommen, ist ein Klick, man
bräuchte daher viele und vermutlich dynamische Seiten.
Es gäbe da noch Meta-Refresh.

<html>
<head>
<meta http-equiv="refresh" content="1">
</head>

<body>
<iframe src="http://www.example.com" width="1000"
height="100"></iframe>
</body>
</html>

Grüße,
Joachim
Stefan Ram
2007-03-12 14:22:06 UTC
Permalink
Post by Joachim Pimiskern
Es gäbe da noch Meta-Refresh.
Nicht in HTML.

Damit meine ich, daß die Bedeutung von »refresh« nicht durch

HTML 4.01 Specification
http://www.w3.org/TR/REC-html40/html40.txt

spezifiziert ist. Dort wird sogar davon abgeraten:

»Note. Some user agents support the use of META to refresh
the current page after a specified number of seconds, with
the option of replacing it by a different URI. Authors
should not use this technique to forward users to
different pages, as this makes the page inaccessible to
some users. Instead, automatic page forwarding should be
done using server-side redirects.«
Hans-Peter Diettrich
2007-03-13 02:29:43 UTC
Permalink
Post by Bernd Strieder
Hier ist auch die Gefahr, wenn man sagt, Sprache X ist Turing-mächtig.
Der Begriff "Turing-mächtig" ist tatsächlich wenig hilfreich. Ich kenne
eigentlich nur "Turing-vollständig" (engl.: Turing complete), mit der
Bedeutung, daß in einer solchen Sprache eine Turingmaschine
implementiert werden kann. Damit erlaubt diese Sprache die Bearbeitung
sämtlicher Probleme, die eine Turingmaschine bearbeiten kann.

Das Band der Turingmaschine ist kein Bestandteil des Programms, sondern
dessen Peripherie. Es liegt also am Benutzer, dem Programm die I/O
Kanäle mit ausreichender Kapazität zur Verfügung zu stellen.

DoDi
Stefan Ram
2007-03-12 15:47:34 UTC
Permalink
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die
explizit besagt, daß eine Programmiersprache turingmächtig sein
muss?
Gelegentlich wird nach einer Begriffsdefinition gesucht, um
zu bestätigen, daß eine bestimmte Auffassung von einem Begriff
»richtig« ist.

Zunächst hat jeder Sprecher oder Autor das Recht, seine Begriffe
selber zu definieren.

Daher gibt es für Begriffe im allgemeinen keine endgültige
Autorität, die einen Begriff für andere bindend festlegen könnte.

Daher gibt es hier keine absolute Wahrheit, sondern nur relative
Vereinbarungen.

Nach diesen allgemeinen Klarstellungen folgen nun noch einzelne
Aspekte:

Vereinbarungen

Sobald ein Autor für einen Werkteil einen Begriff ausdrücklich definiert
hat, kann man diese Definition dann als für diesen Werkteil als
absolut richtig und maßgeblich ansehen.

Das Gleiche gilt wenn mehrere Personen eine entsprechende Erklärung
abgegeben haben, also insbesondere bei vertraglicher Vereinbarung
einer bestimmten Begriffsdefinition.

Gebrauch

Der Gebrauch in einem Fachgebiet kann einem Begriff eine
bestimmte Bedeutung geben. Allerdings ist diese manchmal nur
unscharf definiert. Fängt man an, nach Details zu fragen, so
findet man manchmal, daß diese nicht immer klar festgelegt sind.

Prägung

Wer sich ein neues Wort oder eine neue Phrase ausdenkt, die
bisher noch nicht verwendet wurde, hat ein besonderes Recht,
dieser eine Bedeutung zu geben und darf insofern als maßgeblich
für ihre (ursprüngliche, eigentliche) Bedeutung angesehen werden.

Autorität

Die Berücksichtigung von Autorität wird manchmal auch als
Trugschluß »Argumentum ad verecundiam« angesehen. Dennoch kann
man es hier nicht ganz verwerfen: Wenn es um die Frage geht, welcher
Sprachgebrauch üblich ist, wird man einer anerkannten Autorität
nämlich Kenntnis des Üblichen zubilligen.

Allerdings kann dies dann beispielsweise scheitern, wenn die
Autorität bewußt eigene - vom Üblichen abweichenden - Definition
setzt oder es weitere gleichrangige Autoritäten mit anderen
Definitionen gibt.

Rechtsprechung

In der Rechtsprechung mag ein Begriff in einer Rechtsnorm noch so
ungenau sein, meist erhält man am Ende ein Urteil. Wenn dies
rechtskräftig geworden ist, dann muß man das Gericht, von dem es
stammt, insofern als Quelle der Begriffsdefinition ansehen.

Allerdings kann man die Definition von Begriffen einer relevanten
Rechtsnorm einem Urteil nicht immer eindeutig entnehmen. Genauso
ist es möglich, daß ein anderes Gericht in einem anderen Fall dann
wieder eine andere Definition zugrundelegt.

Normen

Normen einer anerkannten Organisation, wie der DIN oder der ISO,
definieren auch Begriffe. Jedoch handelt es sich bei diesen Organisationen
auch nur um Personen, die im allgemeinen lediglich das Jedermannrecht zur
Begriffsdefinition haben. Wenn die Normen Vertragsbestandteil werden sollen,
so muß dies ausdrücklich vereinbart werden. Dann gilt das oben unter
»Vereinbarungen« Gesagte.

Außerdem gilt für eine Normorganisation das unter »Autorität« Gesagte.
Wenn eine Norm das Ergebnis der Diskussionen einer Mehrheit aller relevanter
Personen (einschließlich Organisationen) zusammenfaßt, kann man ihr allerdings
mit einem gewissen Recht etwas Autorität zusprechen.

Es gibt außerdem verschiedene international beachtete Normengebende
Organisationen, deren Definition untereinander nicht immer verträglich
sein müssen.

Standards

Übliche Verkehrsgewohnheiten werden manchmal auch als »Industriestandard«
bezeichnet und manchmal auch schriftlich festgehalten. Es gilt das unter
»Vereinbarungen« und »Gebrauch« Gesagte.

Mathematik

Die Mathematik gilt oft als eine Disziplin der »eindeutigen« Begriffe.

Aber auch hier lassen sich leicht Beispiele autorenspezifischer
Begriffe finden.

Schon der fundamentale Begriff »Funktion« ist bei dem einen Autor
eine funktionale Relation und bei dem anderen ein Tripel aus einer
funktionalen Relation und zwei Mengen (was andere »Abbildung« nennen.)

Auch die Frage, ob die Menge N der natürlichen Zahlen die Null enthält,
wird von jedem Autor oder Dozenten unterschiedlich festgelegt. Es gibt
zwar eine DIN-Norm, die besagt, daß die Menge N die Null enthält, aber
dadurch ist niemand gebunden. Peano, von dem die maßgeblichen Axiome
stammen, hat die Null anscheinend zu den natürlichen Zahlen gezählt,
aber es ist nicht sicher, ob er dies immer tat.

Wenn also schon in der Mathematik grundlegende Begriffe nicht
autorenübergreifen definiert sind, dann wird klar, daß man dies
in anderen Disziplinen umso weniger erwarten darf.

Laienglaube

Es ist ein gelegentlich anzutreffender Laienglaube, daß es eine
»objektiv richtige« Definition eines Begriffs gäbe und die einzelnen
Quellen sich nur darin unterscheiden, wie richtig sie diese wiedergeben.

Inzwischen sollte aber klar geworden sein, daß es keine von Menschen
unabhängige absolute Begriffe gibt und letztendlich jeder Autor oder
Sprecher des Recht hat, Begriffe zu definieren (wobei er sich
vernünftigerweise nicht zu oft und nicht ohne guten Grund vom
üblichen Sprachgebrauch entfernt).
Stefan Rueping
2007-03-12 16:50:01 UTC
Permalink
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die explizit besagt,
daß eine Programmiersprache turingmächtig sein muss?
Ich finde leider immer nur sehr abstrakte Definitionen wo drin steht, ein
Computer macht was er soll oder Definitionen wo als Bspe.
turingmächtige Sprachen genannt werden.
Für diese etwas schwammigen Definitionen gibt's eine Erklärung: eine
Programmiersprache ist ja erstmal eine Sprache, in der man Programme
ausdrücken kann. Während der Begriff "Sprache" in der Informatik klar
definiert ist, wird der Begriff "Programm" tatsächlich ungenauer
verwendet. Schuld daran ist der "Informatikpapst" Alan Turing, der mit
seiner universalen Turingmaschine gezeigt hat, dass es prinzipiell
keinen Unterschied zwischen Programmen und Daten gibt. Daher kann man
leider nicht genau trennen, was man als Programmiersprache und was als
Datenformat verstehen will.

Rein aus meinem Sprachgefühl heraus würde ich es davon abhängig machen,
wie viel Gewicht tatsächlich auf die Ausführung einer bestimmten Aktion
gelegt wird. Ich persönlich würde zum Beispiel HTML eher nicht als
Programmiersprache bezeichnen, SQL aber schon.

Dass eine Programmiersprache nicht unbedingt turingmächtig sein muss,
folgt aber implizit auch schon daraus, dass beides unterschiedliche
Begriffe sind. Ansonsten müsste man ja nicht ausdrücklich von
"turingmächtigen Programmiersprachen" reden.


Tschüss,

Stefan
Stefan Ram
2007-03-12 17:01:40 UTC
Permalink
Alan Turing, der mit seiner universalen Turingmaschine gezeigt
hat, dass es prinzipiell keinen Unterschied zwischen Programmen
und Daten gibt.
Wenn es keinen Unterschied gibt, ist der Satz aber nicht
verständlich. Denn dann kann man für das Wort »Daten« in jedem
Kontext auch das Wort »Programme« einsetzen. Damit würde aus
Deinem Satz werden:

»Alan Turing, der mit seiner universalen Turingmaschine
gezeigt hat, dass es prinzipiell keinen Unterschied
zwischen Programmen und Programmen gibt.«

Um zu zeigen, daß es keinen Unterschied gibt, muß Turing ja
zunächst einmal die Begriffe »Programm« und »Datum« definiert
haben:

- Wenn beide Definition gleich lauten, ist die Aussage,
daß es keinen Unterschied gibt, trivial.

- Wenn beide Definitionen sich unterscheiden, ist die
Aussage, daß es keinen Unterschied gibt, falsch.
(Es gibt dann zumindest einen intensionalen Unterschied,
wenn auch keinen extensionalen.)

Hierzu zitiere ich Wittgenstein:

»Von zwei Dingen zu sagen, sie seien identisch, ist ein
Unsinn, und von Einem zu sagen, es sei identisch mit sich
selbst, sagt gar nichts.«

Ludwig Wittgenstein, Tractatus Logico-Philosophicus (5.5303)

- Oder diese Begriff sind bei ihm undefiniert, dann
wäre die Aussage aber offen für beliebige Interpretationen.

Vielleicht weißt Du ja, wie Alan Turing »Programm« und
»Datum« definiert hat. Dann könnte man die Aussage, daß es
keinen Unterschied zwischen beidem gebe, besser verstehen.
Stefan Rueping
2007-03-12 17:38:10 UTC
Permalink
Post by Stefan Ram
Vielleicht weißt Du ja, wie Alan Turing »Programm« und
»Datum« definiert hat. Dann könnte man die Aussage, daß es
keinen Unterschied zwischen beidem gebe, besser verstehen.
Bei der Turingmaschine sind eigentlich Programm und Daten klar getrennt:
die Daten sind das, was auf dem Speicherband liegt, das Programm ist der
endliche Automat, der den Schreib-/Lesekopf steuert. Turing hat aber
dann gezeigt, dass es eine universale Turingmaschine gibt, so dass zu
jeder Turingmaschine (also jedem Programm) eine Eingabe der universalen
Turingmaschine (also Daten) existiert, so dass sich die beiden Maschinen
gleich verhalten, genauer dass die eine Maschine genau dann anhält, wenn
die andere anhält. Andererseits kann man zu jeder Belegung des
Speicherbands natürlich ganz einfach eine Turingmaschine angeben, die
genau diese Belegung auf das Band schreibt. Daraus folgt dann, dass
zumindest auch Sicht der Berechenbarkeit Daten und Programme miteinander
austauschbar sind. Das meinte ich mit "kein prinzipieller Unterschied".


Tschüss,

Stefan
Stefan Ram
2007-03-12 17:48:50 UTC
Permalink
Post by Stefan Rueping
genau diese Belegung auf das Band schreibt. Daraus folgt dann, dass
zumindest auch Sicht der Berechenbarkeit Daten und Programme miteinander
austauschbar sind. Das meinte ich mit "kein prinzipieller Unterschied".
Aha.

Meine Definition von »Programm« ist:

Ein Programm ist das Artefakt einer Verfügung eines
Programmierers an einen Ausführer zur Durchführung eines
Vorgangs.

Dazu:

Ein Artefakt einer Erklärung ist eine Ausfertigung
(materielle Darstellung) dieser Erklärung auf einem
Speichermedium, hierbei kann es sich beispielsweise um
eine Urkunde oder eine Datei handeln.

Eine Verfügung ist eine Willenserklärung, die
Einschränkungen festlegt, die bei der Erledigung
bestimmter zukünftiger Vorgänge zu beachten sind.

Der Ausführer (Interpretierer) ist das System, welches
sicherstellt, daß die Verfügung verwirklicht wird, also
sich so auswirkt, wie dies nach dem im Programm erklärten
Willen des Programmierers geschehen soll.
Stefan Ram
2007-03-12 18:00:27 UTC
Permalink
Post by Stefan Ram
Ein Programm ist das Artefakt einer Verfügung eines
Programmierers an einen Ausführer zur Durchführung eines
Vorgangs.
Demnach würde ich selber HTML eher als »Datensprache« denn als
»Programmsprache« ansehen, weil durch eine HTML-Quelle
überhaupt keine bestimmten Aspekte von Vorgängen verlangt
werden, sondern der Verarbeiter frei ist, diese beliebig zu
verwenden.

(Allerdings ist dies bei einer ganz-rein funktionalen Sprache
auch so. So eine Sprache braucht eine
Lesen-Auswerten-Ausgeben-Schleife, und die ist nicht selber
rein-funktional. Auch die monadische Ausgabe von Haskell hat
eine Semantik, die nicht mehr rein-funktional ist.)

Der Begriff der Turingmächtigkeit läßt sich dann jedenfalls
auf HTML gar nicht anwenden.

Ich gestehe nur anderen zu, daß man HTML »Programmiersprache«
nennen könnte, wenn man den Begriff »programmieren« noch
weiter auslegen will, als ich dies tue. Etwa wie in dem
zitierten Lehrbuch.
Hans-Peter Diettrich
2007-03-13 13:23:26 UTC
Permalink
Post by Carsten Krueger
wie kann man am besten Begründen, daß z.B. HTML und SQL keine
Programmiersprachen sind?
Ähnlich könnte man fragen, ob ein Makefile in einer Programmiersprache
geschrieben ist.

Wenn sich aus der Verarbeitung eines Textes (in der dafür vorgesehenen
Art und Weise) ein Programm ergibt, egal ob nur compiliert und gelinkt
oder gleich ausgeführt, dann hat dieser Text eine (funktionale)
Bedeutung im Rahmen dieses Programms.

Welche genaue Rolle ein bestimmter Text (und damit seine formale
Sprache) im Rahmen der letztendlichen Ausführung des Programms spielt,
ist eigentlich unerheblich, solange er nicht ersatzlos weggelassen
werden kann. Insofern müßte die Frage beinhalten, welcher Aspekt der
Herstellung eines Programms gemeint ist. Die "Mächtigkeit" einer Sprache
müßte dann auf diesen Aspekt relativiert werden, wobei für die
Implementierung von Algorithmen ganz andere Kriterien von Belang sind,
als für die Beschreibung der Oberfläche eines Programms.

DoDi
Stefan Ram
2007-03-14 17:50:21 UTC
Permalink
Post by Carsten Krueger
Wo finde ich eine Definition von einem Informatikpapst die
explizit besagt, daß eine Programmiersprache turingmächtig sein
muss?
In der Praxis ist vielleicht oft eine ganz andere Art
der Mächtigkeitshierarchie relevant:

0 - statische Daten, mit bestimmter oder einheitlicher
Darstellung/Wiedergabe (Textdatei, JPG-Bilder)

1 - Daten mit abstrakter Information (HTML, XML, SGML),
und verschiedenen Möglichkeiten der Darstellung oder
Weiterverarbeitung

2 - Daten mit operationaler Semantik (Programme, Skripte)
mit eingeschränkten Operationen (z.B. Java - da es in
einer virtuelle Maschine läuft, kann es ohne JNI
Betriebssystemfunktionen nicht direkt aufrufen).

3 - Daten mit operationaler Semantik (Programme, Skripte)
und unbeschränktem Zugriff auf Betriebsystemfunktionen
(ausführbare Dateien unter Windows 3 oder DOS)

4 - Daten mit operationaler Semantik (Programme, Skripte),
unbeschränktem Zugriff auf Betriebssystemfunktionen
und auf alle in Frage kommenden Geräte (z.B.
Direktzugriff auf Peripherie unter Umgehung von Treibern)

5 - Daten der Stufe 4 mit der Möglichkeit, alle Programme
niedriger Stufen zu täuschen, zu verändern oder zu
kontrollieren (Rootkits) und Einschränkungen des
Betriebssystems zu umgehen.
Stefan Ram
2007-03-15 13:15:02 UTC
Permalink
Post by Stefan Ram
2 - Daten mit operationaler Semantik (Programme, Skripte)
Zum Unterschied zwischen Daten und Programmen:

Einen Zustand Z eines physikalischen Systems S kann man als
Information (Datum) interpretieren, wenn man Grund zu der
Annahme hat, daß er einen Rückschluß auf andere Sachverhalte
(außer, dem Sachverhalt, daß Z in S ist) zuläßt oder wenn er
einen Prozeß beeinflußt.

Hängt ein Prozeß P vom Zustand Z einem System S ab, so kann
man in S zunächst allgemein eine Eingabe an den Prozeß sehen.
Eine Eingabe kann ein Programm sein. Ein Programm ist dann
gegeben, wenn die Abhängigkeit festgelegt ist (hierzu bedarf
es einer Spezifikation).

Beispielsweise könnte eine Prozeßsteuerung K einen Bitspeicher
(System) als Eingabe verarbeiten, jedoch in der Würdigung
weitgehend frei sein. Damit fehlt dem Autor des Zustands des
Bitspeichers weitgehend die Prozeßkontrolle. (Beispiel:
Google könnte eine Webseite lesen, entscheidet aber selber,
ob es sie als Suchergebnis veröffentlicht.) Dann ist der
Bitspeicher eine Eingabe (ein Datum) aber kein Programm.

Bei einer Programmiersprachensemantik wird hingegen
festgelegt, welcher Bitwert welche Auswirkung auf den Prozeß
haben soll (operationale Bedeutung). Der Autor, weiß, daß der
Bitwert »0« eine bestimmte Wirkung auf das Prozeßgeschehen
hat, welche die Prozeßsteuerung beachten muß, wenn sie für
sich beanspruchen will, eine bestimmte spezifizierte Rolle
(wie »user agent« oder »C implementation«) der Spezifikation
zu erfüllen. Dann kann man den Bitspeicher als ein »Programm«
bezeichnen.

Demnach wäre ein HTML-Dokument kein Programm, weil es einem
Nutzeragenten gemäß der HTML-Spezifikation weitgehend
freigestellt ist, wie er das Dokument verarbeitet.

»Element and attribute names in this document have been
marked up and may be rendered specially by some user agents.«

HTML 4.01 Specification, 1.2.1 Elements and attributes

Das Spezifizierte ist nur die Auszeichnung, denn
»may be rendered specially by some user agents«
verlangt gar nichts von einem »user agent«.

Eine C-Implementation muß hingegen bei Ausführung der
Anweisung »while(1);« ein bestimmtes Verhalten zeigen.

»An implementation (...) executes C programs«

ISO/IEC 9899:1999 (E), 5. Environment
Stefan Ram
2007-03-15 15:02:23 UTC
Permalink
Post by Stefan Ram
Bei einer Programmiersprachensemantik wird hingegen
festgelegt, welcher Bitwert welche Auswirkung auf den Prozeß
haben soll (operationale Bedeutung). Der Autor, weiß, daß der
Bitwert »0« eine bestimmte Wirkung auf das Prozeßgeschehen
hat, welche die Prozeßsteuerung beachten muß, wenn sie für
sich beanspruchen will, eine bestimmte spezifizierte Rolle
(wie »user agent« oder »C implementation«) der Spezifikation
zu erfüllen. Dann kann man den Bitspeicher als ein »Programm«
bezeichnen.
Insofern gibt eine Programmiersprache dem Autor mehr
»Macht« über einen Prozeß als eine Datensprache.

Jedoch hängt dies von der Semantik ab.

Man könnte zu einer Syntax mehrere Semantiken für
verschiedenen Rollen spezifizieren.

So könnte man etwa für die Programmiersprache C noch einen
»C-Anzeiger« als Rolle spezifizieren, der einen C-Quelltext
anzeigt, aber dabei weitgehende Freiheiten in den Details der
Darstellung hat.

Dann hätte die C-Syntax eine operationale Semantik
für eine C-Implementation aber keine für einen C-Anzeiger.

Wenn man eine Sprache als eine Kombination aus einer Syntax
und einer Semantik ansieht, wäre das dann zwei verschiedenen
Sprachen. Sieht man eine Sprache nur als eine Syntax, dann
wäre dies eine »Programmiersemantik« für die Sprache und eine
»Datensemantik« - es gäbe dann also keine
»Programmiersprachen«, sondern nur Programmiersemantiken,
die man traditionell operationale Semantiken nennt.

Auch ein »rein-funktionale« Sprache wie Haskell hat
irgendwo eine minimale operationale Semantik, sonst
gäbe es kein Ein-/Ausgabeverhalten.

Lesen Sie weiter auf narkive:
Loading...