"C++ is the dumpest language in the world"



  • rüdiger schrieb:

    Ich hab den Artikel nicht ganz gelesen. Aber von dem was ich beim Überfliegen gesehen habe, ist er offenbar ein Fan dynamischer Sprachen. Nun gibt es bei OO-Implementierungen idr. zwei Richtungen. Einmal dynamische OOP (Smalltalk, CLOS etc) und einmal statische OOP (Simula, C++). Da er offenbar ein Fan dynamischer Sprachen ist, hält er dynamische OOP für den einzig wahren Weg.

    Und da sieht man gleich das Problem: Der "Rant" basiert - wie die meisten Rants - einfach auf den persönlichen Vorlieben des Autors und nicht auf fundiertem Wissen. Wie man leicht daran sieht, wie er rumflucht. Daher kann man sich das Lesen des Artikels auch gleich sparen.

    Wenn man eine vernünftige Kritik zu C++ lesen will, dann sollte man lieber die Notes von Stepanov lesen (bzw. das Buch von ihm was im Sommer rauskommen soll). So etwas wie der verlinkte Artikel ist nur Zeitverschwendung.

    👍 👍 👍



  • Shade Of Mine schrieb:

    rüdiger schrieb:

    Wenn man eine vernünftige Kritik zu C++ lesen will, dann sollte man lieber die Notes von Stepanov lesen (bzw. das Buch von ihm was im Sommer rauskommen soll). So etwas wie der verlinkte Artikel ist nur Zeitverschwendung.

    Hast du mal ein paar Links?
    Auf www.stepanovpapers.com stehen ja zig millionen Papers...
    Welche davon sind denn lesenswert?

    Das war's glaube ich:
    http://www.stepanovpapers.com/notes.pdf

    Aber die Testkapitel bzw. Folien von dem Buch was er schreibt, machen auch einen sehr guten Eindruck.



  • wenn man zwischen "dynamischen" und "Skript-"Sprachen unterscheidet, müßte man aber auch zwischen objekt-orientierter und Objekt-Programmierung unterscheiden.

    Echte Objektprogrammierung, also die Programmierung von Objekten in einem in sich geschlossenen "Universum", welches vollständig aus Objekten besteht, wobei natürlich auch die Runtime, die IDE, der Code und überhaupt alles Objekte sind, gibt es nur mit ganz wenigen Sprachen wie Smalltalk oder Self.

    apropos "Daten = Code" ... was auf dem Gebiet schon lange möglich ist, zeigt Tcl: "alles ist ein Kommando mit Argumenten"="alles ist ein String"="alles ist eine Liste" 💡



  • rüdiger schrieb:

    http://www.stepanovpapers.com/notes.pdf

    der titel passt überhaupt nicht. das ist doch bloss schnödes c++ buch. wie langweilig.
    🙂



  • ~fricky schrieb:

    der titel passt überhaupt nicht. das ist doch bloss schnödes c++ buch. wie langweilig.
    🙂

    Was ich da so gelesen habe ist das durchaus generell relevant - natürlich auf einem abstrakten niveau - aber die infos in dem buch bringen einem schon weiter...

    und gerade dir würde ich mal solche literatur empfehlen



  • Shade Of Mine schrieb:

    Was ich da so gelesen habe ist das durchaus generell relevant - natürlich auf einem abstrakten niveau ....

    in dem buch ist überhaupt nichts abstrakt, sondern alles sehr konkret auf C++ bezogen.

    Shade Of Mine schrieb:

    und gerade dir würde ich mal solche literatur empfehlen

    die 'martial arts' der c++ programmierung sind für mich uninteressant. dazu habe ich zu wenig mit c++ zu tun.
    🙂



  • ~fricky schrieb:

    in dem buch ist überhaupt nichts abstrakt, sondern alles sehr konkret auf C++ bezogen.

    Eigentlich nicht wirklich.
    Natürlich wird C++ als Implementierungssprache genommen und es lässt sich nicht 1:1 auf eine andere Sprache umlegen, aber viele Konzepte und Ideen sind Sprachneutral (auch wenn sie hier in C++ implementiert werden).



  • Shade Of Mine schrieb:

    ~fricky schrieb:

    in dem buch ist überhaupt nichts abstrakt, sondern alles sehr konkret auf C++ bezogen.

    Eigentlich nicht wirklich.
    Natürlich wird C++ als Implementierungssprache genommen und es lässt sich nicht 1:1 auf eine andere Sprache umlegen, aber viele Konzepte und Ideen sind Sprachneutral (auch wenn sie hier in C++ implementiert werden)

    eigentlich schon. sowas wie der euklidische algorithmus, random shuffle, sortierung, usw. wird in anderen büchern besser erklärt. bei stepanov wird alles extrem mit c++ verrührt, was ok ist, für leute, die sich für c++ interessieren. für alle anderen ist das buch aber so gut wie wertlos.
    🙂



  • ~fricky schrieb:

    eigentlich schon. sowas wie der euklidische algorithmus, random shuffle, sortierung, usw. wird in anderen büchern besser erklärt. bei stepanov wird alles extrem mit c++ verrührt, was ok ist, für leute, die sich für c++ interessieren. für alle anderen ist das buch aber so gut wie wertlos.
    🙂

    Ein C++ bezogenes Zitat aus den Notes:
    While we could make a member function to return length, it is better to make it a global friend function. If we do that, we will be able eventually to define the same function to work on built-in arrays and achieve greater uniformity of design.

    Macht in allen Sprachen Sinn. Es geht hier zB um Member/Non-Member und dass Member funktionen idR eigentlich bäh sind. Das ist eine sehr wichtige Denkweise die dir in zB Python genauso hilft.

    IMHO geht es in den Notes mehr um denkweisen als um C++ Probleme, denn der Code in den Notes ist trivial. Was interessant ist sind die Erklärungen und Hintergründe.



  • Shade Of Mine schrieb:

    Ein C++ bezogenes Zitat aus den Notes:
    While we could make a member function to return length, it is better to make it a global friend function. If we do that, we will be able eventually to define the same function to work on built-in arrays and achieve greater uniformity of design.

    Macht in allen Sprachen Sinn. Es geht hier zB um Member/Non-Member und dass Member funktionen idR eigentlich bäh sind.

    Sein Argument zielt aber doch recht spezifisch darauf ab, daß sich damit das Behandeln der C-Altlasten in C++ vereinfachen läßt 😉



  • Shade Of Mine schrieb:

    While we could make a member function to return length, it is better to make it a global friend function. If we do that, we will be able eventually to define the same function to work on built-in arrays and achieve greater uniformity of design.

    Macht in allen Sprachen Sinn.

    mag sein, dass es parallelen zu anderen sprachen gibt, die auch sowas wie 'global friend functions' kennen, aber das ist eher zufall.

    Shade Of Mine schrieb:

    IMHO geht es in den Notes mehr um denkweisen als um C++ Probleme...

    es geht fast ausschliesslich um c++ denkweisen. er schreibt nicht nur in der einleitung, dass er c++ benutzen wird, sondern das wort "C++" taucht an sehr vielen stellen im buch auf. ein titel wie 'designing fundamental algorithms with c++ templates' hätte jedenfalls besser gepasst, als 'note on programming', was eine völlig falsche erwartungshaltung weckt, wenn man den titel sieht.
    🙂



  • ~fricky schrieb:

    mag sein, dass es parallelen zu anderen sprachen gibt, die auch sowas wie 'global friend functions' kennen, aber das ist eher zufall.

    Ich sehe das ganze eben abstrakter.
    Das Buch ist keine Anleitung um gute Python Programme zu schreiben. Aber du wenn du das alles verstanden hast was gesagt wurde, dann entwickelst du bessere Python, Ruby,... programme.

    Solche Bücher müssen auf konkrete Sprache bezogen geschrieben werden um die Denkweisen darlegen zu können.

    Sprachen sind nur Werkzeuge, dumme Werkzeuge um genau zu sein. Die wirkliche Arbeit macht dein Geist.

    Aber du hast die Aussage ja auch nicht verstanden - es geht nicht um globale Funktionen, sondern um den Ansatz wie man generische Algorithmen schreibt. Das betrifft in gewisser Weise alle Sprachen die diese möglichkeit bieten und man versteht dann auch warum dass in Java so schwer ist und wo das Von-Interfaces-Erben-Modell seine schwachstellen hat.

    Es ist aber keine Anleitung die du 1:1 befolgen kannst, es geht darum den Horizont zu erweitern. Wenn das Buch über Ruby oder Fortran wäre (2 Sprachen die ich nicht nutze) würde ich mir das Buch dennoch kaufen.

    Aber es ist eben abstrakt und das ist das Problem. Die meisten Leute wollen keine Horizont Erweiterung sondern Anleitungen...

    PS:
    die erwartungshaltung ist natürlich bei dem titel eine andere als das buch im endeffekt hergibt. aber dennoch muss man kein c++ programmierer sein um daraus etwas zu gewinnen.



  • Shade Of Mine schrieb:

    Solche Bücher müssen auf konkrete Sprache bezogen geschrieben werden um die Denkweisen darlegen zu können.

    dagegen hat ja auch keiner was. stepanovs buch kann für c++ programmierer sehr nützlich sein. für alle anderen leider weniger, weil die wenigen, grundlegenden konzepte, die darin vorkommen, zu sehr mit c++ 'verseucht' sind.

    Shade Of Mine schrieb:

    Aber es ist eben abstrakt und das ist das Problem.

    stepanovs buch ist eben nicht abstrakt, aber das ist auch kein problem. wenn ich was über kugeln wissen will, dann kaufe ich mir auch keine orangen und denke mir alle eigenschaften weg, sondern hole mir ein geometrie-lehrbuch oder sowas.
    🙂



  • Ich lese gerade die Notes on Programming und könnt ihr mir sagen, was an folgendem Code falsch ist?

    One of the omissions that I made in STL was the omission of relational operators on iterators. STL requires them only for random access iterators and only when they point to the same container. It makes it impossible to have a set of iterators into a list. Yes, it is impossible to assure the topological ordering of such iterators – the property that if a < b then ++a < ++b or, in other words, that the ordering imposed by < coincides with the traversal ordering – but such a property is unneeded for sorting. The reason that I decided not to provide them was that I wanted to prevent people writing something like
    for (std::list<int>::iterator i = mylist.begin();
    i < mylist.end(); ++i) sum += *i;



  • [quote="C++-Progger"]Ich lese gerade die Notes on Programming und könnt ihr mir sagen, was an folgendem Code falsch ist?[quote]
    es wäre eklig langsam.
    iteratoren in listen müßten für nen op< immer die liste ablaufen. das ist unnötig. die schleife klappt auch super mit !=.



  • [quote="volkard"][quote="C++-Progger"]Ich lese gerade die Notes on Programming und könnt ihr mir sagen, was an folgendem Code falsch ist?

    es wäre eklig langsam.
    iteratoren in listen müßten für nen op< immer die liste ablaufen. das ist unnötig. die schleife klappt auch super mit !=.

    Danke, für den Hinweis, das ist mir beim Starren auf den Codeschnipsel gar nicht aufgefallen und ich wunderte mich noch, da ich so etwas ähnliches schon so oft geschrieben habe 😃



  • C++-Progger schrieb:

    Ich lese gerade die Notes on Programming und könnt ihr mir sagen, was an folgendem Code falsch ist?

    ...
    for (std::list<int>::iterator i = mylist.begin();
    i < mylist.end(); ++i) sum += *i;

    Hm. Ist es vielleicht das?

    for (std::list<int>::iterator i = mylist.begin();
    i != mylist.end(); ++i) sum += *i;
    

    != statt <



  • @~fricky
    Das Buch von ihm ist abstrakter, zumindest das erste Kapitel, was es schon Online gibt. Da führt er ziemlich Abstrakt in eine Begriffswelt ein.

    Und die STL hat er ja immerhin erst für Ada entworfen.



  • Den Absatz finde ich richtig gut:

    Stepanov schrieb:

    Every type has a (potentially infinite) set of computable functions definable on it. Out of this set we can select a subset such that all other functions can be defined in terms of it. I call such a subset a computational basis of a type. I call a computational basis efficient if all the functions on the type can be expressed in terms of the basis as efficiently as if they had access to the bit representation of the type. I call a computational basis orthogonal if no functions in it can be expressed in terms of other functions without loss of efficiency.



  • rüdiger schrieb:

    Und die STL hat er ja immerhin erst für Ada entworfen.

    Ulkig, dass STL-ähnliche Komponenten erst in Ada 2005 Einzug gehalten haben...


Anmelden zum Antworten