Ist C++ wirklich so schlecht?
-
Original erstellt von HumeSikkins:
[quote] Dafür ist Java in der Productivity zich mal schneller als C++.**
Oh ja. Besonders seit J2EE nebst Enterprise Java-Beans. Damit ist man sicher ganz schnell produktiv. Dürfte sich nur um Jahre handeln :D**[/QUOTE]Dauert ja bei C++ auch Jahre (mal MFC-Geklicke ausgenommen)
-
Hallo Freunde,
steht hier irgendwo in meinen Beitrag "C++ ist geiler als Java"? Oder "Mit C++ ist man lecker produktiver"? Nein! Zur Hölle nochmal! Habe ich mit keinem Wort behauptet.Mein leicht ironischer Beitrag bezog sich eigentlich nur auf die Diskrepanz zwischen Wunschdenken-Java-ist-einfach-und-man-ist-schnell-produktiv und zähen riesen Klumpen wie J2EE mit Enterprise Java-Beans.
Ich habe überhaupt keinen Vergleich angestellt. Der kam von Lars und Lars != HumeSikkins. Erkennt man schon an der Anzahl der Buchstaben.
Achja, aber wo wir gerade bei vergleichen sind. Wo ist denn (aus Sicht der Produktivität) der Unterschied zwischen einem fetten C++ + CORBA-Mega-Implementation und Java + J2EE + Enterprise Java-Beans?
Meine Antwort ist: Gar keiner. Alles mist. Ich sag's nur schon mal vorher. Nur damit nachher nicht wieder einer kommt und mir irgendwas andichtet.
-
IMHO ist ein Produktivitätsunterschied allein schon durch die unterschiedliche Komplexität der Sprachen gegeben. Bis man nen C++-Programmierer ausgebildet hat, hat der Java-Programmierer das Programm längst fertiggestellt. :p
-
Hallo,
genau. Belassen wir es doch einfach dabei.
-
Original erstellt von HumeSikkins:
Belassen wir es doch einfach dabei.Och nö! ...wo ich doch gerade folgendes PDF gefunden habe: http://www.spirus.com.au/papersAndTalks/javaVsC++.pdf
Aus der Zusammenfassung:
The ration of C++ bugs-per-kLoc to Java bugs-per-kLoc is statistically proven with a confidence level of 95% to be in the range 2.5 to 3.5. C++ also generates between 15% and 50% more defects per kLoc. Neither language appears better for defects per hour, but C++ produces between 200% and 300% more bugs per hour. Java is also between 30% and 200% more productive, in terms of lines of code per minute. It probably takes twice as long to fix each C++ bug, but this is not statistically proven due to the effect of differing compiler technology.
The experiment used one programmer, with one C++ project and one Java project, each of 3 months duration. The study assumes that the applications are representative of all applications. The programmer had seven years of C++ experience, but was only learning Java. Therefore the result can only safely be extrapolated to experienced C++ programmers who are learning Java. However, given that the results favour Java, and we assume that experienced programmers are better than inexperienced programmers, then the results would favour Java even more markedly if the programmer had equal experience in both Java and C++.
- kLoc steht wohl für "tausend Code-Zeilen".
- Unter einem "defect" wird zum Beispiel ein Syntaxfehler verstanden.
- Unter einem "bug" wird ein Fehler verstanden, der erst beim Testen oder später gefunden wird.
[ Dieser Beitrag wurde am 20.01.2003 um 03:58 Uhr von Gregor editiert. ]
-
Hallo,
im Zuge der Lehrveranstaltung "Experimentelle Softwaretechnik" habe ich letztes Semester ein Buch zu selbigem Thema gelesen.
Dort gab es auch ein Experiment, dass C eine höhere Produktivität und eine geringere Fehlerrate als C++ (und anderen High-Level-Sprachen) bescheinigte. Statistisch betrachtet hielt die Aussage allerdings nicht wirklich.Wie sieht das bei deinem Text aus? Steht dazu in dem Text irgendwas? Hast du mal nachgerechnet? Mir scheint ein Programmierer etwas wenig zu sein.
-
Ich meinte, dass sowas in solchem C++ Code (der übrigens leider plattformabhängig ist, unter Linux (POSIX?) gibts shared objects, unter Win32 DLLs) unnötig ist. Wobei man aus Gründen der Portabilität zu C Funktionen greifen wird. Man machts ganz ganz einfach so: In dem Verzeichnis alle DLLs (.so s) anschauen und dann die Funktion laden. Fertig. Nix RTTI, nix Reflection. Good ol' C.
Um die Funktionen zu laden und verwenden zu können, musst Du wissen, wie sie heißen und v.a. welche Parameter sie bekommen. Mit Reflexion kannst Du ne Klasse fragen, welche Funktionen etc. sie denn hat. Damit könnte man z.B. ein generisches Beliegibge-Klassen-Test-Programm schreiben oder man kanns für die Serialisierung aller möglicher Klassen einsetzen ...
Klar im endeffekt muss man trotzdem immer irgendwie was über die Klasse wissen, aber mit Reflexions kann man doch einige Sachen machen, bei denen man sich ohne einen abbrechen würde (bzw. was nicht praktikabel ist).
Reflexion sind so ne Art Laufzeit-Templates und die c++ template-Zauberer könnten da wohl ne ganze Menge rausholen - das würde super zur Sprache passen.
@hume
imho lässt sich mit anderen Sprachen als c++ sehr viel schneller sehr produktiv arbeiten als mit c++. Mit c++ brauchst Du erstmal riesige Erfahrung und selbst wenn Du die halbwegs hast, hast Du so viele Möglichkeiten, was zu machen, dass sich da super tagelang mit rumspielen lässt, Du kannst tolle, elegante Software-Designs machen und X Techniken einsetzen, die andere Sprachen nicht unterstützen. ABER: Das ist schön für den Entwickler (=ich), aber wenn ich Projektleiter wäre, ich wär mir nicht so sicher, ob ich an c++ festhalten würde (außer, weil ichs halt geil find). V.a. in so ner Firma wie der unseren, wo die Entwickler nicht so aus der Informatik-Freak-Ecke kommen sondern ???-Ingenieure etc. sind, die die Programmiersprache halt als Werkzeug sehn. Und was ich da manchmal beim einen oder anderen für c++-Code sehe So was kann man in ner anderen Sprache nicht so zusammenmurksen (und um ehrlich zu sein, bei mir auch )Wenn man dann aber mal der Superfreak ist, kann man in C++ bestimmt super Designs machen, die sich auch kurz, mittel und v.a. langfristig auszahlen (soweit der, der Dein Projekt irgendwann mal weiterpflegt auch ein Super-Freak ist).
[ Dieser Beitrag wurde am 20.01.2003 um 11:09 Uhr von kartoffelsack editiert. ]
-
Original erstellt von HumeSikkins:
**
Wie sieht das bei deinem Text aus? Steht dazu in dem Text irgendwas? Hast du mal nachgerechnet? Mir scheint ein Programmierer etwas wenig zu sein.**Ja! In der Tat wird der Gültigkeitsbereich der Studie hier stark eingeschränkt. Unter anderem auf Programmierer mit viel C++ Erfahrung aber nur wenig Erfahrung mit Java. Auch ansonsten ist das statistisch natürlich nicht so stark abgesichert. Allerdings heißt das natürlich nicht, dass es ein vollkommen falsches Bild zeigt. Ich denke, die Tendenz ist klar. Oder hast du schonmal eine Studie gesehen, in der behauptet wird, dass C++ produktiver als irgendeine andere Hochsprache ist? Ich nicht, ich würde aber gerne eine sehen.
-
Original erstellt von kartoffelsack:
**
V.a. in so ner Firma wie der unseren, wo die Entwickler nicht so aus der Informatik-Freak-Ecke kommen sondern ???-Ingenieure etc. sind, die die Programmiersprache halt als Werkzeug sehn. Und was ich da manchmal beim einen oder anderen für c++-Code sehe So was kann man in ner anderen Sprache nicht so zusammenmurksen (und um ehrlich zu sein, bei mir auch )
**in welcher firma arbeitest du nicht das ich ausversehen mal software von euch kaufe. *grinz*
das simmt schon mir anderen programmiersprachen kannst du schon schneller ne softwar entwickeln, stellt sich nur die frage ob die dann wirklich besser und schlneller ist. c/c++ erreicht fast assembler nahe geschwindigkeit. bei diesen quick und dirty programmiersprachen baut dann halt der compieler die fehler ein, is dann halt en bissel schwieriger die auszubessern man muss dann halt drum rum programmieren.
-
Original erstellt von kartoffelsack:
@hume
imho lässt sich mit anderen Sprachen als c++ sehr viel schneller sehr produktiv arbeiten als mit c++. Mit c++ brauchst Du erstmal riesige Erfahrung und selbst wenn Du die halbwegs hast, hast Du so viele Möglichkeiten, was zu machen, dass sich da super tagelang mit rumspielen lässt,Du hast glaub den falschen Beruf gewählt ... Als Metzger wärs besser aufgehoben da wärs egal ob du nen billiges oder nen teures messer benutzt ...
Aber Selbst da wärs wichtig wie man nen Steak schneidet und nicht wie schnell ...
-
Original erstellt von Matt:
**
das simmt schon mir anderen programmiersprachen kannst du schon schneller ne softwar entwickeln, stellt sich nur die frage ob die dann wirklich besser und schlneller ist. c/c++ erreicht fast assembler nahe geschwindigkeit. bei diesen quick und dirty programmiersprachen baut dann halt der compieler die fehler ein, is dann halt en bissel schwieriger die auszubessern man muss dann halt drum rum programmieren.**1. C++ Programme laufen letztendlich schneller ab. Keine Frage. Ein paar Beiträge weiter oben habe ich eine Tabelle gezeigt, die C++-Geschwindigkeit mit Java-Geschwindigkeit vergleicht.
2. Was verstehst du unter einer "quick und dirty" Programmiersprache? Egal, was du darunter verstehst: Vom Namen her kann ich dir schon sagen, dass weder Java, noch C# soetwas ist.
3. Der Compiler soll Fehler einbauen? Huuuhhhh... Ist mir beim Java-Compiler noch nicht aufgefallen. Ich weiß nur, dass die meisten C++-Compiler nicht standardkonform sind, aber das hat ja eigentlich hier nichts zu suchen.
4. C++-Programme werden in der Regel schneller als Assembler-Programme ausgeführt, weil die Compiler besser optimieren können, als es der Mensch kann.
5. Was ist bessere Software? Java-Programme werden im Vergleich zu C++-Programmen zum Beispiel besser wartbar sein, da Java nicht so komplex ist. Andererseits ist Java leichter zu erlernen, weshalb viel mehr Leute in Java als in C++ programmieren, die einfach nicht programmieren können. Das ist natürlich automatisch mit einem minderwertigen Programm verbunden.
6. Zum Ausbessern der Fehler sagt die Studie von oben ganz klar, dass es deutlich länger dauert, C++-Fehler zu beheben, als Java-Fehler zu beheben.
-
Original erstellt von 1ntrud0r:
**Du hast glaub den falschen Beruf gewählt ... Als Metzger wärs besser aufgehoben da wärs egal ob du nen billiges oder nen teures messer benutzt ...Aber Selbst da wärs wichtig wie man nen Steak schneidet und nicht wie schnell ... **
Es kommt durchaus darauf an, wie schnell man etwas fertig hat. Wenn man ein Programm in Java doppelt so schnell, wie mit C++ schreiben kann, dann heißt das, dass das C++-Programm doppelt so viel kostet. IMHO ist das ein sehr wichtiger Punkt, wenn man als Firma konkurenzfähig sein möchte. Sicher: Wenn man die Zeit hat und das Geld vollkommen egal ist, dann ist das nicht interessant. Wer als Hobby programmiert, kann das somit vollkommen vernachlässigen.
[ Dieser Beitrag wurde am 20.01.2003 um 14:52 Uhr von Gregor editiert. ]
-
Unpassender Vergleich. Du implizierst, dass ein C++ Programm automatisch besser ist als ein äquivalentes Java-Programm*. Dabei ist es lediglich schneller im Ablauf und benötigt wahrscheinlich weniger Speicher**. Über Korrektheit ging es in dem Thread noch nicht, und ich fürchte, da scheidet C++ ganz mieserabel ab (natürlich noch unterboten von C).
Obwohl es zich Techniken gibt, um Speicherlecks, ungültige Pointer, falsche Typumwandlungen und dergleichen zu vermeiden, gibt es doch immer noch eine riesige Zahl von Dingen, die im Standard lapidar als undefined behavior bezeichnet werden, die nicht von solchen Profi-Techniken erfaßt werden (würden, wenn der Durchschnittsprogrammierer sie auch kennen und beherrschen würde).
Während Java also vielleicht ein langsamer Steakschneideroboter ist, erinnert C++ eher an eine Hochleistungs-Wurfkättensäge. Wie immer soll das keine pro-Java-Argumentation sein, nur mal die Verhältnisse geraderücken. Es gibt wahrscheinlich auch massenweise schlampige Java-Programme, die bei jeder sich bietenden Gelegenheit NullPointerExceptions schmeißen, aber das berührt die Argumentation nur minimal.
* bei einem durchschnittlichen Programmierer
** bei einer üblichen Implementation
-
welche sprache ist besser? c c++, java, perl ...
das ist doch alles unsinn. die aufgabenstellung und das wissen des devs legt die sprache fest. einen hw treiber wuerde ich nicht unbedingt versuchen, in java zu realisieren. ich bin eigentlich c fanatiker, nutze aber manchmal auch andere sprachen, weil es einfach schneller geht.ps: kann frau ueberhaupt eine sprache benutzen, in der es keine pointer gibt?
-
hmm also ich möcht ma sagen das ich mit .. meinem post keine Hochsprachen gemeint hab sondern ... eher so VB und C# zeug ... das radioaktive Fleisch .. unter den Steaks
-
@ Gregor
ich hab in meinem beitrag kein wort über java verloren. da java genau so wie c/c++ zu den hochsprachen zählt meinte ich das auch nicht mit quick und dirty. viel eher meinte ich so teile wie FoxPro oder VB und der gleichen. die zeit die ich beim programmieren gewinne verliere ich wieder bei der fehlerbehebung beim kunden. ausserdem sind diese sprachen ja wohl um welten langsamer als c/c++ und java. wer gut c++ programmieren kann schaft in der gleichen zeit viel schnellere und stabielere programme.
@ Bashar
was is ne Hochleistungs-Wurfkättensäge ???
[ Dieser Beitrag wurde am 20.01.2003 um 15:49 Uhr von Matt editiert. ]
-
Original erstellt von Matt:
**
ich hab in meinem beitrag kein wort über java verloren. da java genau so wie c/c++ zu den hochsprachen zählt meinte ich das auch nicht mit quick und dirty. viel eher meinte ich so teile wie FoxPro oder VB und der gleichen. die zeit die ich beim programmieren gewinne verliere ich wieder bei der fehlerbehebung beim kunden. ausserdem sind diese sprachen ja wohl um welten langsamer als c/c++ und java. wer gut c++ programmieren kann schaft in der gleichen zeit viel schnellere und stabielere programme.
**OK! Da habe ich dich wohl falsch verstanden! Ich sage dann einfach mal: Sorry! Ich kenne FoxPro und VB eigentlich garnicht, deshalb kann ich dazu nichts sagen!
-
Du hast glaub den falschen Beruf gewählt ... Als Metzger wärs besser aufgehoben da wärs egal ob du nen billiges oder nen teures messer benutzt ...
Ich könnt mich jetzt ärgern und fragen, ob Du vielleicht die falsche Grammatik für Deinen Beitrag gewählt hast. Aber lassen wir das...
Tatsache ist nunmal dass ich Entwickler kenne - und ich kenne ein paar Leute aus ein paar recht erfolgreichen kleinen Software-Firmen - die einfach nicht die krassen c++-Gurus sind, und die haben gewisse Probleme mit c++. Damit meine ich nicht, dass die Programme nicht laufen, sondern damit meine ich, dass eine z.T. unansehliche Mischung aus C, C++ aus Vorstandard-Zeiten, iso-C++ und c++-Erweiterungen des jeweiligen Compilerherstellers ist. Und ehrlich gesagt glaube ich, dass das in vielen Firmen so ist.
Und was mich angeht: mir gefällt c++ und deswegen verbringe ich manchmal viel Zeit auszuprobieren, wie man etwas elegant lösen kann anstatt es schnell so zu machen, dass es funktioniert. Die Erfahrung, die ich damit sammle bringt mir in diesem Projekt aber oft nichts, vielleicht im nächsten. Tatsache ist aber, dass ich dieses Projekt ohne die Rumprobiererei evtl. schneller hätte machen können. Manchmal mache ich aber auch Sachen nicht elegant sondern so, dass sie schnell laufen und wenn ich mir den Code dann drei Wochen später wieder angucke, stehn mir die Haare zu berge. Und wer als Entwickler nach Fertigstellung seines unter Zeitdruck entstandenen Projekts sagt, dass die Architektur seinen Programms perfekt und er rundherum zufrieden damit ist, ist imho entweder ein Genie, ein Guru mit einigen Jährchen mehr Erfahrung als ich, nicht ehrlich zu sich selber oder er hat wirklich keine Ahnung vom Software-Design und nichts dazugelern.Aber Selbst da wärs wichtig wie man nen Steak schneidet und nicht wie schnell ...
Du musst tolle Projektleiter haben. Meinen ist es nämlich überhaupt nicht unwichtig, wie schnell das Steak geschnitten ist bzw. wie schnell das Projekt fertig ist.
in welcher firma arbeitest du nicht das ich ausversehen mal software von euch kaufe. *grinz*
Was sagst Du jetzt, wenn ich MS sage?
Is gelogen, aber keine Sorge, die Wahrscheinlichkeit, dass Du etwas von uns kaufst geht gegen Null
[ Dieser Beitrag wurde am 20.01.2003 um 16:01 Uhr von kartoffelsack editiert. ]
-
Original erstellt von Bashar:
**Über Korrektheit ging es in dem Thread noch nicht, und ich fürchte, da scheidet C++ ganz mieserabel ab (natürlich noch unterboten von C).
**C++ ist hier schlechter als C, weil es viel zu komplex und undurchsichtig ist. Man kann quasi die Korrektheit eines C++-Programmes nicht beweisen.
Es gibt eine Norm (IEC 1508) zum Thema sicherheitskritische Software und da wird C 'sicherer' als C++ eingestuft. Natürlich sind beide Sprachen im Endeffekt für diesen Anwendungsbereich untauglich. Im Zweifel darf man SPARK nutzen.
-
Original erstellt von champus:
**welche sprache ist besser? c c++, java, perl ...
das ist doch alles unsinn. die aufgabenstellung und das wissen des devs legt die sprache fest. einen hw treiber wuerde ich nicht unbedingt versuchen, in java zu realisieren. ich bin eigentlich c fanatiker, nutze aber manchmal auch andere sprachen, weil es einfach schneller geht.
**Hat hier einer etwas von generell besser oder so gesagt? Ich glaube nicht. Wenn man Sprachen vergleicht, dann geht es doch genau darum, herauszufinden, was wofür warum besser geeignet ist. Es geht nicht um eine generelle Entscheidung für oder gegen eine Sprache.
Ich habe den Eindruck, dass C/C++ sehr gut ist, wenn es um systemnahe Programmierung geht, oder wenn es wirklich auf die Performance ankommt. VB wird zum Beispiel gut sein (nachdem, was man so hört), wenn man auf die Schnelle eine GUI braucht, aber nicht viel dahinter. Java sehe ich bei anderen Dingen im Vorteil und für C# sehe ich kein Anwendungsgebiet, in dem es sich deutlich von allen anderen Sprachen zum Positiven hin abhebt.