Unterschiede zu C++ für Umsteiger von Java
-
moep manche verwechseln bei ihren vergleichen die eingentliche sprache(Syntax, Schlüsselworter) mit einem eventuell vorhandenen Framework.
Java an sich (ich meine nicht das Framework JSDK/JRE) kennt kein Threading oder Reflection.
Nur durch das vorhandene Framwork, was bei java ein muss ist, damit ein java-programm überhaupt auf einem System laufen kann, bietet diese zusätzlichen features.ein besserer Vergleich wäre, wenn man bei c++ zumindestens die stl+boost dazunimmt und bei java das JDK/JRE-framework.
Und schon sieht hier der Vergleich schon etwas anders aus.
z.b. Threading werden von beiden unterstüzt.
-
tntnet schrieb:
...Wenn ich eine JRE installiert habe, sind viele Standardaufgaben bereits installiert...
Gilt genauso, wenn ich mir ein Visual Studio C++ installiere....
Es stimmt: Viele führen dieses Argument im Munde ... aber nur wenige von denen wissen, wovon sie da reden.
Wenn das ein Problem ist, dann ein Imageproblem - das vermutlich seinen Ursprung in der Entstehungsgeschichte von Java hat. Diese Argumente (auch "Java ist sicher/portabel/keine Zeiger/...") waren samt und sonders dazu da, die Existenz von Java (mit einer sehr C++-ähnlichen Syntax/Semantik) in einer Welt, in der es bereits C++ gab, zu legitimieren. Heute werden sie immer noch wiedergekaut, obwohl schon lange klar ist, dass sie nicht stichhaltig oder sehr viel irrelevanter sind."Java ist ein Produkt mit einer C++-ähnlichen Konfigurationssprache"

(mit allen Stärken, die ein Produkt (gegenüber einer "Sprache") hat ... und allen Nachteilen)Gruß,
Simon2.
-
libeinbinder schrieb:
ich glaube in Java gibt es viel weniger Probleme Libraries einzubauen. In C++ muss man die Libraries doch oft noch durchkompilieren. Bei Java reicht ein einfaches import.
Hä ?
Wieso das ?
Also ich habe immer fertig kompilierte Libs verwendet.
(BTW: ein Recompile einer c++-lib ist immer noch schneller&einfacher als die Installation eines passenden JREs)Gruß,
Simon2.
-
Simon2 schrieb:
"Java ist ein Produkt mit einer C++-ähnlichen Konfigurationssprache"

(mit allen Stärken, die ein Produkt (gegenüber einer "Sprache") hat ... und allen Nachteilen)So würde ich das nicht ausdrücken. Java und C++ sind beides (im Kern) Programmiersprachen und haben historisch bedingt eine ähnliche Syntax. Aber damit hören die Gemeinsamkeiten auch schon fast auf.
-
Ich denke, wir sollten hier nicht wieder in einen Java vs. C++ Thread ausarten. Ich wünsche mir für diesen Thread, das wir doch eher beim Thema C++ bleiben. Was auch das ursprüngliche Topic war. Java kennt der Topicersteller zu genüge. Mich würde eher C++ interessieren. Meine letzte Frage, bzgl. externe Libs ist immer noch unbeachtet.
@libeinbinder! Ja, hier gebe ich dir zum Teil recht. Andererseits kann man daraus auch kein Problem machen, höchstens eine Schwierigkeit. Und ich gebe in den meisten Fällen die Schuld nicht C++ sondern den Library-Entwicklern. Wenn ich z.B. gtkmm schlecht unter MSVC builden und nutzen kann, liegt die Schuld beim gtkmm-Team. Denn die Boost Libs kann ich komischerweise auf mehr als 20 Compilern builden, mit EINEM einzigen Kommandozeilenbefehl!!! Warum ist das so? Weil Boost ein gutes C++ Buildsystem unterstützt. gtkmm unterstützt so ein, für meine Verständnisse, nicht so flexibles Buildsystem.
D.h. die Umstände des Library-Builds lassen sich auf ein Minimum reduzieren. Soweit, das ich nur eine Kommandozeile eingeben muß um den Buildprozess zu starten.
Weiterhin besteht bei kommerziellen Anbietern auch die Möglichkeit, das diese schon fertige Lib-Dateien anbieten. Im MS-Umfeld ist das praktisch gang und gebe.
-
ich hab noch'n paar nachteile von C++: :xmas2:
* einfache datentypen sind in C++ variabel (länge, byte order usw.).
* in C++ handelt man sich schnell 'undefiniertes verhalten' ein. das gibt's in java gar nicht (jedenfalls nicht das ich wüsste).
* in C++ gibts keinen '>>>' operator. (okay, lässt sich leicht nachbilden, aber manchmal fehlt der eben).
-
Simon2 schrieb:
tntnet schrieb:
...Wenn ich eine JRE installiert habe, sind viele Standardaufgaben bereits installiert...
Gilt genauso, wenn ich mir ein Visual Studio C++ installiere....
Ja, eben! Deshalb gibt es ja für Windows so viel Software. Ich kaufe VC++ und habe nach der Installation eine KOMPLETTE Entwicklungsumgebung um ALLES machen zu können, was mit Windows nur denkbar ist. Egal ob Serverprogrammierung, COM/ActiveX, Spiele (DirectX) usw. Im Prinzip müssten nur die anderen (Linux usw.) die APIs von Windows nachbauen. Schon hätte man eine C++-Runtime im Komplettpaket die für mehr als ein System verfügbar ist.

