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



  • 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 😉



  • CStoll schrieb:

    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.

    Welche Unterschiede denn? Nochmal: Es gibt eingebaute Datentypen und Referenzen. Wo unterscheidet sich da jetzt was?

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

    Richtig. Und diese Werte sind mit den Werten von Referenzen zu vergleichen. Und dann passt auch alles. 🙂



  • CStoll schrieb:

    Nochmal klar: Objektorientierung arbeitet mit Objekten. Java behauptet von sich, objektorientiert zu sein. Aber trotzdem bekommst du in Java keine Objekte in die Hand

    Möchtest Du damit andeuten, dass Java garnicht objektorientiert ist?



  • Jester schrieb:

    ...
    Welche Unterschiede denn? Nochmal: Es gibt eingebaute Datentypen und Referenzen. ...

    Naja, es gibt ja auch irgendwie noch "Objekte"...

    Gruß,

    Simon2.



  • CStoll schrieb:

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

    Du erzeugst in C++ ziemlich schnell Kopien von Objekten. ...komisch: Wenn ich an Objekte denke, dann Verfielfältigen die sich meistens nicht so schnell. Wenn ich z.B. an ein Auto denke, dann bleibt das ein Auto. ...entsprechend ist es, wenn ich versuche, das zu modellieren. Das Auto, das hier bei uns in der Einfahrt steht ist das selbe, das auch mein Nachbar bei uns in der Einfahrt sieht. Und wenn mein Nachbar da mal mit seinem Schlüssel rangeht und nen ordentlichen Kratzer macht, dann wird er Probleme kriegen, weil das Auto, auf das er sich bezieht, eben nicht nur in seiner Sicht der Dinge existiert.

    Insofern finde ich es persönlich nicht unbedingt einleuchtend, ein Objekt bei einer Zuweisung immer gleich zu kopieren. 😉



  • Gregor schrieb:

    ...

    Insofern finde ich es persönlich nicht unbedingt einleuchtend, ein Objekt bei einer Zuweisung immer gleich zu kopieren. 😉

    Meinst Du, ein operator=() wäre zu billig für das, was er kann ? 😉
    So viel teurer ist ein clone() coh auch nicht.

    Wenn ich Zeiger zuweise, wird auch in C++ nicht mehr kopiert als in Java. Ich kann nur zusätzlich mit derselben Semantik Objekte kopieren wie Zeiger, ints, ....

    Gruß,

    Simon2.



  • Gregor schrieb:

    Du erzeugst in C++ ziemlich schnell Kopien von Objekten. ...komisch: Wenn ich an Objekte denke, dann Verfielfältigen die sich meistens nicht so schnell.

    das sind altlasten, die C++ von C übernommen hat.
    durch eine simple zuweisung kann C structs kopieren, in C durchaus sinnvoll, hat es in einer OOP-sprache aber diverse nachteile.
    wer's nicht weiss: 'class' und 'struct' sind in C++ annähernd das selbe.



  • pale dog schrieb:

    hat es in einer OOP-sprache aber diverse nachteile.

    würd mich jetzt interessieren welche das sind.



  • @Grogor: In C++ kannst du auch mit Referenzen und Zeigern arbeiten. Aber im Gegensatz zu Java kannst du selber entscheiden, wo du Zeiger verwendest und wo nicht.

    Jester schrieb:

    CStoll schrieb:

    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.

    Welche Unterschiede denn? Nochmal: Es gibt eingebaute Datentypen und Referenzen. Wo unterscheidet sich da jetzt was?

    Technisch unterscheidet sich das vielleicht nicht, aber semantisch - Build-ins stehen für sich selbst, Referenzen für jemand anderes.



  • pale dog schrieb:

    Gregor schrieb:

    Du erzeugst in C++ ziemlich schnell Kopien von Objekten. ...komisch: Wenn ich an Objekte denke, dann Verfielfältigen die sich meistens nicht so schnell.

    das sind altlasten, die C++ von C übernommen hat.
    durch eine simple zuweisung kann C structs kopieren, in C durchaus sinnvoll, hat es in einer OOP-sprache aber diverse nachteile....

    Also ich sehe weder "Altlasten" (sondern: Konsequente Fortführung und sauberere Konzeption; oder würdest Du Java-Referenzen als "C-Altlasten" bezeichnen ?) noch "diverse Nachteile in einer OOP-Sprache".

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Meinst Du, ein operator=() wäre zu billig für das, was er kann ? 😉
    So viel teurer ist ein clone() coh auch nicht.

    Ui... Du weißt ja gar nicht, wie teuer es ist, ein funktionierendes clone zu programmieren. 😃 ...abgesehen davon assoziiert man mit einem "=" natürlich etwas ganz anderes als mit einem ".clone()".

    ...aber von der Benutzung von clone wird in Java eh abgeraten. ...zu Recht.



  • CStoll schrieb:

    @Grogor: In C++ kannst du auch mit Referenzen und Zeigern arbeiten. Aber im Gegensatz zu Java kannst du selber entscheiden, wo du Zeiger verwendest und wo nicht.

    Ich bin mir darüber im Klaren. Man mag es nicht für möglich halten, aber selbst ich habe schonmal C++ Code produziert. 😃



  • Also wenn man die Sprache nicht kennt, assoziiert man mit "=" sowieso einen Vergleich und keine Zuweisung; wenn man sie kennt, assoziiert man doch genau das: Eine Zuweisung. .... und mehr macht doch C++ auch nicht; nur dass man dort definieren kann, was man unter der Zuweisung eines Objekts an ein Anderes versteht.

    Daneben gibt es noch die "Initialisierung mit =", die nur eine andere Schreibweise für den Aufruf eines CopyCtors ist; die finde ich persönlich ebenfalls intuitiv (wobei ich zugeben muss, dass dadurch "in der Breite" wohl mehr Verwirrung als Klärung entsteht).

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Daneben gibt es noch die "Initialisierung mit =", die nur eine andere Schreibweise für den Aufruf eines CopyCtors ist; die finde ich persönlich ebenfalls intuitiv (wobei ich zugeben muss, dass dadurch "in der Breite" wohl mehr Verwirrung als Klärung entsteht).

    muss nicht unbedingt ein CopyCtor sein. wenngleich intuitiv, ist afaik, aus syntaktischen gründen, in C++ die initialisierung mit = manchmal notwendig 😉



  • Warum gibt es für die String-Klasse überhaupt eine Operator-Überladung in Java? Gerade dort ist sie doch eher fehl am Platz. Außerdem halte ich es für fehleranfällig das andere Typen implizit in ein String umgewandelt werden.

    So wie ich es verstanden habe gib

    1+2+"3"
    

    etwas anderes als

    "1"+2+3
    

    Warum nimmt man also den operator+, wenn man sich noch nicht einmal an die Semantik des Operators hält?

    Und warum wird einem teilweise eine Ähnlichkeit von Variablen und Zeigern vorgespielt? Das ist doch alles sehr verwirrend und sehr inkonsistent. Die Inkonsistenz geht ja auch bei den Literalen weiter. Es gibt für jeden Typ ein Literal, aber für die String-Klasse gibt es auch ein Literal (wenn ich es richtig verstanden habe). Gibt es zB auch für BigInteger ein Literal?

    Gerade für die Zwecke für die Java hier beworben wird, sind andere Programmiersprachen doch eher geeignet. Wie ich schon einmal gefordert habe. Nennt mir ein Argument für Java ohne C++ zu erwehnen (und das Argument darf auf keine andere Programmiersprache in besserer Form zutreffen). :p

    @Gregor

    Als ich 2001 in dieses Forum gekommen bin, hat man C++ vorgeworfen, dass praktisch kein Compiler standardkonform ist. 3 Jahre nach dem 98er Standard. Das deutet schonmal darauf hin, dass die Standardisierung von der Infrastruktur bzw. von der Organisation her nicht besonders sorgfältig oder professionell ist.

    Die ISO-Kommission bringt eben keine Implementierung raus

    Was genau meinst Du eigentlich?

    Artchi beschwert sich doch zB immer, das man für die IBM-Produkte nur Java 1.4 benutzen kann.

    Das ist denke ich auch ein Problem. Die Java-Releases sind ja nicht abwärts kompatibel. Wie lange pflegt SUN eine alte Java-Version? Werden Bugs/Sicherheitsprobleme etc. regelmäßig geupdatet oder werde ich gezwungen upzugraden?



  • dot schrieb:

    ...
    muss nicht unbedingt ein CopyCtor sein....

    Stimmt !
    Aber wo ist die Initialisierung syntaktisch notwendig ? Fällt mir gerade kein Beispiel zu ein...

    Gruß,

    Simon2.



  • Gregor schrieb:

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

    Was mich jetzt interessieren würde: Wo würdest du die Vorteile von Java für Echtzeitanwendungen sehen?



  • dot schrieb:

    pale dog schrieb:

    hat es in einer OOP-sprache aber diverse nachteile.

    würd mich jetzt interessieren welche das sind.

    ^siehe gregors beitrag^
    z.b. unbeabsichtigtes erzeugen von objekten --> das programm läuft zwar wie geplant, aber langsam und speicherintensiv weil ständig unnütze objektkopien erzeugt werden.


Anmelden zum Antworten