Warum gibt es keine NULL-Reference



  • kingruedi schrieb:

    @net
    das muss man wohl nicht weiter kommentieren 🙄

    wieso nicht? wolltest du noch was dazu sagen? schade nur, dass es undefiniertes verhalten ist, wie optimizer schreibt.



  • net schrieb:

    schade nur, dass es undefiniertes verhalten ist, wie optimizer schreibt.

    es ist absoluter bloedsinn.
    weder syntaktisch noch semantisch macht es sinn.

    was soll man also dazu sagen?



  • Shade Of Mine schrieb:

    es ist absoluter bloedsinn.
    weder syntaktisch noch semantisch macht es sinn.

    syntaktisch falsch? mein oller mingw compiled es ohne murren 😕



  • net schrieb:

    Shade Of Mine schrieb:

    es ist absoluter bloedsinn.
    weder syntaktisch noch semantisch macht es sinn.

    syntaktisch falsch? mein oller mingw compiled es ohne murren 😕

    "weder $A noch Bmachtessinn"!="B macht es sinn" != "A ist falsch"

    🙄

    Ansonsten hat CarstenJ schon alles gesagt, was ich zu dem Code sagen würde.



  • kingruedi schrieb:

    "weder $A noch Bmachtessinn"!="B macht es sinn" != "A ist falsch"
    🙄
    Ansonsten hat CarstenJ schon alles gesagt, was ich zu dem Code sagen würde.

    dass der code irgendwie nicht sehr sinnvoll ist bzw. sich undefiniert verhält ist die eine sache...gcc compiled ihn jedenfalls, syntaxfehler sind's nicht.
    irgendwie bin' ich euch auf den schlips getreten damit, was 😕 😉



  • irgendwie bin' ich euch auf den schlips getreten damit, was

    Es nervt nur, dass wenn die Frage bereits auf Seite 1 schon längst ausreichend beantwortet wurde, der Thread dennoch bis Seite 12 und noch weiter wächst.



  • CarstenJ schrieb:

    irgendwie bin' ich euch auf den schlips getreten damit, was

    Es nervt nur, dass wenn die Frage bereits auf Seite 1 schon längst ausreichend beantwortet wurde, der Thread dennoch bis Seite 12 und noch weiter wächst.

    nanana, selbst dein erster post liest sich so, als wärst du schon ziemlich genervt



  • net schrieb:

    CarstenJ schrieb:

    irgendwie bin' ich euch auf den schlips getreten damit, was

    Es nervt nur, dass wenn die Frage bereits auf Seite 1 schon längst ausreichend beantwortet wurde, der Thread dennoch bis Seite 12 und noch weiter wächst.

    nanana, selbst dein erster post liest sich so, als wärst du schon ziemlich genervt

    Naja, liegt wahrscheinlich am Wetter.... 😉



  • CarstenJ schrieb:

    Naja, liegt wahrscheinlich am Wetter.... 😉

    Stell dich nicht so an - ist endlich mal wieder schoen kuehl.



  • Optimizer: Wo kann man das denn nachlesen, dass Java-Referenzen sowas wie Pointer auf Pointer sind? Sie fühlen sich beim Programmieren jedenfalls in jeder Hinsicht wie einfache Pointer an.



  • In Java sind das eindeutig Pointer, oder warum gibts in Java "NullPointerExceptions"??? 😮

    Habe darüber auch mit meinen Java-Kollegen diskutiert, wir sind zu dem Schluss gekommen, das das Wort Referenz in Java nur Marketingstrategie ist. Die Dinger sind im Grunde genauso fehleranfällig wie Pointer in C++, mit dem einzigen Vorteil, das man sich nicht um ein Delete kümmern muß.

    Object t = null;
    t.toString();    // PENG!
    


  • Bashar schrieb:

    Optimizer: Wo kann man das denn nachlesen, dass Java-Referenzen sowas wie Pointer auf Pointer sind? Sie fühlen sich beim Programmieren jedenfalls in jeder Hinsicht wie einfache Pointer an.

    Pointer auf Pointer fühlen sich auch wie Pointer an.

    MyClass** a, b, c;
    a = b = c;
    c = new MyClass();  // Angenommen, new liefert MyClass**
    b = c;
    

    Der Unterschied ist rein technischer Natur. Als Programmierer nimmt man nur Einfluss auf das MyClass**, MyClass* kann nur vom GC geändert werden, was er dann macht, wenn er die Objekte verschiebt.
    Es wäre nämlich etwas unsinnig, beim Verschieben von ein paar hundert Objekten alle Referenzen darauf zu suchen und anzupassen. Daher die zusätzliche Indirektion, von der man in Java natürlich weder syntaktisch nocht semantisch (aus o.g. Gründen) etwas mitbekommt, so wie man auch von der ersten Indirektion zumindest syntaktisch nichts mitbekommt.

    Noch interessante Links:
    http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
    http://msdn.microsoft.com/msdnmag/issues/1100/gci/
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/dotnetperftechs.asp

    In Java sind das eindeutig Pointer, oder warum gibts in Java "NullPointerExceptions"??? 😮

    Das ist mal ne richtig geile Begründung, danke, hast mich überzeugt. 😉

    Die Dinger sind im Grunde genauso fehleranfällig wie Pointer in C++, mit dem einzigen Vorteil, das man sich nicht um ein Delete kümmern muß.

    Welche Fehleranfälligkeit bleibt denn deiner Meinung nach noch? delete hast du schon genannt, Pointerarithmetik geht auch nicht ... ganz schön gefährlich, dein null. 😕



  • Artchi schrieb:

    Die Dinger sind im Grunde genauso fehleranfällig wie Pointer in C++,

    aber nur weil man 'ner java-referenz 'null' zuweisen kann. referenzen _sind_ pointer im anderen gewand. der wolf im schafspelz, hehe, nur wird das dem 08/15 c++ user nicht so bewusst



  • Optimizer schrieb:

    Der Unterschied ist rein technischer Natur. Als Programmierer nimmt man nur Einfluss auf das MyClass**, MyClass* kann nur vom GC geändert werden, was er dann macht, wenn er die Objekte verschiebt.

    Und wer verschiebt die MyClass-Pointer? Löst das überhaupt ein Problem, oder verschiebt es das nur?
    So ein Problem kann es doch nicht sein, alle Pointer zu ändern. Der GC durchläuft sie ja ohnehin während der Mark-Phase.



  • Bashar schrieb:

    Und wer verschiebt die MyClass-Pointer? Löst das überhaupt ein Problem, oder verschiebt es das nur?

    Die kann doch der GC ändern sobald er das Objekt verschiebt. Wenn es auf jedes Objekt nur genau einen echten Pointer gibt, sehe ich eine Reihe von Problemen weniger.

    So ein Problem kann es doch nicht sein, alle Pointer zu ändern. Der GC durchläuft sie ja ohnehin während der Mark-Phase.

    Hmmm bei ner Full Collection schon, bei einer Gen0 IMHO nicht. Laut dem zweiten Link (dort weiterführender Link "Part 2") werden bei einer Gen0 Collection Referenzen zu Objekten in höheren Generationen ignoriert, wenn sie nicht dirty sind. Die Objekte in höheren Generationen könnten aber Referenzen auf Objekte jüngerer Generationen haben, die dann nicht angepasst würden (weil sie nicht durchlaufen werden). Das verschieben jüngerer Objekte im Speicher macht auch die alten Objekte nicht dirty, die werden nur angeschaut, wenn die Referenz von einem Objekt (oder null) auf ein anderes Objekt (oder null) gelegt wird, aber nicht wenn es beim selben Objekt bleibt, welches verschobenen wird - sonst wäre ja immer alles dirty, also 0 Gewinn durch Generationen.

    Aber ok, ich leg jetzt auch nicht dafür meine Hand ins Feuer. Aber ich meine schon, dass so verstanden zu haben, als ich mich mal eine Zeit lang mit dem Thema beschäftigt habe. Wenn du da allerdings andere Informationen hast, würden die mich auch sehr interessieren. 🙂


Anmelden zum Antworten