Im ernst, am Ende ist es doch egal, ob ich Eclipse und eine JRE einzeln installiere, oder ob ich VC++ und Boost einzeln installiere. Das was hier diskuttiert wird, ist Haarspalterei.
Und wenn ich bedenke, das Boost mittlerweile bei diversen Linux-Distributionen vorinstalliert ist (ja, kaum zu glauben!) ist dies sogar fortschrittlicher als Java. Denn Java durfte bis vor kurzen zu keinem Betriebssystem ausgeliefert werden. Die Boost-Binaries sind komischerweise schon auf diversen Linuxen vertreten.
-
Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.
-
CStoll schrieb:
Simon2 schrieb:
"Java ist ein Produkt mit einer C++-ähnlichen Konfigurationssprache"

(mit allen Stärken, die ein Produkt (gegenüber einer "Sprache") hat ... und allen Nachteilen)So würde ich das nicht ausdrücken. ...
Naja, war auch "provokant überspitzt", um auszudrücken: Vieles, was als "Vorteil von Java" dargestellt wird, hat nichts mit der Sprache zu tun, sondern damit, dass sie an ein konkretes Produkt (und dessen Software) geknüpft ist ...
Ist aber auch egal: Es geht dem Threadstarter ja gar nicht um die Frage "welche Sprache ist besser ?".
Gruß,
Simon2.
-
schorsch code schrieb:
Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.
Was will uns der Schreiber hier mitteilen? 
-
Simon2 schrieb:
Ist aber auch egal: Es geht dem Threadstarter ja gar nicht um die Frage "welche Sprache ist besser ?".
Sobald die Worte Java und C++ irgendwie im selben Thread fallen, ist es schon fast Tradition, 'nen Java vs. C++ Thread draus zu machen... analog zu den Unix vs. Windows Threads... hach, Ideologien sind doch was schönes :xmas2:
Artchi schrieb:
Wenn ich z.B. gtkmm schlecht unter MSVC builden und nutzen kann, liegt die Schuld beim gtkmm-Team.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-165460.html
-
net schrieb:
...
- einfache datentypen sind in C++ variabel (länge, byte order usw.).
- in C++ handelt man sich schnell 'undefiniertes verhalten' ein. das gibt's in java gar nicht (jedenfalls nicht das ich wüsste).
- in C++ gibts keinen '>>>' operator. (okay, lässt sich leicht nachbilden, aber manchmal fehlt der eben).
zu 1) stimmt, sehe ich auch so. Eine der "C-Leichen im Keller" von denen man sich hätte lösen müssen.
zu 2) Dafür handelt man sich in Java sehr viel schneller die Probleme "läuft, tut aber nicht, was es soll", "krieg' ich nicht so hin, wie ich's brauche" und "hab' ich das nicht schon 1000mal programmiert ?" ein. Dass mächtigere Werkzeuge auch an den Nutzer höhere Anforderung stellen, ist nicht auf Programmiersprachen beschränkt.
zu 3)
so, wie es ein Nachteil vom Mac ist, dass er keine rechte Maustaste hat.... 
Gruß,
Simon2.
-
schorsch code schrieb:
Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.
Stimmt ! Besser 1,6 GB an Runtime tief im System vergraben (inkl. Registry&Co) !!

