Skriptsprachen

Developer-Tools, Entwicklungsumgebungen und alles andere, was sich installieren lässt
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Skriptsprachen

Beitrag von Xin » Mi Jul 09, 2008 8:16 pm

fat-lobyte hat geschrieben:
Xin hat geschrieben: Man kann Java aus einem Bauchgefühl hassen.
Ja, ich muss zugeben, es ist ein Bauchgefühl. Aber das Bauchgefühl hat seine Gründe. Ich wurde betrogen von Java. Die sprache hat vieles versprochen: Typsicherheit, generische Programmierung, Plattformunabhängigkeit.
Gehalten hat es nur letzteres.
Generische Programmierung kann man damit machen - aber keine Templates.
Plattformunabhängigkeit sehe ich nicht, den bei dem letzten Java-Programm, dass ich machen musste, stand sehr viel

Code: Alles auswählen

#ifdef _WINDOWS
 ...
#endif

#ifdef _LINUX
 ...
#endif
drin. Okay, der Präprozessor kommt in C-Programmen vor, aber was Java nicht kann muss man halt erweitern - plattformabhängig. Oder man kann das Programm halt nicht schreiben - es nicht schreiben zu können, ist dann aber wieder plattformunabhängig... ;->
fat-lobyte hat geschrieben:Generics sind wie Templates. Nur eigentlich viel viel schlechter.
Ähh... nein... Generics sind nicht wie Templates. Generics sind generische Algorithmen: Eine Implementierung eines Algorithmus' arbeitet generisch Typen ab, basierend auf dem kleinsten gemeinsamen Nenner, den alle Typen gemeinsam haben. Das ist sogar semantisch vollständig prüfbar, das sind Templates nicht grundsätzlich. Templates sind Algorithmen-Muster, das heißt, pro Typ wird eine passende Implementierung entsprechend des Musters erzeugt. Viele Typen, viele Implementierung. Damit kann man generisch programmieren, man kann aber Spezialversionen erzeugen. Templates werden zur Kompilierzeit erzeugt, ein Generic kann zur Laufzeit mit jedem Typ verwendet werden, der die Mindestvorraussetzungen erfüllt. Das ist eine Syntaxprüfung, die der Compiler leistet, für den Codegenerator ist das eine stinknormale Klasse, denn die Typ-Parameter werden zur Generierung einfach wieder ignoriert.
Generics sind dennoch eine coole Sache, denn sie erlauben eine Klassenimplementierung, die eigentlich statische Datentypen verarbeitet, im Code wie ein Template erscheinen zu lassen, dass Typsicher verarbeitet werden kann.
Generics sind keine Templates, Templates sind keine Generics, man kann mit Templates alle Probleme lösen, die man mit Generics lösen kann - das macht Templates auch cool - aber es entsteht ein anderes (größeres) Programm - das bedeutet, dass Generics eine Daseinsberechtigung haben. Man kann mit Templates aber auch noch viel mehr machen - das macht Templates noch cooler.
Templates und Generics darf man nicht in einen Topf werfen, nur weil es eine kleine Schnittmenge von Programmierproblemen gibt, die man mit beiden lösen kann. Die Lösungen entsprechen sich eben nicht. Generics bieten eine wertvolle Problemlösung an in klarer Syntax an. C++ kann das exakt nachbilden, aber dafür muss man mit einer Klasse und einem Template was zusammenbasteln und basteln ist nie so schön, wie eine Lösung in eindeutiger Syntax und Semantik.
fat-lobyte hat geschrieben:Man hat die Mehrfachvererbung abgeschafft, weil man es einem Programmierer nicht zutraut. Dafür hat man Interfaces eingeführt, die erst wieder das gleiche sind.
Interfaces erlauben keine Mehrfachvererbung, da man Interfaces nur einmalig implementieren kann. Fügt man einer Klasse, die von einer anderen Klasse das Interface X erbt, das Interface X nochmals hinzu, passiert nix.
In der Mehrfachvererbung kann man zwei Klassen zusammenfügen zu einer Klasse K, die beide jeweils von einer Klasse X abgeleitet sind. K enthält damit zwei Instanzen von X in der Vererbungshirarchie. Das ist in der Regel ein Designproblem, was heißt, dass man falsch designt hat, was bedeutet, dass man besser richtig designt.
Interfaces lösen das Problem - bauen aber leider neue Probleme ein.
fat-lobyte hat geschrieben:Nicht falsch verstehen, ich finde manche dinge Toll, zum beispiel das "Catch or specify", oder die verbesserte for-schleife. aber irgendwie nervts trotzdem...
Catch-or-specify funktioniert solange, bis man Software patcht oder eine Null-Pointer-Exception vorbeifliegt...
Iteratoren (die verbesserte For-Schleife) vermisse ich in C++ auch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten