# Was soll noch alles in Java kommen?



## Gast (14. Jun 2006)

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.


----------



## AlArenal (14. Jun 2006)

Google ist toll:

Java: Was Mustang und Dolphin bringen


----------



## Gast (14. Jun 2006)

Wird es in der neuen Version endlich mal Templates geben?


----------



## byte (14. Jun 2006)

Gibts doch seit Java 5 in Form der Generics. Oder kann man mit C++ Templates noch mehr machen (bin kein C++ Experte)?


----------



## Beni (14. Jun 2006)

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.


----------



## byte (14. Jun 2006)

Hatte mir dahingegen bloß den Wiki Artikel durchgelesen:

http://de.wikipedia.org/wiki/Template_(Programmierung)

Demnach könnte man zum Schluß kommen, dass es in etwa die selben Konzepte sind, u.a. heisst es ja auch:



> In anderen Programmiersprachen gibt es ein zu Templates ähnliches Konzept unter dem Namen „generischer Typ“.


----------



## Gast (14. Jun 2006)

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.


----------



## AlArenal (14. Jun 2006)

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.


----------



## Gast (14. Jun 2006)

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.


----------



## DEvent (14. Jun 2006)

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.


----------



## Beni (14. Jun 2006)

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...


----------



## AlArenal (14. Jun 2006)

Beni hat gesagt.:
			
		

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



Na dass ist doch mal ein Killer-Feature


----------



## byte (15. Jun 2006)

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:


----------



## 0xdeadbeef (15. Jun 2006)

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.


----------



## AlArenal (15. Jun 2006)

HIer noch die auf 109 Seiten reduzierte Präsentation der JavaOne 2006 zum Thema Language-Level XML Support, der für Java 7 angedacht ist: http://blogs.sun.com/roller/resources/mr/integrating-xml-j1-2006.pdf


----------

