vorteile von c++ gegenüber von java
-
@Steffo: Lern C++
@PI: Lern Java. edit: PI kann wohl Java.Ihr kämpft gerade einen Vorurteilenkampf und habt beide so unglaublich wenig Übersicht, daß es reichen würde, daraus eine Seifenoper zu drehen.
Kindchen, laßt mal ruhig angehen. Weniger Mutmaßungen, was bei "echten" Projekten wäre. Weniger Pseudo-Beweise, daß jemand gewinnt, weil er "objektorientierter" oder "generischer" ist. Es ist ja nicht klar, daß solche Konzepte alleinseligmachend sind.
-
Steffo schrieb:
cooky451 schrieb:
Steffo: Du hast gerade *etwas* gefailt, da std::cin und std::cout Objekte sind, aber mach dir nichts draus.
Pah, das ist doch nur ein Beweis dafür wie verzwickt C++ ist. Ein Objekt ohne new? Wie soll ich das erkennen? Ich dachte std ist schlicht der Namespace.
Das ist auch korrekt, std:: ist der Namespace. Allerdings sind cin und cout Objekte, die in diesem Namespace liegen. Die Operatoren << und >> sind für die Klassen der Objekte überladen.
-
@volkard: Würde ich kämpfen, dann wäre ich aggressiv
Aber ich kann doch Java.
-
314159265358979 schrieb:
Aber ich kann doch Java.
In der Tat. Mein Fehler. Ich hatte den Thread nicht gründlich genug verfolgt. Ich weiß, daß Du C++ nicht kannst. Ich war immer davon ausgegangen, daß Du mit C++ zu programmieren angefangen hattest. Ich editiere.
-
Naja, mit Java habe ich immerhin schon das eine oder andere Projekt hinbekommen. Aber das ist ja auch nicht besonders schwer
-
314159265358979 schrieb:
@volkard: Würde ich kämpfen, dann wäre ich aggressiv
Auch das nahm ich voreilig an, weil ich gewohnt bin, daß Du sonst fürchterlich rumpöbelst.
Es ist hier wohl nicht der Fall. Ich entschuldige mich nicht (ich doch nicht).
Ich nehme auch das zurück.
Seltsam…
-
Du bist der erste Mensch, den ich sehe, der das …-Zeichen verwendet
-
Wie? Hier ist Ende? Kein Flamewar? Wann geht es weiter? Ich habe doch schon die Chipstüte aufgemacht.
Alles muss man selber machen. Also los: Java ist doof!
-
314159265358979 schrieb:
Naja, mit Java habe ich immerhin schon das eine oder andere Projekt hinbekommen. Aber das ist ja auch nicht besonders schwer
So wie ich das sehe, bashst du Java nur. Aber das ist ja auch nicht besonders schwer
-
Irgendwie habe ich gerade das verlangen rumzuspammen
π: Dann hast du noch nichts von mir gelesen (seit ich Neo kann, also seit etwa eineinviertel Jahren, verwende ich nur noch dieses (und π habe ich auch direkt eingegeben))
Naja, ich werd wohl mal ins Bett gehen, ist besser so, denke ich. Nacht.
-
pi_trottel schrieb:
314159265358979 schrieb:
Naja, mit Java habe ich immerhin schon das eine oder andere Projekt hinbekommen. Aber das ist ja auch nicht besonders schwer
So wie ich das sehe, bashst du Java nur. Aber das ist ja auch nicht besonders schwer
Du siehst es also als Argument gegen eine Sprache, wenn man mit ihr leicht Projekte realisieren kann?
-
314159265358979 schrieb:
Steffo schrieb:
Wenn du sauber programmieren lernen willst, dann nimm Java.
Eher umgekehrt. Klassen als Namespaces zu missbrauchen ist nicht unbedingt sauber.
Das sind nur Kleinigkeiten. Im allgemeinen schreiben C++ler einfach viel zu komplizierten Code und oft fehlt auch das Verständnis für saubere Architektur, Module und Schnittstellen. Java bietet viel mehr fertige Frameworks an, die einen zu einigermaßen sauberer Architektur zwingen. Java ist halt aber auch so einfach, dass auch schlechtere Programmierer damit arbeiten können, was dann auch oft zu hässlichem Code führt. C++ Programmierer sind meistens besser bzw. könnten es sein, machen aber oft alles viel zu kompliziert, weil sie meinen, dass sie klever wären, wenn sie komplizierten Code schreiben und verstehen können, dabei ist es viel schwerer, Code zu schreiben der wirklich effizient und einfach lesbar ist.
Das sagt sogar einer der ober C++ Fanboys:
http://www.c-plusplus.net/forum/p2137628#2137628volkard schrieb:
Ich hatte vermutet, Jave würde abkacken. Das ist nicht der Fall. 100% mehr ist nichts. Diese langsamen gefühlten Java-Oberflächen haben weit mehr als 1000%. Also daran lag es wohl nicht. Aber am Code liegt es auch nicht, mag ich meinen. Was ich da so gelesen habe, war einfach, zielstrebig, offensichtlich richtig, elegant und bescheiden, offensichtlich schnell. Ich würde mir wünschen, C++-Programmierer würden so gut coden.
-
guten morgen.
SeppJ schrieb:
Dann bekommst du statt einseitiger Meinungen nun einen Flamewar zwischen den Java- und den C++-Jüngern.
das hatte ich nicht bedacht....
cooky451 schrieb:
java_oder_c++ schrieb:
-sicherer
Na ja, das müsste man dann etwas weiter spezifizieren, so allgemein kann man das auch nicht sagen.
man kann weniger oder nur schwerer grundlegende fehler machen/ignorieren. bsp: überläufe von zahlen, mit pointern ins nirgendwo zeigen und zugreifen.
314159265358979 schrieb:
Es gibt viele Leute, die sich C++-Programmierer nennen, aber auf dem Stand vor 20 Jahren sind. Modernes C++ ist anders.
kannst du mir bitte ein beispiel für sauberen/neuen c++-code geben? (damit ich weis, wie sowas aussehen soll. ich habe bisher die ungerische notation gesehen, die aber etwas umständlich ist und aus meiner sicht nicht immer sinn macht.
(bsp: eine klasse mit public membervariablen, die alle mit "m_" anfangen.)und generell: was sollte man beachten, um sauberen code zu schreiben?
314159265358979 schrieb:
Steffo schrieb:
unterstützt zwar Objektorientierung, aber die Bibliotheken sind es nicht wirklich und es ist überaus komplex
Von welchen Bibliotheken sprichst du?
ich weis zwar nicht, ob der das meinte, aber ich habe mir mal den code aus standartheadern angeschaut und etwas länger gebraucht, um etwas zu verstehen....
dauernd wird auf irgendein anderes template verwiesen und am ende ist noch nicht unbedingt alles klar. (kann natürlich auch an meinem mangelnden wissen liegen.)Steffo schrieb:
cin<< oder vielleicht doch cin>> oder <cin>???
...
Wieder popliges Beispiel aus der IO-Bibliothek: cout>>, oder cout<< oder côut>das ist finde ich keinerlei problem. das sind doch einfach standartmäßig initialisierte objekte und << oder >> sind operatoren. ich finde das sogar besser/angenehmer als "System.out.println();".
Steffo schrieb:
Pah, das ist doch nur ein Beweis dafür wie verzwickt C++ ist. Ein Objekt ohne new? Wie soll ich das erkennen? Ich dachte std ist schlicht der Namespace.
ist System.out nicht auch ein objekt, dass (genau wie cout) die standartausgabe repräsentiert?
außerdem wir (soweit ich weis) in c++ mit new dynamisch speicher angefordert, der auch wieder manuell freigegeben werden muss.(das ist natürlich ein risiko).
Steffo schrieb:
“Ich würde Klassen [-Vererbung] weglassen.” - James Gosling, Principal Scientist bei Sun Microsystems, 2001 auf die Frage, was er anders machen würde, wenn er Java noch einmal zu entwerfen hätte.
ist vererbung nich eine grundlage des objektorientierten paradigmas?
314159265358979 schrieb:
Steffo schrieb:
Der Name AltLAST impliziert ja schon, dass ausschließlich schlechtes gemeint ist.
Na dann zeig mir was du meinst.
ich glaube er meint sowas: memchr, memcpy, ldiv oder viele der c[irgendwas] header.
also momentan habe ich folgenden eindruck:
java schränkt ein , zwingt aber zu saubererem code bzw es ist einfacher sauberen code zu schreiben und ist langsamer.c++ schränkt nicht ein, ist schneller, lässt auch zu, dass man schlechteren und unsicheren code schreibt und es ist schwerer guten und schnellen code zu schreiben.
kann mir bitte jemand schreiben, was zeichen für einen sauberen code sind bzw was man dafür beachten muss.
-
Würde ich nicht unbedingt sagen. Java gibt es nur für Systeme, für die es auch eine VM gibt. C++ funktioniert überall, wo ein C++ Compiler vorhanden ist. Natürlich muss man neu kompilieren, aber solange man standardkonform programmiert, ist das völlig unproblematisch.
Gibts nicht noch einen C++-to-C Compiler? Dann würde es überall laufen.
Eigentlich schade dass zb der GCC soetwas nicht anbietet ...
-
das hier habe ich auch gerade gefunden:
https://www.gulp.de/kb/mk/chanpos/kaffeevitaminc.html
hiernach wird mehr in java als in c++ programiert.
allerdings vernachlässigen die, wie groß die projekte sind und das ganze ist auch schon etwas älter.hat jemand dazu mehr informationen oder eine aktuellere statistik?
-
Java ist in der Industrie recht beliebt da man den Zeit-/Personenaufwand recht gut einschätzen kann.
-
Ethon schrieb:
Java ist in der Industrie recht beliebt da man den Zeit-/Personenaufwand recht gut einschätzen kann.
Das ist ja wie bei den Schrauben und Nieten! Abgesehen davon, daß man Schraubenverbindungen gut lösen kann. Aber mal Fälle angenommen, wo man das gar nicht will, eine Brücke zum Bleistift. Der Niet ist natürlich kostengünstiger, eleganter, performanter und überhaupt. Und dennoch wurde er von den Schrauben verdrängt! Und warum? Nur, weil man Nieten nicht abschätzen kann. Die Qualität der Vebindung hängt viel zu stark von den Fertigkeiten des Niethammerschwingers ab. Aber mit dem Einzug motorischer Niehämmer sehe ich eine ganz große Rennesaince der Nietverbindungen vor uns.
-
Ethon schrieb:
Gibts nicht noch einen C++-to-C Compiler? Dann würde es überall laufen.
Eigentlich schade dass zb der GCC soetwas nicht anbietet ...Wenn du einen C-Compiler hast, dann hast du auch einen C++-Compiler, denn du kannst den C++-Compiler mit dem C-Compiler bauen.
-
java_oder_c++ schrieb:
Steffo schrieb:
“Ich würde Klassen [-Vererbung] weglassen.” - James Gosling, Principal Scientist bei Sun Microsystems, 2001 auf die Frage, was er anders machen würde, wenn er Java noch einmal zu entwerfen hätte.
ist vererbung nich eine grundlage des objektorientierten paradigmas?
Wenn du gedankenlos Veerbung einsetzt, wirst du im Laufe des Projektes gegenseitige Abhängigkeiten haben, die den Gesamtüberblick und die Wartung erschweren (außerdem kommt noch Redundanz hinzu, d. h. in Subtypen werden Dinge gemacht, die schlicht unnötig sind).
Wenn du z. B. Klassen hast, die auf folgende Weise erben: D-->C-->B-->A, kannst du dir sicherlich vorstellen, dass bei einem D-Objekt jede Menge unnötige Sachen ausgeführt werden und möglicherweise auch Dinge, die die Datenintegrität gefährden, weil sich Code von den Oberklassen und Code von D gegenseitig in die Quere kommen.
Ich würde nicht soweit gehen und Veerbung komplett verbieten, aber Klassen müssen ausdrücklich für Vererbung entworfen sein, d. h. man muss sich gründlich Gedanken machen, wie man eine Oberklasse aufbaut. Klassen, die nicht für Vererbung konzipiert wurden, sollten man in Java grundsätzlich mit final implementieren - damit verbietet man die Vererbung bei der jeweiligen Klasse. Ein gutes Beispiel für einen gelungenen Vererbungsentwurf, ist die toString-Methode in Java. Bei equals wirds schon kritischer. Weshalb? Weil equals standardmäßig erst mal nur die Identität zweier Objekte vergleicht (a == b). Das musst du als Programmierer wissen! Wenn du dann allerdings die equals-Methode überschreibst, solltest du dann auch die hashCode-Methode überschreiben, weil equals diese Methode benutzt (wertgleiche Objekte sollten gleiche HashCodes haben), dessen Implementierung bei verschiedenen Klassen evtl. anders aussieht. Würde man equals nicht immer automatisch miterben, dann könnte erst gar nicht die Illusion entstehen, dass die equals-Methode automatisch zwei Objekte auf Wertgleichheit prüft, weil man die equals-Methode z. B. über einen Interface einbinden und selbst implementieren müsste.Was sind also die Alternativen zur Vererbung? Composition und Interfaces!
Liebe Grüße
Steffo
-
zu mir: Ich habe, bevor ich C++ lernte, 7 Jahre hauptsächlich nur Java programmiert. Jetzt im Moment verwende ich hauptsächlich C++ und auch ein bisschen Matlab.
java_oder_c++ schrieb:
java:
-plattformunabhängig(er)Das muss man differenzieren. Der Ansatz bei Java ist "compile once, run everywhere", wobei natürlich eine lauffähige VM vorhanden sein muss. Diese lauffähige VM ist aber (typischerweise) in C++ geschrieben. Und ich denke nicht, dass die Hersteller für jedes Betriebssystem und für jede Architektur eine komplett neue VM bauen. Die meisten Teile der VM werden schon Maschinen- und Betriebssystem-neutral geschrieben sein. Wenn man sich an das hält, was der C++ Standard sagt und nur "portable Bibliotheken" verwendet, kann man in C++ Programme erzeugen, die sich nahezu überall kompilieren lassen, also "compile everywhere". Was sagt Dir das bzgl Plattformunabhängigkeit? Böse Zungen behaupten sogar, dass Java nur auf einer Plattform läuft: auf einer virtual machine.
java_oder_c++ schrieb:
-liefert mehr basisfunktionen mit(threads, erweiterte for-schleife, sockets, uvm.)
Das stimmt. Die C++ Standardbibliothek fällt recht mager aus. So richtig schlecht finde ich das jetzt aber auch nicht. Die wichtigsten Dinge werden immerhin nachgebessert. C++2011 hat z.B. brauchbare threading-Funktionalitäten. Sonst wird man oft noch bei Boost, Qt und Poco fündig.
java_oder_c++ schrieb:
c++
-hat pointer (braucht man die/ kann man die nicht umgehen)Java hat die auch. Die nennen das nur "Referenzen" und alle Variablen eines "Klassentyps" sind automatisch Referenzen, ohne dass man dies extra kennzeichnen müsste wie z.B. in C++ mit dem Stern.
java_oder_c++ schrieb:
-hat mehrfachvererbung (mir fällt kein sinnvolles beispiel ein)
Musst Du ja nicht nutzen. Ich tu's auch recht selten. Und wenn, dann ist das meistens vergleichbar mit Java Interfaces.
java_oder_c++ schrieb:
-ist schneller( habe diesen verleich gefunden:"ein gutes c++-program ist doppelt so schnell wie ein extrem gutes java-program, wenn beide programme das selbe machen".
Ich habe da neulich von einem Trade-Off gelesen. Man kann theoretisch einen Garbage-Collector so tunen, dass er auf Kosten der Geschwindigkeit relativ speichersparend arbeitet. Andersherum kann man den GC auf Geschwindigkeit optimieren, und muss in Kauf nehmen, dass der GC nicht sofort den Müll einsammelt, sondern etwas wartet und nur ein bisschen aufräumt hier und da. Ich finde, das leuchtet auch irgendwie ein. Und sonst gibt es viele Dinge, die in C++ undefiniertes Verhalten hervorrufen (und daher keine Laufzeitchecks oder extra Metadaten benötigen) wohingegen Java ein Verhalten definiert und typischerweise dadurch bremst (NullPointerException, ArrayIndexOutOfBoundsException, etc). Auch wird man in Java gezwungen, Objekte im Freispeicher anzulegen. Man kann nichtmal die "besteht-aus"-Beziehung zwischen Objekten richtig abbilden, da Du in Java neben int, double, etc nur Referenzen als Datenelement in einer Klasse verwenden kannst. Das hat den Nachteil, dass man keinen großen Einfluss auf das Speicherlayout hat, was heutzutage wichtiger ist als früher, wenn es um Performanz geht (effektive Nutzung des Speichercaches).
java_oder_c++ schrieb:
habe aber auch die aussage gefunden, dass c++ und javaprogramme inzwischen gleich schnell seien)
Solche Programme gibt es vielleicht. Aber (a) machen die dann auch etwas nützliches? und (b) sind sie repräsentativ?
java_oder_c++ schrieb:
-braucht weniger speicher/leistung/verwaltungsarbeit, da keine javavm laufen muss. (merkt man das heute noch, oder müsste man, um das zu merken, dafür sehr guten code schreiben?)
Das kommt ganz auf die Anwendung drauf an. Wenn Du Dir den Laufzeit/Speicher-Overhead erlauben kannst, kannst Du natürlich Java verwenden.
java_oder_c++ schrieb:
meine fragen neben den in klammern stehenden sind:
-was kann ich mit c++ machen, das ich nicht, oder nur wesentlich schlechter, mit java machen kann?Alles, wo es auf Performanz (hohe Geschwindigkeit, niedriger Speicherverbrauch) ankommt.
Cheers!
kk