Java vs. C++
-
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 vonB. 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 zahlenAber 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 zahlenFü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 zahlenFü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ürcall
/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ürcall
/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.
-
Eines der größten Probleme wird wohl bleiben, dass die meisten Leute überhaupt nicht in der Lage sind entscheiden zu können, welche Sprache die Richtige für ihr Problem ist.
MMn. trifft es dieser Spruch am besten:
"C++ ist eine der meist genutzten Sprache, obwohl diese so scheiße schwer und kompliziert ist."
Java hingegen ist nur einfach.
-
Gibt es irgendwo *gute* Benchmarks für Java vs. C++, also bei denen das Programm in der jeweiligen Sprache immer bestmöglichst die Sprachfeatures ausnutzt (nicht so wie der olle c't-Test, wo Strings in C++ per value (!) übergeben wurden)?
-
grundsätzlich gilt, dass die javavm einen interpreter darstellt und dass dieser interpreter naturgemäß einfach mehr rechenzeit beansprucht, als opcodes.
da brauchst du keine benchmarks für.