Ist C++ wirklich so schlecht?



  • 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.



  • Original erstellt von kartoffelsack:
    **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 [qb]kartoffelsack** editiert. ][/QB]

    gottseidank verwende ich linux. 😃
    nein mal im ernst das sollte nur en kleiner scherz sein.
    es hörte sich in deinem beitrag nur so an als seien deine kolegen nicht so qualifiziert, aber da ihr ja nich MS seit kann man ja noch hoffen. *war wieder en scherz*

    [ Dieser Beitrag wurde am 20.01.2003 um 16:21 Uhr von Matt editiert. ]



  • Original erstellt von Gregor:
    C# sehe ich kein Anwendungsgebiet, in dem es sich deutlich von allen anderen Sprachen zum Positiven hin abhebt.

    ich sehe bei C# kein Anwendungsgebiet, wo es vor dem Erscheinungsdatum von C# keine geeignete Sprache gab die das schon konnte.



  • Original erstellt von Daniel E.:
    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.

    C an sich ist weder komplex noch undurchsichtig: Die damit geschriebenen Programme sind es. Zumindest wenn sie eine gewisse Komplexität haben.

    Diese Norm scheint von Software auszugehen, die streng nach Schema F, erst detaillierte Spezifikation auf Papier bevor der Rechner angeschaltet wird, geschrieben wird, auszugehen. Mag im sicherheitskritischen Bereich OK sein. Da nützt einem dann auch die ganze Abstraktionsfähigkeit einer Sprache nicht mehr viel, da die Denkarbeit bereits erledigt wurde. Also ist C so gut wie alles andere.



  • Hallo,
    also ich halte es für ein riesen Grücht (oder einen Marketing-Trick), dass Java Programme per se leichter zu warten sind oder das Java leicht zu erlenen ist.

    Wer einmal so richtig miese Java-Programme gesehen hat, wird sicher zugeben, dass auch Java erlernt werden muss und das auch dies nicht über Nacht geschieht.

    Das C++ noch schwerer ist würde ich allerdings niemals bezweifeln. Allerdings wundere ich mich schon ein bischen. Wenn C++ wirklich so scheiße wäre, wie ihr teilweise behauptet, dann frage ich mich warum es immer noch für *neue* Projekte eingesetzt wird. Hinter C++ steckt keine Riesenfirma die irgendwas pusht und ich habe auch noch nie einen "C++ Werbespot" gesehen.

    Zum Thema Produktivität. Was soll das eigentlich sein? Was genau will man messen?
    C. Jones hat mal ausführlich begründet (als Antwort auf den Artikel "No silver bullet" von F.P. Brooks), warum Qualität letztlich ein viel besserer Maß als Produktivität ist.

    Und im Punkto Qualität steht C++ in meinen Augen Java keinesfalls nach (auch wenn das vielleicht nur für C++ Experten gilt). Nur wenige Sprachen bieten soviele und so reichhaltige Ausdrucksmittel. Man muss halt nur wissen, wie man diese richtig einsetzt.



  • also ich halte es für ein riesen Grücht (oder einen Marketing-Trick), dass Java Programme per se leichter zu warten sind oder das Java leicht zu erlenen ist.

    1. Keiner hat gesagt, dass Java leicht zu erlernen ist. Es wurde nur gesagt, dass es deutlich leichter als C++ zu erlernen ist.

    2. Ich halte es nicht für ein Gerücht. Ich denke, dass das die geringere Komplexität impliziert.

    Wer einmal so richtig miese Java-Programme gesehen hat, wird sicher zugeben, dass auch Java erlernt werden muss und das auch dies nicht über Nacht geschieht.

    Ich habe noch kein richtig mieses Java-Programm gesehen (auch kein wirklich tolles), trotzdem gebe ich dir Recht, dass jemand, der nicht gelernt hat, zu programmieren, wohl nicht programmieren kann. Java hat (so hört man) sehr viel stärker mit Leuten zu kämpfen, die denken, sie könnten gut programmieren, als C++. Da Java leichter zu lernen ist, als C++, wird es stärker von Programmierern genutzt, die nicht gut programmieren können.

    dann frage ich mich warum es immer noch für *neue* Projekte eingesetzt wird.

    Das frage ich mich allerdings bei vielen Projekten auch. Es wundert mich etwas, dass du dir die Frage stellst und nicht die Antwort präsentierst. Ich denke, du gehörst hier zu den Leuten, die am meisten Ahnung von C++ haben. Da solltest du doch die Vorteile von C++ am ehesten kennen und begründen können, oder?

    Zum Thema Produktivität. Was soll das eigentlich sein? Was genau will man messen?
    C. Jones hat mal ausführlich begründet (als Antwort auf den Artikel "No silver bullet" von F.P. Brooks), warum Qualität letztlich ein viel besserer Maß als Produktivität ist.

    Ich sehe eher ein Problem, Qualität zu messen. Was soll das eigentlich sein und wie soll man das messen. In der Studie oben wird Produktivität in Codezeilen gemessen. Wenn C++-Programme deutlich kürzer als Java-Programme wären, dann würde es diw ganze Studie relativieren. Allerdings zweifele ich das doch ganz stark an und behaupte eher das Gegenteil. Da es sich bei der Studie nur um einen Programmierer gehandelt hat, ist anzunehmen, dass bei beiden Projekten eine ähnliche Qualität herauskam.

    Und im Punkto Qualität steht C++ in meinen Augen Java keinesfalls nach (auch wenn das vielleicht nur für C++ Experten gilt). Nur wenige Sprachen bieten soviele und so reichhaltige Ausdrucksmittel. Man muss halt nur wissen, wie man diese richtig einsetzt.

    1. Wer ist schon C++-Experte? Davon gibt es doch eher wenige, oder? Insofern deute ich deine Aussage als ein "Man kann auch mit C++ Qualität produzieren, auch wenn die meisten es wohl nicht schaffen!".

    2. Viele und reichhaltige Ausdrucksmittel implizieren IMHO viele verschiedene Fehler, die alle sehr unterschiedlich sein können. Keine Frage: Sie erlauben auch elegante Lösungen, die ohne diese Ausdrucksmöglichkeiten nicht zu Stande kommen würden.


Anmelden zum Antworten