c++ vs. java... was hat zukunft



  • Gregor schrieb:

    Ich weiß nicht, was pale dog in diesem Zusammenhang gesagt hat. ...vermutlich ging es um "Java hat keine Zeiger" oder so. Damit meint man: "Java hat keine Zeigerarithmetik". ...was IMHO eher positiv zu sehen ist.

    OK, dann zitiere ich mal (ist schon eine Weile her - das Original war auf Seite 26 des Threads):

    pale dog schrieb:

    CStoll schrieb:

    Und das ist das Problem 😉 Die Pointer sind zwar da (und man muß sich immer wieder vor Augen führen, daß man in Wirklichkeit "nur" Zeiger in der Hand hält)...

    nein, warum sollte man im entfernstesten an zeiger denken, wenn man mit Java programmiert? 😕

    @dot: Genau das ist der Unterschied, den die anwesenden Javaner nicht verstehen - die "Referenz y" wird durch den Methodenaufruf an x nicht verändert, das Objekt y (d.h. das Objekt, auf das diese Referenz zeigt) schon.



  • xivVerge schrieb:

    Wieso parallelisiere und optimiere ich wochenlang meine Algorithmen um extrem hohe Durchsatzraten bei der Auswertung von z.B. Inspektionsaufgaben zu erreichen, wenn dann erstens meine Laufzeitumgebung allen RAM wegfrisst und zweitens der JIT-Compiler alles wieder vermurkst?

    Weil ein Extra-RAM-Modul billiger ist als "10 Stunden Entwickler arbeiten lassen". 😉



  • CStoll schrieb:

    Das Problem habe ich schon mehrfach versucht zu erklären, aber keiner der Javaner hat richtig zugehört 😉 Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    Genau, eine eigenständige Referenz, die ich unabhängig von x manipulieren kann. Also alles prima. 🙂

    Btw: wenn ich int x=5; int y=x; ist das dann die gleiche Fünf oder sind's zwei verschiedene? 😃



  • Jester schrieb:

    CStoll schrieb:

    Das Problem habe ich schon mehrfach versucht zu erklären, aber keiner der Javaner hat richtig zugehört 😉 Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    Genau, eine eigenständige Referenz, die ich unabhängig von x manipulieren kann. Also alles prima. 🙂

    Die Referenzen sind verschieden, aber sie verweisen auf das selbe Objekt - und die Objekte hinter den Referenzen sind das, womit ich umgehen will.

    Btw: wenn ich int x=5; int y=x; ist das dann die gleiche Fünf oder sind's zwei verschiedene? 😃

    Wenn du es so willst, ist es die gleiche Fünf - aber der Unterschied ist, daß mich zwar der Wert (als Zahl) dieser Fünf interessiert, aber nicht der Wert (als Adresse) einer Referenz/Zeiger.



  • CStoll schrieb:

    @dot: Genau das ist der Unterschied, den die anwesenden Javaner nicht verstehen - die "Referenz y" wird durch den Methodenaufruf an x nicht verändert, das Objekt y (d.h. das Objekt, auf das diese Referenz zeigt) schon.

    Was heißt da schon "verstehen" und "Unterschied"? Natürlich versteht hier jeder, was Ihr meint. Ihr scheint aber nicht akzeptieren zu wollen, dass die Mechanismen, die Java da hat, insich ein völlig konsistentes Verhalten zeigen. Java ist halt nicht C++ und ein "MyObject a;" heißt in beiden Sprachen meistens etwas anderes.

    Wenn jemand nicht gerade ein Anfänger in der jeweiligen Sprache ist, wird er dort keinerlei Probleme mit Zuweisungen usw. haben. Glaubt Ihr, da sagt sich einer "Huch, was passiert denn da jetzt plötzlich?"? Ne. Letztendlich ist das ein völliges Non-Issue, was hier diskutiert wird.



  • Gregor schrieb:

    xivVerge schrieb:

    Wieso parallelisiere und optimiere ich wochenlang meine Algorithmen um extrem hohe Durchsatzraten bei der Auswertung von z.B. Inspektionsaufgaben zu erreichen, wenn dann erstens meine Laufzeitumgebung allen RAM wegfrisst und zweitens der JIT-Compiler alles wieder vermurkst?

    Weil ein Extra-RAM-Modul billiger ist als "10 Stunden Entwickler arbeiten lassen". 😉

    lol



  • Ich persönlich habe nichts gegen Java. Im Gegenteil. Da ich für verschiedene Anwendungsgebite Software entwickle nutze ich sehr häufig Java.
    Nur stehe ich jeder Programmiersprache auch kritisch gegenüber. Und es gibt einfach Fälle, in denen Java ungeeignet ist.
    Leider gibt es in beiden Lagern ( C++, Java ) zu viele Leute, welche immer wieder fadenscheinige Argumente bringen, warum der Gehirnchirurg nun ihr Schweizer Taschenmesser verwenden soll.
    ( ala "Man kann ja das kleine Messer nehmen" )

    Jeder sollte offen für Kritik an "seiner" Programmiersprache sein und einsehen, dass nichts fehlerfrei ist.



  • Gregor schrieb:

    xivVerge schrieb:

    Wieso parallelisiere und optimiere ich wochenlang meine Algorithmen um extrem hohe Durchsatzraten bei der Auswertung von z.B. Inspektionsaufgaben zu erreichen, wenn dann erstens meine Laufzeitumgebung allen RAM wegfrisst und zweitens der JIT-Compiler alles wieder vermurkst?

    Weil ein Extra-RAM-Modul billiger ist als "10 Stunden Entwickler arbeiten lassen". 😉

    Klassische "Pragmatikerentscheidung", die letztlich die Kosten auf Andere abwälzt 😉
    EIN Extra-Ram-Modul mag preiswerter sein, aber wenn ich die SW an 200.000 Kunden verkaufe, stellt mir der Modulhersteller aus Dankbarkeit einen Ferrari vor die Tür.
    "win/win situation".... 😃

    Gruß,

    Simon2.



  • CStoll schrieb:

    Die Referenzen sind verschieden, aber sie verweisen auf das selbe Objekt - und die Objekte hinter den Referenzen sind das, womit ich umgehen will.

    Und damit wären wir doch beim Punkt: Du hast Dich in einer Sichtweise festgebissen und aus der ist es inkonsistent. Wieso weigerst Du Dich hartnäckig einen kleinen Schritt zu tun und Deinen Blickwinkel zu ändern, so dass es konsistent ist?

    Du wirst in Java nie direkt mit den Objekten arbeiten. Es gibt in Java keine Ausdrücke, deren Wert ein Objekt ist.



  • xivVerge schrieb:

    Ich persönlich habe nichts gegen Java. Im Gegenteil. Da ich für verschiedene Anwendungsgebite Software entwickle nutze ich sehr häufig Java.
    Nur stehe ich jeder Programmiersprache auch kritisch gegenüber. Und es gibt einfach Fälle, in denen Java ungeeignet ist.
    Leider gibt es in beiden Lagern ( C++, Java ) zu viele Leute, welche immer wieder fadenscheinige Argumente bringen, warum der Gehirnchirurg nun ihr Schweizer Taschenmesser verwenden soll.
    ( ala "Man kann ja das kleine Messer nehmen" )

    Jeder sollte offen für Kritik an "seiner" Programmiersprache sein und einsehen, dass nichts fehlerfrei ist.

    Mir käme Java auch nicht als erstes in den Sinn, wenn es um die Programmierung von DSPs geht. Es käme mir auch nicht direkt in den Sinn, wenn ich generell irgendetwas Echtzeitfähiges machen müsste. Trotzdem verrät mir Google auf den ersten Blick:

    http://www.google.de/search?q=realtime+Java

    Das da bei 1.400.000 Suchergebnissen Java durchaus oft in Verbindung mit Echtzeitsystemen gebracht wird. Insofern sollte man vielleicht doch nochmal genauer hingucken, ob man Java diesbezüglich sofort abschreiben kann.



  • CStoll schrieb:

    pale dog schrieb:

    CStoll schrieb:

    Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    da ist nichts mit 'festhalten', eine referenz ist auch bloss eine variable, nicht das objekt selber. wieso ist das nur so schwer zuverstehen 😞 😕

    Du hast selber gesagt, daß man in Java die Referenzen komplett vergessen kann.

    das ist mir neu...

    Simon2 schrieb:

    dot schrieb:

    int x = y;
    x = x + 1;  // verändert y nicht
    
    MyType x = y;
    x.add(1);  // verändert y
    

    so hab ich das als nicht javaianer verstanden.

    [javaner-modus]y wird nicht verändert ! Es zeigt immer noch auf dasselbe Objekt ![/javaner-modus]
    Richtig, pale ? 😉

    bravo 👍
    wenigstens einer, der's verstanden hat.
    Simon, du bist noch nicht verloren!
    bei CStoll aber (eigentlich ist er ja ein ganz intelligenter bursche) hat die beschäftigung mit C++ scheinbar einige blockaden im kopf verursacht 😉



  • Simon2 schrieb:

    EIN Extra-Ram-Modul mag preiswerter sein, aber wenn ich die SW an 200.000 Kunden verkaufe, stellt mir der Modulhersteller aus Dankbarkeit einen Ferrari vor die Tür.

    Ist wohl eine Optimierungsfrage. Wenn Du die Sofware nur 100 mal verkaufst, dann sieht es schnell ganz anders aus.

    Darf ich daraus schließen, dass sich C++ nicht für Individualsoftware eignet?



  • Jester schrieb:

    CStoll schrieb:

    Die Referenzen sind verschieden, aber sie verweisen auf das selbe Objekt - und die Objekte hinter den Referenzen sind das, womit ich umgehen will.

    Und damit wären wir doch beim Punkt: Du hast Dich in einer Sichtweise festgebissen und aus der ist es inkonsistent. Wieso weigerst Du Dich hartnäckig einen kleinen Schritt zu tun und Deinen Blickwinkel zu ändern, so dass es konsistent ist?

    Selbst wenn du der Meinung bist, daß diese Sichtweise konsistent ist, erklärt das noch immer nicht die Unterschiede zwischen Build-in Typen und eigenen Klassen.

    Du wirst in Java nie direkt mit den Objekten arbeiten. Es gibt in Java keine Ausdrücke, deren Wert ein Objekt ist.

    Aber ich kann in Java direkt mit Zahlen arbeiten und Ausdrücke verwenden, deren Wert eine Zahl ist 😉



  • zahlen sind eben keine objekte...:p



  • Gregor schrieb:

    Mir käme Java auch nicht als erstes in den Sinn, wenn es um die Programmierung von DSPs geht. Es käme mir auch nicht direkt in den Sinn, wenn ich generell irgendetwas Echtzeitfähiges machen müsste. Trotzdem verrät mir Google auf den ersten Blick:

    http://www.google.de/search?q=realtime+Java

    Das da bei 1.400.000 Suchergebnissen Java durchaus oft in Verbindung mit Echtzeitsystemen gebracht wird. Insofern sollte man vielleicht doch nochmal genauer hingucken, ob man Java diesbezüglich sofort abschreiben kann.

    Kann man. Für Echtzeitanwendungen nimmt man heute offensichtlich Python: http://www.google.de/search?q=realtime+python (1.440.000 hits)



  • falsch, für echtzeit nimmt man heute schneemänner:

    http://www.google.at/search?hl=de&q=realtime+snowman&btnG=Suche&meta=



  • pale dog schrieb:

    CStoll schrieb:

    pale dog schrieb:

    CStoll schrieb:

    Mit einem 'int x=y;' erzeugst du einen eigenständigen int-Wert, den du völlig unabhängig von y weiter behandeln kannst. Mit 'MyType x=y;' erzeugst du eine eigenständige Referenz, die aber mit dem gleichen Objekt arbeitet, das y festhält.

    da ist nichts mit 'festhalten', eine referenz ist auch bloss eine variable, nicht das objekt selber. wieso ist das nur so schwer zuverstehen 😞 😕

    Du hast selber gesagt, daß man in Java die Referenzen komplett vergessen kann.

    das ist mir neu...

    Ich zitiere deinen Satz nicht nochmal, also blättere einfach eine Seite zurück 😉

    Simon2 schrieb:

    dot schrieb:

    int x = y;
    x = x + 1;  // verändert y nicht
    
    MyType x = y;
    x.add(1);  // verändert y
    

    so hab ich das als nicht javaianer verstanden.

    [javaner-modus]y wird nicht verändert ! Es zeigt immer noch auf dasselbe Objekt ![/javaner-modus]
    Richtig, pale ? 😉

    bravo 👍
    wenigstens einer, der's verstanden hat.
    Simon, du bist noch nicht verloren!
    bei CStoll aber (eigentlich ist er ja ein ganz intelligenter bursche) hat die beschäftigung mit C++ scheinbar einige blockaden im kopf verursacht 😉

    Herzlichen Dank 🕶
    Nochmal klar: Objektorientierung arbeitet mit Objekten. Java behauptet von sich, objektorientiert zu sein. Aber trotzdem bekommst du in Java keine Objekte in die Hand (ob man das, was man da hat, nun "Referenz" oder "Zeiger" nennt, ist eine Frage der Namensgebung - technisch gesehen entsprechen die Java Referenzen am ehesten einem C++ Smart-Pointer).



  • Tim schrieb:

    Gregor schrieb:

    Insofern sollte man vielleicht doch nochmal genauer hingucken, ob man Java diesbezüglich sofort abschreiben kann.

    Kann man. Für Echtzeitanwendungen nimmt man heute offensichtlich Python: http://www.google.de/search?q=realtime+python (1.440.000 hits)

    Dein Link ist gut. Deine Schlussfolgerung nicht. 😉



  • Gregor schrieb:

    ...
    Darf ich daraus schließen, dass sich C++ nicht für Individualsoftware eignet?

    Was Du daraus schließt, bleibt Dir überlassen, aber wir haben eine größere Individualsoftware hier laufen, die komplett in C++ geschrieben ist und die tut's prima. 😃
    Letztlich gehen ja sowieso ganz andere Faktoren in so eine Rechnung ein als ein Rambaustein (wie hatten. z.B. deutlich mehr C++- als Java-Erfahrung im Team)....

    Gruß,

    Simon2.



  • Tim schrieb:

    Für Echtzeitanwendungen nimmt man heute offensichtlich Python: http://www.google.de/search?q=realtime+python (1.440.000 hits)

    http://www.google.de/search?q=realtime+margarine
    immerhin noch ~80.000 hits 😉


Anmelden zum Antworten