Jungs, jetzt trasht doch nicht das (an sich sehr interessante) Thema zu, das da lautet:
"Worauf muß ein Sprachumsteiger achten ?"Gruß,
Simon2.
-
@simon:
du hast jedenfalls gute und überzeugende pro-C++ argumente. das muss man dir lassen. solche threads wie diesen gibt's ja öfter hier, aber so gut wie du bekommt das kaum keiner hin (meiner meinung nach).
-
schorsch code schrieb:
Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.
Artchi schrieb:
Was will uns der Schreiber hier mitteilen? 
Simon2 schrieb:
Stimmt ! Besser 1,6 GB an Runtime tief im System vergraben (inkl. Registry&Co) !!

Was ich eigentlich sagen wollte, ist dass ich bei C++ eben keine riesige Runtime vorraussetzen muss, sondern nicht mehr als nur die benötigten Libs dazu packen brauche.
-
net schrieb:
@simon:
du hast jedenfalls gute und überzeugende pro-C++ argumente. das muss man dir lassen. solche threads wie diesen gibt's ja öfter hier, aber so gut wie du bekommt das kaum keiner hin (meiner meinung nach).:xmas1: hoch, jetzt werd' ich aber ein wenig rot ...

Danke.
Da wir hier in der Firma sowohl das eine wie das andere programmieren und einige seeeehr fähige Leute haben, bekommt man halt so einiges mit.
Und (wie wahrscheinlich schon oft gesagt) ich bemühe mich, um ein möglichst objektives Bild der beiden Sprachen (was nicht einfach ist, wenn das eigene Herz bei C++ höher schlägt) ....
Mich erinnern diese Auseinandersetzungen oft an "Bruderkriege", die umso heftiger und blutiger ausfallen, je ähnlicher sich die Brüder sind.
(Wer schonmal Cobol oder C auf uralt Entwicklungsumgebung programmieren musste, weiß vermutlich, wovon ich rede).
Gruß,
Simon2.
-
schorsch code schrieb:
schorsch code schrieb:
Es ist schon praktisch, wenn man den Kunden nicht dazu zwingen muss, 100MB an libs zu installieren, obwohl es möglich ist, mit nur 1MB und ohne Installation auszukommen.
Artchi schrieb:
Was will uns der Schreiber hier mitteilen? 
Simon2 schrieb:
Stimmt ! Besser 1,6 GB an Runtime tief im System vergraben (inkl. Registry&Co) !!

Was ich eigentlich sagen wollte, ist dass ich bei C++ eben keine riesige Runtime vorraussetzen muss, sondern nicht mehr als nur die benötigten Libs dazu packen brauche.
Aha !!!
Dann bitte ich vielmals um Entschuldigung - ich hatte das genau andersherum (miß-)verstanden.Gruß,
Simon2.
-
net schrieb:
ich hab noch'n paar nachteile von C++: :xmas2:
* einfache datentypen sind in C++ variabel (länge, byte order usw.).
Hat aber auch seine Vorteile: wenn ich auf einem 256 bit System entwickel, unterstützt mein Compiler höchstwahrscheinlich mit einem long die volle 256 bit Breite. Bei Java bin ich auf die eine SUN-Specifikation festgenagelt. Weiterhin kann ich in C++ durch ein einfaches typedef ebend mal für ein anderes System den Typ anpassen, ohne ein Refactoring durchführen zu müssen. Der eine "Mangel" wird notgedrungen ein positiver Nebeneffekt.
net schrieb:
* in C++ handelt man sich schnell 'undefiniertes verhalten' ein. das gibt's in java gar nicht (jedenfalls nicht das ich wüsste).
Ja, ist manchmal nervig. Habe aber schon öffters in diversen JRE-Versionen nicht das Verhalten gehabt, welches mir laut SUN-Spec versprochen wurde.
Bug!net schrieb:
* in C++ gibts keinen '>>>' operator. (okay, lässt sich leicht nachbilden, aber manchmal fehlt der eben).
Hier habe ich eine Wissenslücke: Was ist der '>>>" Operator? (ernste Frage!)
-
Artchi schrieb:
Hier habe ich eine Wissenslücke: Was ist der '>>>" Operator? (ernste Frage!)
right-shift unter missachtung des vorzeichens (schiebt auch bei negativen zahlen nullen rein).
-
Artchi schrieb:
net schrieb:
ich hab noch'n paar nachteile von C++: :xmas2:
* einfache datentypen sind in C++ variabel (länge, byte order usw.).Hat aber auch seine Vorteile: wenn ich auf einem 256 bit System entwickel, unterstützt mein Compiler höchstwahrscheinlich mit einem long die volle 256 bit Breite.
das kann man nicht unbedingt als vorteil sehen, wenn ein programm plötzlich 80% mehr speicher braucht der einfach nur brach liegt
