Warnung: Dies ist bei weitem keine so gute Antwort wie eine Kritik an dem Vortrag, auf den "Benutzer unbekannt" in seiner Antwort verwiesen hat.
Sein erster Hauptpunkt ist der (angeblich) "sich ständig ändernde Standard". In Wirklichkeit beziehen sich die Beispiele, die er nennt, alle auf Änderungen in C ++, bevor es einen Standard gab. Seit 1998 (als der erste C ++ - Standard fertiggestellt wurde) waren die Änderungen an der Sprache recht gering - tatsächlich würden viele argumentieren, dass das eigentliche Problem darin besteht, dass weitere Änderungen hätten vorgenommen werden müssen. Ich bin mir ziemlich sicher, dass der gesamte Code, der dem ursprünglichen C ++ - Standard entspricht, weiterhin dem aktuellen Standard entspricht. Es wird zwar etwas weniger sicher, aber es sei denn, etwas ändert sich schnell (und ganz unerwartet), dasselbe gilt auch für den kommenden C ++ - Standard (theoretisch für den gesamten verwendeten Code)export
kaputt gehen, aber es gibt praktisch keine. aus praktischer Sicht ist es kein Problem). Ich kann mir nur wenige andere Sprachen, Betriebssysteme (oder vieles andere im Zusammenhang mit Computern) vorstellen, die einen solchen Anspruch erheben können.
Er geht dann in "ständig wechselnde Stile". Auch hier liegen die meisten seiner Punkte ziemlich nahe am Unsinn. Er versucht, for (int i=0; i<n;i++)
als "alt und kaputt" und for (int i(0); i!=n;++i)
"neue Schärfe" zu charakterisieren . Die Realität ist, dass es zwar Typen gibt, für die solche Änderungen sinnvoll sein könnten int
, es aber keinen Unterschied macht - und selbst wenn Sie etwas gewinnen könnten, ist es selten notwendig, guten oder korrekten Code zu schreiben. Selbst im besten Fall macht er aus einem Maulwurfshügel einen Berg.
Seine nächste Behauptung ist, dass C ++ "in die falsche Richtung optimiert" - insbesondere, während er zugibt, dass die Verwendung guter Bibliotheken einfach ist, behauptet er, dass C ++ "das Schreiben guter Bibliotheken fast unmöglich macht". Hier glaube ich, ist einer seiner grundlegendsten Fehler. In Wirklichkeit Bibliotheken gute Schreiben für fast jede Sprache ist extrem schwierig. Das Schreiben einer guten Bibliothek setzt zumindest voraus, dass Sie sich mit einer Problemdomäne so gut auskennen, dass Ihr Code für eine Vielzahl möglicher Anwendungen in dieser Domäne (oder in Bezug auf diese Domäne) funktioniert. Das meiste, was C ++ wirklich tut, ist "die Messlatte höher legen " - nachdem man gesehen hat, wie viel besser eine Bibliothek sein kann , sind die Leute selten bereit, wieder die Art von Dreck zu schreiben, die sie sonst hätten.wirklich gute Programmierer schreiben einige Bibliotheken, die dann (wie er zugibt) von "dem Rest von uns" benutzt werden können. Dies ist wirklich ein Fall, in dem "das ist kein Fehler, es ist eine Funktion."
Ich werde nicht versuchen, jeden Punkt in der Reihenfolge zu treffen (das würde Seiten in Anspruch nehmen), sondern direkt zu seinem Endpunkt springen. Er zitiert Bjarne mit den Worten: "Durch die Optimierung des gesamten Programms können nicht verwendete virtuelle Funktionstabellen und RTTI-Daten entfernt werden. Diese Analyse eignet sich insbesondere für relativ kleine Programme, die keine dynamische Verknüpfung verwenden."
Er kritisiert dies, indem er die Behauptung, "Dies ist ein wirklich schweres Problem", nicht nur mit dem Problem des Stillstands vergleicht. In Wirklichkeit ist es nichts dergleichen - tatsächlich hat der Linker, der in Zortech C ++ (ziemlich genau der erste C ++ - Compiler für MS-DOS in den 1980er Jahren) enthalten war, dies getan. Es ist wahr, dass es schwierig ist, sicher zu sein, dass alle möglicherweise irrelevanten Daten beseitigt wurden, aber immer noch völlig vernünftig, um einen ziemlich fairen Job zu machen.
Unabhängig davon ist jedoch der viel wichtigere Punkt, dass dies für die meisten Programmierer in jedem Fall völlig irrelevant ist. Wie diejenigen von uns, die eine ganze Menge Code zerlegt haben, wissen, enthalten Ihre ausführbaren Dateien mit ziemlicher Sicherheit eine ganze Menge "Zeug" (sowohl Code als auch Daten, in typischen Fällen), die Sie schreiben, es sei denn, Sie schreiben Assemblersprache ohne Bibliotheken wahrscheinlich nicht einmal wissen, ganz zu schweigen von jemals tatsächlich mit. Für die meisten Menschen spielt es meistens keine Rolle - es sei denn, Sie entwickeln für die kleinsten eingebetteten Systeme, ist dieser zusätzliche Speicherverbrauch einfach irrelevant.
Am Ende ist es wahr, dass dieser Schimpanse ein bisschen mehr Substanz hat als Linus 'Idiotie - aber das gibt ihm genau das Verdammnis mit dem schwachen Lob, das es verdient.
virtual
functions ergeben, oder?