Warum lassen C/C++ Compiler soviel Müll zu?



  • Basher schrieb:

    volkard schrieb:

    Aufpassen muß man in C noch viel mehr, habe ich mir sagen lassen.

    dann hat man dir quatsch erzählt. C ist schlichter als C++, daher gibt's da auch weniger mögliche fehlerquellen.
    🙂

    Komisch. Ada ist noch deutlich komplizierter als C++. Trotzdem macht man darin komischerweise meist weniger Fehler. 🙂



  • DStefan schrieb:

    Aber "Schlichtheit" als a priori Garantie für Fehlerarmut ist einfach dummes Zeug.

    Logisch.
    Siehe Brainfuck.

    "Auszug aus einem größeren Programm"
    >+++[->++++<]>[-<++++>]<[-<+>]<.[-]<
    


  • volkard schrieb:

    DStefan schrieb:

    Aber "Schlichtheit" als a priori Garantie für Fehlerarmut ist einfach dummes Zeug.

    Logisch.
    Siehe Brainfuck.

    "Auszug aus einem größeren Programm"
    >+++[->++++<]>[-<++++>]<[-<+>]<.[-]<
    

    Hübsch -- Wie der Name schon sagt 😉 😉



  • volkard schrieb:

    DStefan schrieb:

    Aber "Schlichtheit" als a priori Garantie für Fehlerarmut ist einfach dummes Zeug.

    Logisch.
    Siehe Brainfuck.

    "Auszug aus einem größeren Programm"
    >+++[->++++<]>[-<++++>]<[-<+>]<.[-]<
    

    Ob es Zufall ist, dass man mit der Brainfuck Syntax einen Fisch zeichnen kann?



  • Troll-Liebhaber schrieb:

    volkard schrieb:

    DStefan schrieb:

    Aber "Schlichtheit" als a priori Garantie für Fehlerarmut ist einfach dummes Zeug.

    Logisch.
    Siehe Brainfuck.

    "Auszug aus einem größeren Programm"
    >+++[->++++<]>[-<++++>]<[-<+>]<.[-]<
    

    Ob es Zufall ist, dass man mit der Brainfuck Syntax einen Fisch zeichnen kann?

    Kann man mit C auch.

    int O;
    
    O++<              // <-
                      //      warum lassen compiler so einen müll zu? 
    1;                // <-
    

    Aber der Name "C++" sieht sogar schon ein wenig wie ein Fisch aus. 💡



  • DStefan schrieb:

    Folgt aus einer "schlichteren" Programmiersprache wirklich, dass es weniger mögliche Fehlerquellen gibt, wenn man sie verwendet? Wohl kaum!

    aber ja. gerade C und C++ sind die besten beispiele dafür. weil C eine teilmenge von C++ ist, kannst du in C++ alle fehler machen, die auch in C möglich sind. umgekehrt aber nicht: du kannst in C keine C++ fehler machen.

    DStefan schrieb:

    Ich habe jahrelang fast ausschließlich in C programmiert, bevor ich mich C++ zugewendet habe. Und tatsächlich hatte ich die Gelegenheit, dasselbe Projekt zuerst in C und dann in C++ zu programmieren. Das C++-Projekt hat das C-Projekt in Sachen Qualität um Längen geschlagen.

    dazu müssteste erstmal erzählen, was du mit qualität meinst. aber wenn dein erstes C++-projekt wirklich gleich so ein erfolg war: hut ab, du musst ein abolut programmiererisches ausnahmetalent sein.

    DStefan schrieb:

    Aber "Schlichtheit" als a priori Garantie für Fehlerarmut ist einfach dummes Zeug.

    nö, das ist eine tatsache: wo wenig ist, kann wenig schief laufen. leider kann man mit 'wenig' auch wenig machen, deshalb muss ein guter kompromiss her.

    Ada ist noch deutlich komplizierter als C++. Trotzdem macht man darin komischerweise meist weniger Fehler.

    vielleicht kommt's dir nur so vor, weil du mit C++ mehr vertraut bist.
    🙂



  • C++ fehler machen

    Was sind C++ Fehler? Wenn man ideomatisch in C++ programmiert, so kommt man gar nicht erst in die Naehe von C Fehlern.



  • Basher schrieb:

    DStefan schrieb:

    Folgt aus einer "schlichteren" Programmiersprache wirklich, dass es weniger mögliche Fehlerquellen gibt, wenn man sie verwendet? Wohl kaum!

    aber ja. gerade C und C++ sind die besten beispiele dafür. weil C eine teilmenge von C++ ist, kannst du in C++ alle fehler machen, die auch in C möglich sind. umgekehrt aber nicht: du kannst in C keine C++ fehler machen.

    In beiden Sprachen kann man abzählbar viel Mist bauen. In C ist es aber wahrscheinlicher, weil die Features, die in C++ dazugekommen sind vorwiegend der besseren Übersicht und Fehlervermeidung dienen. Aber das wußtest Du bereits.



  • knivil schrieb:

    C++ fehler machen

    Was sind C++ Fehler?

    hier ein klitzekleiner auszug: http://www.horstmann.com/cpp/pitfalls.html

    In beiden Sprachen kann man abzählbar viel Mist bauen. In C ist es aber wahrscheinlicher, weil die Features, die in C++ dazugekommen sind vorwiegend der besseren Übersicht und Fehlervermeidung dienen.

    ich finde fehler in C-programmen sind sehr einfach aufzuspüren. und vor fiesen, logischen fehlern kann einen C++ auch nicht bewahren. die features, die mit c++ dazugekommen sind, helfen C-typische fehler zu umgehen, bringen aber eigene fehlerquellen mit, so dass unterm strich ein schlechteres ergebnis steht als vorher.
    🙂



  • Ich wuerde sagen, diesen Fehler ruehren daher, das C++ nicht ideomatisch verwendet wurde. Hier ein kleiner Auszug: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms .

    logischen fehlern kann einen C++ auch nicht bewahren

    Doch, ein gutes Beispiel ist die ist boost::mpl. Ich finde die Idee genial.



  • "Schlichtheit" ist nicht gleich "Schlichtheit" ...

    Ob "Schlichtheit" als Kriterium für Fehlerarmut taugt, hängt davon ab, was genau am betrachteten Formalismus "schlicht" sein soll.

    "Schlichtheit" im Sinne von "niedriger Abstraktionsgrad/'dummer' Formalismus" kann idR zu mehr Fehlern führen. Siehe BF oder Maschinencode in Binärdarstellung.

    "Schlichtheit" im Sinne von "der Formalismus ist auf wenigen, aber mächtigen Abstraktionen aufgebaut/ 'kluger' Formalismus" kann im Ggteil aber zu weniger Fehlern führen. Siehe OOP.

    Denn mit den überflüssigen Details werden eben auch deren potentielle Fehlerquellen wegabstrahiert.

    Was wirklich Fehler vermeiden hilft, ist mMn ein "kluger" Formalismus, der für den Anwender "mitdenkt" und der sich gut dem jeweiligen Programmierproblem anpaßt.

    my EUR 0.02



  • Basher schrieb:

    so dass unterm strich ein schlechteres ergebnis steht als vorher. 🙂

    Nö, besser, wenn man C++ kann und schlechter, wenn man C++ nicht kann.
    Aber mit diesem Argument kannste auch C bashen und sagen, in C mancht man mehr Fehler als in Basic, wenn man C nicht kann, man macht aber weniger Fehler, wenn man C kann. Wobei das auch schon wieder überholt ist, weil Visual Basic recht gut ist.



  • Basher schrieb:

    Ada ist noch deutlich komplizierter als C++. Trotzdem macht man darin komischerweise meist weniger Fehler.

    vielleicht kommt's dir nur so vor, weil du mit C++ mehr vertraut bist.
    🙂

    Ulkig, und das, wo ich beruflich doch fast nur Ada programmiere.



  • volkard schrieb:

    Basher schrieb:

    so dass unterm strich ein schlechteres ergebnis steht als vorher. 🙂

    Nö, besser, wenn man C++ kann und schlechter, wenn man C++ nicht kann.
    Aber mit diesem Argument kannste auch C bashen und sagen, in C mancht man mehr Fehler als in Basic, wenn man C nicht kann, man macht aber weniger Fehler, wenn man C kann.

    Womit man wieder zum Punkt kommt, daß C++ derart komplex ist, daß seine Beherrschung ggf. eine höhere Qualifikation erfordert als die von Java/C#. Darin sind wir uns vermutlich so gut wie einig, mit dem Unterschied, daß ich nicht so sicher bin wie du, ob das auch gut so ist.

    (Der Satz war kein linguistisches Meisterwerk :()

    volkard schrieb:

    Wobei das auch schon wieder überholt ist, weil Visual Basic recht gut ist.

    Da meinst du aber VB.NET, oder?



  • Was die Fehlerrate anbelangt, sind typische Compretersprachen natürlich weit vorne, mein Favorit natürlich FORTH.
    Es ist zwar problemlos möglich, darin grottenschlecht zu programmieren, aber man kann kaum Code mit verdeckten Fehlern produzieren. Auch wenn manche es nicht glauben wollen, ist FORTH keine esoterische Programmiersprache, sondern ein Commandline- RAD- Tool und Zwitter zwischen Sprache, IDE und OS.
    Normalerweise (meta)compiliert man maximal screenweise im Target und kann sofort das Ergebnis testen, weil es von nun an im Wörterbuch liegt. War was verkehrt, wird nur dieses Wort überschrieben.
    Das Gute daran ist, daß man nicht die ganze Applikation neu compilieren und aufs Target bringen muß (wie bei C/C++ - Crosscompilern), was die Turnaroundzeit drastisch drückt. Die wird mit wachsender Größe immer gewichtiger.

    Leider hat sich die Welt nicht mehr drum geschert, seit die PCs und dann die µC relativ ressourcenstark geworden sind und die FORTH- Gemeinde nicht dem eigenen Standard folgt, es demnach tausende zueinander inkompatible FORTH- Dialekte gibt, die meist nichtmal gut ans Target adaptiert sind. Dem C/C++/Java- Rush konnte man so nichts entgegensetzen.

    Schade, ist nun aber mal so ...



  • Tachyon schrieb:

    Basher schrieb:

    Ada ist noch deutlich komplizierter als C++. Trotzdem macht man darin komischerweise meist weniger Fehler.

    vielleicht kommt's dir nur so vor, weil du mit C++ mehr vertraut bist.
    🙂

    Ulkig, und das, wo ich beruflich doch fast nur Ada programmiere.

    Vielleicht kommt es dir auch nur so vor, weil du C++ nicht gerade gut kennst 🙂



  • audacia schrieb:

    Womit man wieder zum Punkt kommt, daß C++ derart komplex ist, daß seine Beherrschung ggf. eine höhere Qualifikation erfordert als die von Java/C#. Darin sind wir uns vermutlich so gut wie einig, mit dem Unterschied, daß ich nicht so sicher bin wie du, ob das auch gut so ist.
    (Der Satz war kein linguistisches Meisterwerk :()

    Den Satz würde ich verallgemeinern: Die Programmierung (nicht trivialer) Systeme ist heute so komplex, dass zur Produktion von Software guter Qualität eine höhere Qualifikation erforderlich ist.

    Ein guter Entwickler muss nicht bloß seine Programmiersprache (mit allen Bibliotheken, IDEs usw.) beherrschen, sondern auf jeden Fall auch Entwicklungstechniken, wie z.B. Entwurfsmuster, (OO-)Design, Testverfahren, Code-Management usw. Und er muss gut kommunizieren können.

    Und wenn man das bedenkt, ist es schon fast egal, welche Programmiersprache in einem Projekt verwendet wird. Naja - fast. Objektorientiert sollte sie schon sein 😉

    BTW: Ich war ja schon immer der Meinung, dass Sprachen wie Java und C# aus dem einzigen Grund erfunden wurden, weil zu dieser Zeit wirklich gute Entwickler einfach nicht zu haben bzw. zu teuer waren. Aus demselben Grund gibt es auch diese Monster-IDEs. Man kann damit schnell recht hübsche Programme zusammenkloppen, ohne dass man allzu viel Sachverstand benötigte.

    Und nein, den Umkehrschluss ziehe ich nicht! Dass also jemand, der solche IDEs und Sprachen verwendet keine Ahnung hat.

    Stefan.



  • Da muss man sich ja nicht wundern, dass C++ eine aussterbende Sprache ist.



  • DStefan schrieb:

    Den Satz würde ich verallgemeinern

    Ich nicht. Dein Statement ist mehr oder weniger trivial und nicht aus meinem Satz herleitbar.

    DStefan schrieb:

    Und wenn man das bedenkt, ist es schon fast egal, welche Programmiersprache in einem Projekt verwendet wird.

    Es ist ja nicht so, daß C++ nicht erhebliche Komplexität zum von den anderen gebräuchlichen Hochsprachen Gewohnten hinzufügte. Ob es das wert ist, ist die Frage; volkard dürfte das bejahen, ich selbst bin mir nicht so sicher.



  • knivil schrieb:

    Ich wuerde sagen, diesen Fehler ruehren daher, das C++ nicht ideomatisch verwendet wurde. Hier ein kleiner Auszug: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms .

    oh ja, das buch sieht verdammt nach pflichtlektüre für jeden c++ coder aus.

    knivil schrieb:

    logischen fehlern kann einen C++ auch nicht bewahren

    Doch, ein gutes Beispiel ist die ist boost::mpl.

    ach nö, logische fehler sind denkfehler, hervorgerufen durch schlamperei, unwissenheit, falsche annahmen, usw. keine library kann 'menschliches versagen' dieser art ausgleichen.

    u-ser_l schrieb:

    "Schlichtheit" ist nicht gleich "Schlichtheit" ...
    Ob "Schlichtheit" als Kriterium für Fehlerarmut taugt, hängt davon ab, was genau am betrachteten Formalismus "schlicht" sein soll.
    "Schlichtheit" im Sinne von "niedriger Abstraktionsgrad/'dummer' Formalismus" kann idR zu mehr Fehlern führen. Siehe BF oder Maschinencode in Binärdarstellung.
    "Schlichtheit" im Sinne von "der Formalismus ist auf wenigen, aber mächtigen Abstraktionen aufgebaut/ 'kluger' Formalismus" kann im Ggteil aber zu weniger Fehlern führen. Siehe OOP.

    ^^stimmt im prinzip, aber um mal wieder auf C und C++ zurückzukommen: der C-formalismus ist im verhältnis zu seiner (relativ) geringen komplexität sehr leistungsstark (in früheren threads sagte ich: c hat einen hohen 'wirkungsgrad'). verglichen mit C++, dessen komplexität um ein vielfaches grösser ist, leistet es nur wenig mehr. d.h. C++ hat einen schlechteren 'wirkungsgrad' als C.

    Tachyon schrieb:

    Basher schrieb:

    Ada ist noch deutlich komplizierter als C++. Trotzdem macht man darin komischerweise meist weniger Fehler.

    vielleicht kommt's dir nur so vor, weil du mit C++ mehr vertraut bist.
    🙂

    Ulkig, und das, wo ich beruflich doch fast nur Ada programmiere.

    Ada kann ich nicht, nur VHDL, was ja von Ada abstammt. ich hab' dabei nie irgendwas als unangemessen komplex empfunden. was findest du denn an Ada so viel komplizierter als an C++?

    pointercrash() schrieb:

    Leider hat sich die Welt nicht mehr drum geschert, seit die PCs und dann die µC relativ ressourcenstark geworden sind und die FORTH- Gemeinde nicht dem eigenen Standard folgt, es demnach tausende zueinander inkompatible FORTH- Dialekte gibt, die meist nichtmal gut ans Target adaptiert sind. Dem C/C++/Java- Rush konnte man so nichts entgegensetzen.

    du kannst ja mal 'nen forth-interpreter für deine µC portieren. das soll angeblich garnicht so schwierig sein. und dann machste deine kundenspezifischen anwendungen in forth. vielleicht biste damit effizienter als mit der C-hackerei. wir machen sowas (auch auf embedded systemen) mit 'nem BASIC-dialekt. BASIC aus dem grund, weils jeder leicht versteht und als anwender schnell eigene programme schreiben kann.

    DStefan schrieb:

    Und wenn man das bedenkt, ist es schon fast egal, welche Programmiersprache in einem Projekt verwendet wird. Naja - fast. Objektorientiert sollte sie schon sein

    wie sagt man so schön: to a hammer, everything looks like a nail --> http://www.iwriteiam.nl/AoP_OOCH.html
    🙂


Anmelden zum Antworten