Java vs. C++



  • ShadowClone schrieb:

    Allein durch RAI und die bessere Typisierung fallen viele Fallstricke von C weg.
    Die STL ist außerdem sehr sinnvoll und performant. Bspw. ist std::copy im Gegensatz zu memcpy nicht nur typsicher, sondern tendenziell auch etwas performanter!

    http://stackoverflow.com/questions/4707012/is-it-better-to-use-stdmemcpy-or-stdcopy-in-terms-to-performance

    Ach du fuck!
    Ist nicht dein Ernst?

    Hast du dir dein Source Code angeschaut?
    Weißt du, dass das vor 5 Jahren war?
    Außerdem Speedtest mit einem Compiler?

    OMG!



  • Kannst du drehen und wenden wie du willst. Die verlinkten Videos kommen zum selben Schluss: C++ ist mind. genau so schnell wie C und dies bei mehr Sicherheit und Wartbarkeit.
    Die C++ Leute liefern wenigsten und räumen mit Mythen auf. Leute wie du kommen nur mit Behauptungen und nörgeln rum.



  • ShadowClone schrieb:

    Ohne Beispiele bleiben das Behauptungen.

    das netz ist voller beispiele: http://horstmann.com/cpp/pitfalls.html

    sogar aktuell hier im forum: https://www.c-plusplus.net/forum/340285



  • Mal davon abgesehen, dass C diese auch hat und diese gewiss nicht schön sind: Compilerwarnungen sind mittlerweile eine große Hilfe.



  • ShadowClone schrieb:

    Kannst du drehen und wenden wie du willst. Die verlinkten Videos kommen zum selben Schluss: C++ ist mind. genau so schnell wie C und dies bei mehr Sicherheit und Wartbarkeit.
    Die C++ Leute liefern wenigsten und räumen mit Mythen auf. Leute wie du kommen nur mit Behauptungen und nörgeln rum.

    An wem ist das Adressiert?
    Ich persönlich bin Software Engineer. Ich brauch kein Language War. Außerdem hab ich das Recht eine andere Meinung als irgendwer im Netz zu sein. Copy vs Memcopy ist ja so lächlich weil der Compiler und deren Runtime Implementieren lebendige Software ist, was ist wenn die heutige gcc 5% mehr raushaut? C Compiler und C++ beu GNU sind mindesten zwei verschiedenen Branches unter Umständen von zwei verschiedenen Entwicklergruppe gepflegt und du willst mir weiß machen das irgendein Beitrag der mit eine Version testet, sein Beitrag zum Fakt wird? Ich bitte dich. Außerdem benutzt dein Video nicht zero cost abstraction. Sowas gibst nicht in C++, Bjarne Stroustrup redet von

    B. Stroustrup schrieb:

    zero-overhead principle: What you don't use, you don't pay for

    in The Design and Evolution of C++. Addison Wesley, ISBN 0-201-54330-3.
    March 1994.

    In C++ musst du
    - für Objektorientierung zahlen
    - für Template Mechanismen zahlen

    Aber umsonst ist nix, die Frage ist ob es effizienter ist, aber das wiederum ist die Implementierung!



  • Zeus schrieb:

    In C++ musst du
    - für Objektorientierung zahlen
    - für Template Mechanismen zahlen

    Für die anderen, die diesen Quatsch tatsächlich glauben:

    Klassen haben nicht per se Overhead. Den hat man nur, wenn du virtuelle Funktionen benutzt.

    Templates: Der Code wird komplett zur Compilezeit erstellt. Den einzigen "Overhead" den man hat, ist, dass der Code für jeden Datentyp dupliziert wird. Das wirkt sich jedoch meist positiv auf die Laufzeit aus (deswegen hat man es ja gemacht). Der einzige Umstand, wo es sich negativ auswirkt, ist, wenn der Code nicht mehr in den CPU-Cache passt. Aber auch hier gilt: Niemand zwingt einen das zu benutzen. Allein durch Klassen, RAI und bessere Typsicherheit, ist viel gewonnen.

    Mit dir Zeus, ist jegliche Diskussion beendet.



  • Aber Klassen und schöne Fehlervermeidung habe ich bei Java doch auch.



  • - für Template Mechanismen zahlen

    Ich nehme mal an du sprichst über den Kompiliervorgang. Dann ja, manchmal muss ich mich echt am Kopf fassen, wenn ich irgendwas von Boost kompiliere.



  • ShadowClone schrieb:

    Zeus schrieb:

    In C++ musst du
    - für Objektorientierung zahlen
    - für Template Mechanismen zahlen

    Für die anderen, die diesen Quatsch tatsächlich glauben:

    Klassen haben nicht per se Overhead. Den hat man nur, wenn du virtuelle Funktionen benutzt.

    Templates: Der Code wird komplett zur Compilezeit erstellt. Den einzigen "Overhead" den man hat, ist, dass der Code für jeden Datentyp dupliziert wird. Das wirkt sich jedoch meist positiv auf die Laufzeit aus (deswegen hat man es ja gemacht). Der einzige Umstand, wo es sich negativ auswirkt, ist, wenn der Code nicht mehr in den CPU-Cache passt. Aber auch hier gilt: Niemand zwingt einen das zu benutzen. Allein durch Klassen, RAI und bessere Typsicherheit, ist viel gewonnen.

    Mit dir Zeus, ist jegliche Diskussion beendet.

    Du hast ja nix wiederlegen können? Also wo ist der Quatsch? Was ist der Blödsinn was ich sagte?

    Wie willst du objektorientierte Pattern verwenden ohne dynamischen Dispatcher zu benutzen? Es geht nicht oder du nimmst Substitionstechniken! Außerdem hab ich nie von Overhead geredet. Im Kern kannst du meine Aussage nicht wiederlegen. Du musst bezahlen. Egal wie du es machst.



  • Zeus schrieb:

    In C++ musst du für Objektorientierung zahlen

    In C++ lässt sich auch statischer Polymorphismus implementieren, der absolut keine Indirektionen zur Folge hat. Moderne C++-Compiler beherrschen außerdem Devirtualization. In C++ zahlt man also unter dem Strich deutlich weniger für Objektorientierung als in anderen OO-Sprachen.
    Außerdem ist dein Argument von Grund auf invalide, denn für Funktionszeiger in C oder für call / jmp zahlt man genauso. Die Abstraktion, die C++ hierbei bietet, beläuft sich lediglich darauf, dass man sich nicht mehr selbst um die Funktionszeigern kümmern muss, wie man es in C müsste. Diese Abstraktion ist in der Tat ohne zusätzliche Kosten; im Gegenteil, sie erlaubt sogar noch besseren Code dank den aufgezählten Optimierungen.

    Zeus schrieb:

    In C++ musst du für Template Mechanismen zahlen

    Ganz klar falsch. "Template-Mechanismen" evaluieren während der Compile-Zeit zu gewöhnlichem C++-Code und werden, wie alles andere, zu nativem Code kompiliert. Ferner erlauben sie Techniken wie Expression Tempaltes oder Spezialisierung, die zu noch performanterem Zielcode führen.

    Zeus schrieb:

    wiederlegen

    Zeus schrieb:

    An wem ist das Adressiert?
    Ich persönlich bin Software Engineer. Ich brauch kein Language War. Außerdem hab ich das Recht eine andere Meinung als irgendwer im Netz zu sein. Copy vs Memcopy ist ja so lächlich weil der Compiler und deren Runtime Implementieren lebendige Software ist, was ist wenn die heutige gcc 5% mehr raushaut?

    Lern zuerst Deutsch, du Analphabet, bevor du hier dein jämmerliches Halbwissen zu Programmiersprachen äußerst.



  • Halsabschneider schrieb:

    Zeus schrieb:

    In C++ musst du für Objektorientierung zahlen

    In C++ lässt sich auch statischer Polymorphismus implementieren, der absolut keine Indirektionen zur Folge hat. Moderne C++-Compiler beherrschen außerdem Devirtualization. In C++ zahlt man also unter dem Strich deutlich weniger für Objektorientierung als in anderen OO-Sprachen.
    Außerdem ist dein Argument von Grund auf invalide, denn für Funktionszeiger in C oder für call / jmp zahlt man genauso. Die Abstraktion, die C++ hierbei bietet, beläuft sich lediglich darauf, dass man sich nicht mehr selbst um die Funktionszeigern kümmern muss, wie man es in C müsste. Diese Abstraktion ist in der Tat ohne zusätzliche Kosten; im Gegenteil, sie erlaubt sogar noch besseren Code dank den aufgezählten Optimierungen.

    Woher kommen die Berechnungen zu devirtualisierung her, holt sie dein C++ Compiler aus eine andere Dimension, damit die keine Kosten haben?

    Halsabschneider schrieb:

    Zeus schrieb:

    In C++ musst du für Template Mechanismen zahlen

    Ganz klar falsch. "Template-Mechanismen" evaluieren während der Compile-Zeit zu gewöhnlichem C++-Code und werden, wie alles andere, zu nativem Code kompiliert. Ferner erlauben sie Techniken wie Expression Tempaltes oder Spezialisierung, die zu noch performanterem Zielcode führen.

    Ja genau der Compiler musst während des Compilezeit Typeinstanziierung von Template berechnen, Instanziierung ausführen und das Ergebnis zurückschreiben - Holt sich der Compiler diese Berechnungen aus eine andere Dimension damit sie nix kosten?



  • Halsabschneider schrieb:

    Moderne C++-Compiler beherrschen außerdem Devirtualization. In C++ zahlt man also unter dem Strich deutlich weniger für Objektorientierung als in anderen OO-Sprachen.

    DO ist im LLVM implementierung und kann von jeden Compilerentwickler für seine Programmiersprache verwenden. Es ist nicht C++ exclusiv!



  • Da klammert sich jemand an die letzten Grashalme. Da sagt er, dass da (zur Compilezeit) sehr wohl Kosten entstehen, um dann danach zu sagen, dass diese Kosten bei C auch entstehen können.
    Mal davon abgesehen, dass man lieber Compiletime-Kosten in Kauf nimmt als Runtime-Kosten (ein Release-Build macht man sowieso viel seltener). Da vermischt jemand ganz gehörig Dinge bzw. tut das absichtlich um auf Teufel komm raus recht behalten zu wollen. Wirklich armselig...



  • ShadowClone schrieb:

    Da klammert sich jemand an die letzten Grashalme. Da sagt er, dass da (zur Compilezeit) sehr wohl Kosten entstehen, um dann danach zu sagen, dass diese Kosten bei C auch entstehen können.
    Mal davon abgesehen, dass man lieber Compiletime-Kosten in Kauf nimmt als Runtime-Kosten (ein Release-Build macht man sowieso viel seltener). Da vermischt jemand ganz gehörig Dinge bzw. tut das absichtlich um auf Teufel komm raus recht behalten zu wollen. Wirklich armselig...

    Erstens, wolltest du die Diskussion nicht mit mir beenden? Warum meldest du dich überhaupt?

    Vorallen, kannst du überhaupt denken? Du schießt dich so sehr ein auf 'kosten'. Das du total vergießt, dass man sich darüber noch über Struktur und Wertigkeit (im Vergleich) reden könnten.

    Außerdem bist du doch gar nicht an eine sinnvolle Diskussion interessiert. Du hast dich schon mit deine ersten Provokation disqualifiziert

    ShadowClone schrieb:

    Von wegen C++ und typsicher!

    int x = 2;
    if (x = 1) {
        std::out << "Na klaro!" << std::endl;
    }
    

    Also Mr.Cpp-Papst, predige C++ weil es eine Ingenieursprache ist :D, aber bitte meide es objektive sich darüber auszutauschen.



  • Verdreh keine Dinge. Der Eingangspost hat Java mit C++ verglichen und es hieß, dass C++ typsicherer als Java sei. In diesem Kontext konnte ich nicht zustimmen, aber ich kann darin zustimmen, dass C++ typsicherer als C ist! – Hat alles Hand und Fuß!



  • ShadowClone schrieb:

    Verdreh keine Dinge. Der Eingangspost hat Java mit C++ verglichen und es hieß, dass C++ typsicherer als Java sei. In diesem Kontext konnte ich nicht zustimmen, aber ich kann darin zustimmen, dass C++ typsicherer als C ist! – Hat alles Hand und Fuß!

    D.h. implizite Typkonvertierung schwächen C++ typensicherheit?
    wenn ja, dann passt dein Post,
    wenn nein, dann ist dein Post unsinn.

    Meine Meinung ist nein.



  • Zeus schrieb:

    ShadowClone schrieb:

    Verdreh keine Dinge. Der Eingangspost hat Java mit C++ verglichen und es hieß, dass C++ typsicherer als Java sei. In diesem Kontext konnte ich nicht zustimmen, aber ich kann darin zustimmen, dass C++ typsicherer als C ist! – Hat alles Hand und Fuß!

    D.h. implizite Typkonvertierung schwächen C++ typensicherheit?

    Ja.



  • cppvsjava schrieb:

    Jetzt schreibe und (ein bisschen) lese ich C++ seit ungefähr 6 bis 8 Jahren. Dann dacht ich mir, ein guter Programmierer, der kann mehr als nur eine Sprache.

    Kann er ja auch. Mit C++ kannst Du eine blockstrukturierte Sprache (C), eine objektorientierte Sprache, eine generische Sprache, eine funktionale Sprache (Template Meta). 4 für einen Preis, ein echtes Schnäppchen.

    cppvsjava schrieb:

    Und dann habe ich Java gemacht.

    Ach Du warst das ?! 😮



  • Vielleicht sollten sich die Gemüter zu dem Thema etwas entspannen und einen Film ansehen 🙂 https://www.youtube.com/watch?v=RnqAXuLZlaE



  • C++ ist langsamer als C, wenn man Objektorientierung benutzt (Konstruktoren, Destruktoren, mehr Daten...). Ansonsten ist das doch C, welches mit einem C++-Compiler compiliert wurde.


Anmelden zum Antworten