Unterschiede zwischen den Revisionen 22 und 23
Revision 22 vom 2005-07-18 12:39:28
Größe: 4548
Autor: 145
Kommentar:
Revision 23 vom 2005-07-18 12:47:06
Größe: 4649
Kommentar: statische Typisierung
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 3: Zeile 3:
||Sprache||OOP||Variablen deklarieren||'''I'''nterpretiert, '''n'''ativ, '''B'''ytecode||Funktional [[FootNote(Ausschließlich)]]||Lexikale Umgebungen||strenge Typisierung||Exceptions||
||["Ada"]||ja||ja||n||nein||ja||ja+||ja||
||["Assembler"]||nein||?||n||nein||nein||nein||nein||
||["AWK"] oder ["awk"]?||nein||nein||i||nein||nein?||nein||nein||
||["Brainfuck"]||nein||nein||i,b,n||nein||nein||ja [[FootNote(Es gibt nur einen Typ.)]]||nein||
||["C"]||nein||ja||n||nein||ja||nein||nein||
||ObjectiveC||ja||ja||n||nein||ja||ja||ja||
||["C++"]||ja||ja||n||nein||ja||nein||ja||
||["Haskell"]||ja||ja?||i, n (?), b (?)||ja||ja||ja||nein?||
||["Java"]||ja||ja||b (optional JIT), n (mit z. B. gjc) ||nein||ja||ja||ja||
||["Lisp"]||ja||nein||i, n||jein||ja||ja||ja [[FootNote(sogar schneller als in ["C"] oder ["Java"])]]||
||Pascal (ISO)||nein||ja||n||nein||ja||ja||nein||
||Delphi||ja||ja||n||nein||ja||ja||ja||
||["Perl"]||ja||nein||i,b||nein||ja||nein||ja||
||["PHP"]||ja||teilweise||i,b||nein||ja||nein||ja||
||["Pike"]||ja||ja||ja[[FootNote(auf entsprechend unterstützten architekturen wird teilweise maschinencode erzeugt)]]||ja||ja||ja||ja||
||["Prolog"]||?||?||?||ja?||ja||?||nein?||
||["Python"]||ja||nein||i,b [[FootNote([optional JIT - Psyco; bald auch nativer Code möglich, siehe Pypy])]]||nein||ja||ja||ja||
||["Ruby"]||ja||nein||i||nein||ja||nein||ja||
||Sprache||OOP||Variablen deklarieren||'''I'''nterpretiert, '''n'''ativ, '''B'''ytecode||Funktional [[FootNote(Ausschließlich)]]||Lexikale Umgebungen||strenge Typisierung||statische Typisierung||Exceptions||
||["Ada"]||ja||ja||n||nein||ja||ja+||?||ja||
||["Assembler"]||nein||?||n||nein||nein||nein||nein||nein||
||["AWK"] oder ["awk"]?||nein||nein||i||nein||nein?||nein||nein||nein||
||["Brainfuck"]||nein||nein||i,b,n||nein||nein||ja [[FootNote(Es gibt nur einen Typ.)]]||ja||nein||
||["C"]||nein||ja||n||nein||ja||nein||ja||nein||
||ObjectiveC||ja||ja||n||nein||ja||ja||ja||ja||
||["C++"]||ja||ja||n||nein||ja||nein||ja||ja||
||["Haskell"]||ja||ja?||i, n (?), b (?)||ja||ja||ja||ja||ja||
||["Java"]||ja||ja||b (optional JIT), n (mit z. B. gjc) ||nein||ja||ja||ja||ja||
||["Lisp"]||ja||nein||i, n||jein||ja||ja||nain||ja [[FootNote(sogar schneller als in ["C"] oder ["Java"])]]||
||Pascal (ISO)||nein||ja||n||nein||ja||ja||ja||nein||
||Delphi||ja||ja||n||nein||ja||ja||ja||ja||
||["Perl"]||ja||nein||i,b||nein||ja||nein||nein||ja||
||["PHP"]||ja||teilweise||i,b||nein||ja||nein||nein||ja||
||["Pike"]||ja||ja||ja[[FootNote(auf entsprechend unterstützten architekturen wird teilweise maschinencode erzeugt)]]||ja||ja||ja||ja||ja||
||["Prolog"]||?||?||?||ja?||ja||?||?||nein?||
||["Python"]||ja||nein||i,b [[FootNote([optional JIT - Psyco; bald auch nativer Code möglich, siehe Pypy])]]||nein||ja||ja||nein||ja||
||["Ruby"]||ja||nein||i||nein||ja||nein||?||ja||

Dies soll ein allgemeiner Vergleich verschiedener Programmiersprachen werden.

Sprache

OOP

Variablen deklarieren

Interpretiert, nativ, Bytecode

Funktional FootNote(Ausschließlich)

Lexikale Umgebungen

strenge Typisierung

statische Typisierung

Exceptions

["Ada"]

ja

ja

n

nein

ja

ja+

?

ja

["Assembler"]

nein

?

n

nein

nein

nein

nein

nein

["AWK"] oder ["awk"]?

nein

nein

i

nein

nein?

nein

nein

nein

["Brainfuck"]

nein

nein

i,b,n

