Wann wird Java 5.0 endlich final?



  • Und warum ist jetzt der Bytecode nicht mehr abwärtskompatibel?
    Das war doch immer oberstes Ziel. Nicht, dass mich das stören würde, aber dann hätten sie auch gleich weniger Design-Kompromisse eingehen können.



  • Gute Frage. Bin ich eigentlich der Einzige, der die Java-Generics hässlich findet?



  • hässlich... jain. Es könnte schöner gehen als mit <T extends A & B & C>
    Mich stört eigentlich mehr, dass sie so billig implementiert sind. Man verliert auch ne Menge Flexibilität dadurch, dass letztendlich alles auf java.lang.Object reduziert wird.
    Und bei primitiven Typen verliert man Performance. Kann ja auch durchaus mal sein, dass ich ne LinkedList<int> brauchen könnte.

    Summa sumarum gefällt mir das System in C# eigentlich besser. Wenn die Abwärtskompatibilität nicht mehr gegeben ist, würde IMHO nichts dagegen sprechen, das System noch mal zu überarbeiten.

    Was C# und Java beide nicht haben, was aber eigentlich schon schöner wäre, dass Foo[] einem Array<Foo> entsprechen würde, so dass sich die Arrays nicht so künstlich von den Collections abtrennen.
    Das kann man aber jetzt nicht mehr ändern, weil Arrays weniger typsicher (manche nennen es flexibler) sind.


  • Mod

    Optimizer schrieb:

    Wann wird Java 5.0 endlich final?

    AFAIK sollte damit innerhalb eines Monats zu rechnen sein. Ende September kommt nämlich die finale Netbeans 4.0 Version und ich gehe eigentlich fest davon aus, dass zu diesem Zeitpunkt auch ein finales Java 5.0 vorhanden sein wird.

    Optimizer schrieb:

    Und warum ist jetzt der Bytecode nicht mehr abwärtskompatibel?
    Das war doch immer oberstes Ziel.

    1. Ich glaube eigentlich nicht, dass sich der Bytecode verändert hat. Was sich verändert hat, ist das Format der class-Files, was aber nicht mit "Bytecode" gleichzusetzen ist. In einem class-File befindet sich mehr als nur der Bytecode.

    2. Das Ziel ist nicht Abwärtkompatibiliät, sondern Aufwärtskompatibilität. Das Ziel ist, dass du Code, der für eine alte JVM geschrieben wurde, auf einer aktuellen JVM noch laufen lassen kannst und, dass aktueller Code mit älterem Code umgehen kann. Das geht AFAIK weiterhin. Es geht nicht darum, dass aktueller Code auf einer alten JVM laufen können sollte, was auch nicht geht.



  • Eine Zeit lang ging dies ja. Der Compiler hat die Generics sowieso entfernt und seine Typecasts hingesetzt. Ich denke mal, dass man schon erst versucht hat, dass noch kompatibel zu halten und nur einen neuen Compiler schreiben wollte.
    Im JSR dazu war das, glaube ich, auch so zu lesen.


  • Mod

    Optimizer schrieb:

    Mich stört eigentlich mehr, dass sie so billig implementiert sind. Man verliert auch ne Menge Flexibilität dadurch, dass letztendlich alles auf java.lang.Object reduziert wird.
    Und bei primitiven Typen verliert man Performance. Kann ja auch durchaus mal sein, dass ich ne LinkedList<int> brauchen könnte.

    Dann gib doch mal RFE 4487555 deine Stimme. Es ist zwar ein RFE mit sehr wenig Aussicht auf Erfolg, aber wenn viele dafür stimmen würden, würde das den Erfolg sicherlich wahrscheinlicher machen. ...falls man sich irgendwann tatsächlich mal dazu entschließen würde, Java wirklich zu erneuern.


  • Mod

    Optimizer schrieb:

    Eine Zeit lang ging dies ja. Der Compiler hat die Generics sowieso entfernt und seine Typecasts hingesetzt. Ich denke mal, dass man schon erst versucht hat, dass noch kompatibel zu halten und nur einen neuen Compiler schreiben wollte.
    Im JSR dazu war das, glaube ich, auch so zu lesen.

    Bei mir läuft alter Code auch mit der Java 5.0 Beta 2 VM. Das ist gar kein Problem. Ich weiß nicht, wo du da ein Problem hast.



  • Ausprobiert habe ich es nicht. Aber ich meinte eigentlich schon, gehört zu haben, dass alte VMs den 1.5er Code nicht mehr ausführen können.
    Naja wie auch immer, darüber muss sich Sun Sorgen machen, nicht ich.

    Hab mal meine Stimme abgegeben. Hat mich eigentlich aber nicht sehr überzeugt, was die da geschrieben haben und die Anzahl an Stimmen ist auch nicht überragend. Wird wohl nichts bringen.

    EDIT: Achso, du hast bei der Kompatibilität von was anderem geredet. Verwirr mich halt. 😉


  • Mod

    Optimizer schrieb:

    Hab mal meine Stimme abgegeben. Hat mich eigentlich aber nicht sehr überzeugt, was die da geschrieben haben und die Anzahl an Stimmen ist auch nicht überragend. Wird wohl nichts bringen.

    Ja, ich mach mir da auch keine Hoffnungen. Trotzdem ist habe ich auch eine meiner 3 Stimmen für diesen RFE geopfert. ...die anderen beiden für anderes.


  • Mod

    Ich habe übrigens vorhin auf www.javalobby.org gesehen, dass das aktuell angestrebte Datum für die finale Version der 30. September ist.


  • Mod

    Der RC ist jetzt verfügbar: http://java.sun.com/j2se/1.5.0/download.jsp



  • Ausgezeichnet, den werd ich mir gleich mal ziehen. 🙂



  • Optimizer schrieb:

    Und bei primitiven Typen verliert man Performance. Kann ja auch durchaus mal sein, dass ich ne LinkedList<int> brauchen könnte.

    ArrayList<Integer> list =  new ArrayList<Integer>();
       list.add(0, new Integer(42));
       int total = list.get(0).intValue();
    

  • Mod

    Real schrieb:

    Optimizer schrieb:

    Und bei primitiven Typen verliert man Performance. Kann ja auch durchaus mal sein, dass ich ne LinkedList<int> brauchen könnte.

    ArrayList<Integer> list =  new ArrayList<Integer>();
       list.add(0, new Integer(42));
       int total = list.get(0).intValue();
    

    Real: Oh man! Du hast es einfach nicht verstanden. Es geht um Performance. Das, was du da vorschlägst ist gegenüber einer ArrayList, die direkt mit ints arbeitet, saulahm.



  • Real schrieb:

    Optimizer schrieb:

    Und bei primitiven Typen verliert man Performance. Kann ja auch durchaus mal sein, dass ich ne LinkedList<int> brauchen könnte.

    ArrayList<Integer> list =  new ArrayList<Integer>();
    ....
    

    aber 'Integer' ist eine klasse, nicht einfach nur 'int'



  • Gregor schrieb:

    Real schrieb:

    Optimizer schrieb:

    Und bei primitiven Typen verliert man Performance. Kann ja auch durchaus mal sein, dass ich ne LinkedList<int> brauchen könnte.

    ArrayList<Integer> list =  new ArrayList<Integer>();
       list.add(0, new Integer(42));
       int total = list.get(0).intValue();
    

    Real: Oh man! Du hast es einfach nicht verstanden. Es geht um Performance. Das, was du da vorschlägst ist gegenüber einer ArrayList, die direkt mit ints arbeitet, saulahm.

    Auch das ich jetzt Gefahr laufe Schwachsinn zu schreiben, aber du kannst nicht direkt mit int und einer ArrayList arbeiten, weil ArrayList, LinkedList usw. nur Objekte aufnehmen können.

    Liebe Grüße
    Real


  • Mod

    Real schrieb:

    Auch das ich jetzt Gefahr laufe Schwachsinn zu schreiben, aber du kannst nicht direkt mit int und einer ArrayList arbeiten, weil ArrayList, LinkedList usw. nur Objekte aufnehmen können.

    Eben. ...und das ist ein großer Nachteil von Java. Es wäre schön gewesen, wenn man die Generics als Anlass genommen hätte, da mal grundlegend etwas zu verändern. Das hat man aber nicht gemacht.

    ...aber natürlich kann man selbst eine ArrayList oder ähnliches für primitive Typen schreiben, die dann entsprechend schneller ist.




  • Mod

    Real schrieb:

    @Gregor: Hast du schon mal eine ArrayList geschrieben, die primitive Typen unterstützt?

    Nein, aber ich habe schon andere Datenstrukturen für primitive Datentypen geschrieben. Zum Beispiel habe ich mal ne doppelt verkettete Liste für ints geschrieben.

    Wenn du soetwas suchst, dann findest du genug entsprechende Klassen im Netz. Zum Beispiel da: http://pcj.sourceforge.net/

    Was hat dein anderer Beitrag damit zu tun?! 😕



  • @Gregor: Danke, wenn ich es mal brauchen werde aufgrund Perfomance-Probleme, werde ich mich daran wenden.

    Gregor schrieb:

    Was hat dein anderer Beitrag damit zu tun?! 😕

    Ich bin verzweifelt. 😞 Der Fehler will einfach nicht gefunden werden.

    Liebe Grüße
    Real


Anmelden zum Antworten