C/Java vs. C++/Java
-
Habe letztens mit meinem Nachbarn über folgenden Absatz aus "Java in a Nutshell" diskutiert:
David Flanagan schrieb:
Dieses Kapitel zeigt auch Ähnlichkeiten und Unterschiede zwischen Java und C++ auf. C++-Programmierer sollten dennoch vorsichtig sein: Obwohl Java sehr viel Terminologie und auch Syntax von C++ übernommen hat, sind die Analogien zwischen Java und C++ nicht annäherd so groß wie zwischen Java und C. C++-Programmierer sollten sehr vorsichtig sein und sich nicht von einem falschen Gefühl der Vertrautheit mit Java täuschen lassen, nur weil die Sprachen einen Reihe von Schlüsselwörtern gemeinsam haben.
(Kapitel 2: Unterschiede zwischen Java und C)
Konnten uns aber nicht zusammenreimen warum! Wie läßt sich dieses Statement erklären?
TIA
-
Hm... das bezieht sich sicherlich auf das gleiche Verhalten von Struktur und Adresse einer Struktur.
Wenn ich in C einen String habe
char str[] = "c++.de";
und diesen "naiv" kopiere:
char* str2 = str;
entspricht das eigentlich genau dem, was Java bei einer String-Kopie macht: das 2. Objekt erhält eine Referenz auf das erste Objekt, aber der String wird nicht explizit kopiert.
In C++ dagegen wird bei einem
std::string str = "c++.de"; str2 = str;
im Regelfall (bei der üblichen Implementierung von std::string) eine echte Kopie im Speicher gemacht, d.h. der String steht nachher zweimal im RAM.
Genauso verhält sich das auch bei Strukturen/Objekten: in C wird nur der Zeiger kopiert, aber nicht die Strukturinhalte, während bei C++ über den Copyctor die Inhalte kopiert werden. Java verhält sich hier anders, da es Inhalte behält und die Destinations nur Referenzen auf die Originale erhalten.
Das würde mir dazu einfallen... als Gemeinsamkeit im Sinne der Speicherverwaltung komplexer Datenstrukturen.
Das ist eigentlich eine interessante Anmerkung, den Unterschied zwischen Java und C++ sieht man natürlich, aber daß man das als Gemeinsamkeit von Java und C auslegt ist interessant.
-
OK, danke für die ausführliche Antwort. Das wäre schon mal ein guter Grund; gibt es noch andere? (Dieses "nicht annäherd so groß" verwirrt mich ein wenig...)
-
Ich glaube nicht (abgesehen vom Syntax).
Und meines Erachtens ist dies auch ein wirklich wesentlicher Grund - denn dieser Effekt wirkt bei allen komplexen Daten, auf denen ein Programm arbeitet. Und die Verarbeitung von Daten ist ja doch eine grundlegende Wirkung von Programmen.
Insofern ist dieser Unterschied/Gemeinsamkeit schon fundamental. Man kann so argumentieren: C++ mag zu Java syntaktisch ähnlich sein, aber die Semantik der Verwaltung von Datenstrukturen ist in Java sehr ähnlich zu C, aber kaum vergleichbar mit der von C++. Ich denke mal, daß dies der Hintergedanke der Autoren bei dieser Aussage war.