nein

nein

ja FootNote(Es gibt nur einen Typ.)

ja

nein

["C"]

nein

ja

n

nein

ja

nein

ja

nein

ObjectiveC

ja

ja

n

nein

ja

ja

ja

ja

["C++"]

ja

ja

n

nein

ja

nein

ja

ja

["Haskell"]

ja

ja?

i, n (?), b (?)

ja

ja

ja

ja

ja

["Java"]

ja

ja

b (optional JIT), n (mit z. B. gjc)

nein

ja

ja

ja

ja

["Lisp"]

ja

nein

i, n

jein

ja

ja

nain

ja FootNote(sogar schneller als in ["C"] oder ["Java"])

Pascal (ISO)

nein

ja

n

nein

ja

ja

ja

nein

Delphi

ja

ja

n

nein

ja

ja

ja

ja

["Perl"]

ja

nein

i,b

nein

ja

nein

nein

ja

["PHP"]

ja

teilweise

i,b

nein

ja

nein

nein

ja

["Pike"]

ja

ja

jaFootNote(auf entsprechend unterstützten architekturen wird teilweise maschinencode erzeugt)

ja

ja

ja

ja

ja

["Prolog"]

?

?

?

ja?

ja

?

?

nein?

["Python"]

ja

nein

i,b FootNote([optional JIT - Psyco; bald auch nativer Code möglich, siehe Pypy])

nein

ja

ja

nein

ja

["Ruby"]

ja

nein

i

nein

ja

nein

?

ja

Fehlende Sprachen: Malbolge?, Bifunge?

Anmerkungen:

  • Java: standardmäßig wird Byte-Code interpretiert, es gibt jedoch Just-in-Time-Compiler. Die Sprache ist compilefähig, d.h. es gibt keine Möglichkeit, Code während der Laufzeit zu erzeugen (wie in Perl mit eval).
  • C-Familie (C, Objective-C, C++): Automatische Typ-Konvertierung in umfassende Typen: int -> float -> double, aber nicht umgekehrt: nicht float -> int

  • Perl: Die OO-Fähigkeit ist ziemlich bescheiden. Die Definition von Variablen kann erzwungen werden (use strict). Exceptions gibt es eingeschränkt ($SIG).
  • PHP: Definition von globalen Variablen in Funktionen notwendig.

Definition von strenge Typisierung

  • Bei strenger Typisierung hat eine Variable einen Typ und wird (meist) nicht implizit in einen anderen umgewandelt. So ist z.B. in ["Python"] ein int nicht gleich ein str, in ["Perl"] wird beides gleich behandelt.
  • Falls ein int16 in ein int32 umgewandelt werden kann, steht hier im Wiki auch ein "ja"
  • "ja+" = int16 ungleich int32

Definition von Scoping oder Gültigkeitsraum

  • Innerhalb des Quellkodes von Programmiersprachen gibt es sogenannte Gültigkeitsräume oder -breiche.
  • Deklarierte Variablen oder Konstanten haben immer einen Gültigkeitsbereich. Dies sind diejenigen Abschnitte im Quellkode an denen die Variable verfügbar ist. Das bedeutet ihr Wert abgefragt werden kann. Manchmal auch zugewiesen(nicht bei Konstanten - natürlich, bei Übergabeparametern evtl.) werden kann.
  • Gültigkeitsräume (engl. "scope") sind in den meisten Programmiersprachen mit geschweiften Klammern(in Phyton durch die Einrückung / in Lisp durch Klammern) abgegrenzt und werden auch Blöcke genannt.
  • Variablen werden immer(in allen Programmiersprachen) deklariert! Bei PHP geschieht dies jedoch auch, wenn es der Benutzer nicht direkt anweist. Man könnte sagen die Variablen werden hier auto-deklariert. So ist z.B. $i = 'a' ein String, während $i = 0 ein Integer oder $i = 0.0 eine Fliesskommazahl ist.
  • Auch Variablen, die nicht im Gültigkeitsbereich deklariert werden können dort zugreifbar gemacht werden. In PHP z.B. durch das global. Auch durch Übergabe von Referenzen innerhalb einer Funktions-Deklaration.

Die Frage nach des genauen Gültigkeitsraumes ist sehr schwer zu beantworten und letztendlich dem Compilerbauer überlassen. So wäre es denkbar in der gleichen Programmiersprache mit unterschiedlichen Compilern auch unterschiedliche Definitionen von Gültigkkeitsraum zu haben(wenn auch natürlich sehr gemein). Sehr empfehlenswerte Literatur: "Das Drachenbuch": Aho/Sethi/Ullmann: Compilerbau

Definition von Funktional

Ein Programm ist genau ein Ausdruck. Schleifen werden z.B. mittels Funktionen erreicht.

Lexikale Umgebungen

OffeneFrage: Was soll "Lexikale Umgebung" sein.

Pauschal kann man sagen, eine Sprache unterstützt lexikale Umgebungen, wenn man Rekursion verwenden kann. Gemeint ist, dass eine Variable genau nur von dem Block, in dem sie definiert oder verwendet wird, verändert werden kann.

SprachVergleich (zuletzt geändert am 2008-09-28 19:40:24 durch c191161)