Java vs. C++
-
ShadowClone schrieb:
Von wegen C++ und typsicher!
int x = 2; if (x = 1) { std::out << "Na klaro!" << std::endl; }
deswegen z.b. sind die macher von java bis heute sehr stolz auf ihre sprache.
boolean ist da eben keine teilmenge von int.
-
swapper schrieb:
Gregor schrieb:
Flamewars über "Java vs. C++" gibt es, weil sich die Anwendungsbereiche der beiden Sprachen teilweise überschneiden.
im bereich der schnittmenge ist man mit java besser bedient als mit c++. und für alles darunter ist man mit c besser bedient als mit c++. kurz gesagt: c++ ist irgendwie obsolet. nur etwas für liebhaber aber ohne praktischen vorteil.
-
Kenner des C++ schrieb:
swapper schrieb:
Gregor schrieb:
Flamewars über "Java vs. C++" gibt es, weil sich die Anwendungsbereiche der beiden Sprachen teilweise überschneiden.
im bereich der schnittmenge ist man mit java besser bedient als mit c++. und für alles darunter ist man mit c besser bedient als mit c++. kurz gesagt: c++ ist irgendwie obsolet. nur etwas für liebhaber aber ohne praktischen vorteil.
naja, etwas. wie die meisten hier.
-
Eigentlich will ich diese leidige Thema nicht befeuern, aber von Java -> C++ fehlt mir nur richtige Introspektion und die extrem einfache Testbarkeit. Andersrum fehlt mit ne riesige Tonne Features.
Und die extrem strikte Objektorientierung und das Fehlen von Features vernichtet hunderte coole Software Designs und Abstraktionen.
Ich schreibe lieber C++, wegen der Freiheit die mir die Sprache bietet.
Dafür muss ich nicht immer wieder die gleichen ausgelutschten Argumente bedienen.
C++ kann so viele Programmierparadigmen bedienen, da erscheint mit der Vergleich schon fast wie ein Vergleich zwischen einem roten Apfel (Java) und einem ganzen Fruchtkorb.
-
5cript schrieb:
Eigentlich will ich diese leidige Thema nicht befeuern, aber von Java -> C++ fehlt mir nur richtige Introspektion und die extrem einfache Testbarkeit. Andersrum fehlt mit ne riesige Tonne Features.
Und die extrem strikte Objektorientierung und das Fehlen von Features vernichtet hunderte coole Software Designs und Abstraktionen.
Ich schreibe lieber C++, wegen der Freiheit die mir die Sprache bietet.
Dafür muss ich nicht immer wieder die gleichen ausgelutschten Argumente bedienen.
C++ kann so viele Programmierparadigmen bedienen, da erscheint mit der Vergleich schon fast wie ein Vergleich zwischen einem roten Apfel (Java) und einem ganzen Fruchtkorb.C++ hindert mich sicher zu programmieren. In Java kann ich z. B. alle Membervariablen als final deklarieren, solange ich sie im Konstruktor initialisiere. Geht zwar auch mit C++, aber sobald ich das Objekt z. B. in eine QList stecke, fängt der Visual C++ Compiler an zu meckern, dass der Copy Konstruktor fehlt. Geht komischerweise wunderbar unter Linux, weil dort die Zuweisung evtl. durch memcopy realisiert ist (ich weiß es ehrlich gesagt nicht).
Ganz ähnlich, wenn ich einen Standard-Konstruktor vermeiden will und stattdessen einen mit mehreren Argumenten wähle, um sicherzustellen, dass alle Membervariablen vom Benutzer sinnvoll initialisiert werden: QList braucht einen Default-Konstruktor, dadurch kann dann der Benutzer das Objekt mit einem Default-Konstruktor instanziieren und ein paar Member-Variablen setzen und den Rest uninitialisiert lassen. – Die Sicherheit ist dadurch verloren gegangen. Das sind alles Probleme, die ich erst seit C++ kenne und die andere moderne Sprachen nicht haben.
-
ShadowClone schrieb:
C++ hindert mich sicher zu programmieren. In Java kann ich z. B. alle Membervariablen als final deklarieren, solange ich sie im Konstruktor initialisiere. Geht zwar auch mit C++, aber sobald ich das Objekt z. B. in eine QList stecke, fängt der Visual C++ Compiler an zu meckern, dass der Copy Konstruktor fehlt. Geht komischerweise wunderbar unter Linux, weil dort die Zuweisung evtl. durch memcopy realisiert ist (ich weiß es ehrlich gesagt nicht).
Ganz ähnlich, wenn ich einen Standard-Konstruktor vermeiden will und stattdessen einen mit mehreren Argumenten wähle, um sicherzustellen, dass alle Membervariablen vom Benutzer sinnvoll initialisiert werden: QList braucht einen Default-Konstruktor, dadurch kann dann der Benutzer das Objekt mit einem Default-Konstruktor instanziieren und ein paar Member-Variablen setzen und den Rest uninitialisiert lassen. – Die Sicherheit ist dadurch verloren gegangen. Das sind alles Probleme, die ich erst seit C++ kenne und die andere moderne Sprachen nicht haben.
Dann kann man Java auch emulieren und mit referenzen / zeigern arbeiten. Wenn das Objekt default-Konstruierbar sein muss: wrappen (unique_ptr, for instance).
Sonst soweit auch erstmal ein Problem mit Qt...
-
Java hat das Problem, dass final nicht const ist. Das stimmt. Insgesamt halte ich es aber für sicherer.
Zum Wrappen: Das habe ich später auch im Internet gelesen, aber dass ich dann Objekte auf dem Heap anlegen muss, ist auch nicht das Gelbe vom Ei.
Zu Qt: Ja, mag ein Problem von Qt sein, aber Qt macht C++ erst interessant. Crossplattform-Entwicklung macht man bei C++ mit Qt. Die Konkurrenz deckt bestenfalls eine Teilmenge von Qt ab. Qt bietet wirklich alle Standard-Techniken in einem Guss an.
-
ShadowClone schrieb:
Zum Wrappen: Das habe ich später auch im Internet gelesen, aber dass ich dann Objekte auf dem Heap anlegen muss, ist auch nicht das Gelbe vom Ei.
Demnach besteht Java nur aus Eiweiß.
-
floorball schrieb:
ShadowClone schrieb:
Zum Wrappen: Das habe ich später auch im Internet gelesen, aber dass ich dann Objekte auf dem Heap anlegen muss, ist auch nicht das Gelbe vom Ei.
Demnach besteht Java nur aus Eiweiß.
Größtenteils, ja. Und dank Qt, wird C++ auch zu einem Eiweiß-Klumpen, wenn man so vorgehen will, wie ich es oben beschrieben habe.
-
ShadowClone schrieb:
Zu Qt: Ja, mag ein Problem von Qt sein, aber Qt macht C++ erst interessant. Crossplattform-Entwicklung macht man bei C++ mit Qt. Die Konkurrenz deckt bestenfalls eine Teilmenge von Qt ab. Qt bietet wirklich alle Standard-Techniken in einem Guss an.
Meine Güte, wenn ich nur schon den Benutzernamen ShadowClone lese, dann weiß ich schon, dass da irgendein Stuss zu Qt kommt. Selbiges hier, genau so sehr fehl am Platz: https://www.c-plusplus.net/forum/p2512288#2512288
Was kommt als nächstes? LLVM, Root und Caffe sollte man von C++ komplett nach Java umschreiben, weil es für C++ kein Argument gibt, da diese Bibliotheken kein Qt benutzen?
-
ShadowClone schrieb:
Java hat das Problem, dass final nicht const ist.
Wieso ist das ein Problem?
-
Andromeda schrieb:
ShadowClone schrieb:
Java hat das Problem, dass final nicht const ist.
Wieso ist das ein Problem?
Weil sich das final bei Objekten nur auf die Referenz/Pointer bezieht und du die Member der Objekten immer noch manipulieren kannst. Das ist bei Klassen, die immutabel sein sollen bspw. ein Problem, da du nicht drum rumkommst ein Deep Copy zu machen, wenn du Parameter entgegen nimmst bzw. Member-Instanzen zurückgibst.
-
ShadowClone schrieb:
Andromeda schrieb:
ShadowClone schrieb:
Java hat das Problem, dass final nicht const ist.
Wieso ist das ein Problem?
Weil sich das final bei Objekten nur auf die Referenz/Pointer bezieht und du die Member der Objekten immer noch manipulieren kannst. Das ist bei Klassen, die immutabel sein sollen bspw. ein Problem, da du nicht drum rumkommst ein Deep Copy zu machen, wenn du Parameter entgegen nimmst bzw. Member-Instanzen zurückgibst.
Wenn eine Class immutabel sein soll, nennt man das final vor dem Schlüsselwort class!
-
Zeus schrieb:
ShadowClone schrieb:
Andromeda schrieb:
ShadowClone schrieb:
Java hat das Problem, dass final nicht const ist.
Wieso ist das ein Problem?
Weil sich das final bei Objekten nur auf die Referenz/Pointer bezieht und du die Member der Objekten immer noch manipulieren kannst. Das ist bei Klassen, die immutabel sein sollen bspw. ein Problem, da du nicht drum rumkommst ein Deep Copy zu machen, wenn du Parameter entgegen nimmst bzw. Member-Instanzen zurückgibst.
Wenn eine Class immutabel sein soll, nennt man das final vor dem Schlüsselwort class!
Ist in Java nicht so einfach.
https://docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html
-
Doch sehr einfach! Das Pattern ist so einfach zu verstehen wie C++ Const nicht transitiv ist.
-
Es ist aber nicht damit getan die Klasse final zu machen, wie von dir eingangs behauptet.
-
ShadowClone schrieb:
Es ist aber nicht damit getan die Klasse final zu machen, wie von dir eingangs behauptet.
Nein hab ich nie behauptet wo steht das?
-
Das ist mir jetzt echt zu doof.
-
eigentlich ist es ziemlich egal, welche programmiersprache du im endeffekt nimmst und es gibt auch kein besser. die "java-menschen" reden nur so schlecht über c++, weil sie eben zuerst java gelernt haben, und umgekehrt reden die "c++-menschen" so schlecht über über java, weil sie zuerst c++ gelernt haben, und beide haben dann so ihre gewohnheiten.
aber wie gesagt: im endeffekt ist es egal.
-
Quark. Ich hab zuerst C64-Basic gelernt und das werde ich hier sicher nicht als gut anpreisen.