Was soll noch alles in Java kommen?

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Ich habe gelesen, dass ja viel an Java gearbeitet wird um es schneller zu bekommen. Zwei wichtige Punkte sind da ja Swing und der GC. Die beiden Implementierungen kosten ja am meisten Rechenzeit. Swing soll sich ja ab der nächsten Version ja schneller werden, aber hat auch Sun etwas mit dem GC vor. Ich habe gelesen, das der manchmal ganzschön am ackern ist und ordendlich das Programm ins stocken geraten kann. Viele Anwendungen sind ja davon nicht betroffen, aber manchmal kann das schon sehr störend für den Programmfluss sein.
 
Gibts doch seit Java 5 in Form der Generics. Oder kann man mit C++ Templates noch mehr machen (bin kein C++ Experte)?
 
byto: Templates generieren neuen Code, Generics sorgen für Typsicherheit. Die beiden Dinge kann man schlecht vergleichen; Templates können Dinge die Generics nicht können - und umgekehrt.
 
So weit ich das weiss kann man mit den Generics nicht so viel machen wie mit C++ Templates. Die sind also eine Teilmenge davon, wieviel man von dem Rest braucht kann ich nicht sagen. Die Templates sind übrigends auch typensicher.
 
Und ein Diesel- funktioniert anders als ein Benzin-Motor. Technisch sicher interessant, ist das grundsätzlich eher belanglos, da am Ende diegleichen Produkte damit ausgestattet werden können und sich diese kaum unterscheiden.
 
Für den Entwickler ist aber nicht nur das Produkt interessant sondern auch das Softwaredesign, ergo interessiert das unter die Haube blicken schon. Programmierer sind die Ingenieure/Technicker der Softwareentwicklung.
 
Ich bezweifle das man mit Templates mehr machen kann als mit Generics. Überhaupt ist es wieder so ein Äpfel-Birnen-Vergleich.
Templates passen halt besser in die C++-Struktur mit dem statischen Compiler, wärend Generics besser in Sprachen wie Java und C# passen mit dem Jit-Compiler.
 
Es kann keines mehr als das andere, sie können unterschiedliche Dinge.

Mit Templates kann man die Fibonacci-Reihe zur Compile-Zeit berechnen lassen - keine Chance bei Generics.

Mit Generics kann man Methoden schreiben die zur Laufzeit mit verschiedenen Typen klar kommen (die nicht in derselben Vererbungshierarchie stehen müssen) - mit Templates (die neuen Code für jeden Typ generieren) hat man keine Chancen.

Wie DEvent sagte: Äpfel und Birnen...
 
Beni hat gesagt.:
Mit Generics kann man Methoden schreiben die zur Laufzeit mit verschiedenen Typen klar kommen (die nicht in derselben Vererbungshierarchie stehen müssen) - mit Templates (die neuen Code für jeden Typ generieren) hat man keine Chancen.

Dann ist der Wikieintrag dahingegen aber falsch. Wenn ich mir folgendes durchlese:

Ein Funktionstemplate (auch Templatefunktion genannt) verhält sich wie eine Funktion, die in der Lage ist, Argumente verschiedener Typen entgegenzunehmen. Die C++-Standardbibliothek enthält beispielsweise das Funktionstemplate max(x, y).
(...)
Anhand der Argumente macht der Compiler fest, dass es sich um einen Aufruf an max(int, int) handelt und erzeugt eine Variante der Funktion, bei der der Typ T zu int festgelegt wird.

So anders als Generics klingt das imo nun nicht.

Aber auch egal, das war nicht die ursprüngliche Diskussion. Kenne keine Templates und vermisse sie auch nicht. :roll:
 
Ich denke auch, daß Generics und Templates prinzipiell dem gleichen Zweck dienen. In C++ wurde sie halt als Feature des Präprozessors implementiert, so daß jede "Instanziierung" des Templates intern neuen Quelltext und daraus resultierend eigenen Binärcode erzeugt. In Java wird gemeinsam genutzter Bytecode erzeugt, der im Prinzip nur das Casting automatisch übernimmt. Damit stehen sich bei der Implementierung zwei Ideologien konträr gegenüber: maximale Geschindigkeit gegen minimale Codegröße und Abwärtskompatibilität.

Soweit ich die Implementierung von Generics verstanden habe, war allerdings das Bemühen um Abwärtskompatibilität zu Lasten der Laufzeit eine reichlich sinnlose Aktion, weil 1.5er-Programme wegen geänderter Klassenbilbiotheken in aller Regel ohnehin nicht auf einer 1.4er VM laufen.

Als alter C-Programmierer, der es Jahre (beinahe schon Jahrzehnte) gewohnt ist, das Letzte an Performance rauszquetschen, fand ich es schon ein bißchen enttäuschend, daß man bei den Generics darauf verzichtet hat, sie - dort wo es möglich ist - laufzeitoptimal zu implementieren. Das Argument Codegröße ist in C++ eigentlich auch sekundär, weil man ja in der Praxis keine 100 verschiedenen Instanzen eines Templates benutzt.
Auf der anderen Seite ist Java halt nun mal nicht primär auf Performance ausgerichtet. Wer sich schon mal in die Tiefen von Methoden wie setRGB begeben hat, weiß was ich meine. Dafür ist es ein schönes Gefühl zu wissen, daß die Programme - von unrühmlichen Ausnahmen abgesehen - unverändert auf sehr unterschiedlichen System laufen, solange die eine J2SE haben.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben