Dr. Bjarne Stroustrup sagt in seinem Buch D & E.
Mehrere Rezensenten haben mich gebeten, C ++ mit anderen Sprachen zu vergleichen. Dies habe ich dagegen entschieden. Damit habe ich eine langjährige und stark vertretene Ansicht bekräftigt: "Sprachvergleiche sind selten aussagekräftig und noch seltener fair". Ein guter Vergleich der wichtigsten Programmiersprachen erfordert mehr Aufwand als die meisten Menschen bereit sind, Erfahrung in einer Vielzahl von Anwendungsbereichen, eine strenge Aufrechterhaltung einer distanzierten und unparteiischen Sichtweise und ein Gefühl der Fairness. Ich habe keine Zeit und als Designer von C ++ wäre meine Unparteilichkeit niemals voll glaubwürdig.
- Das Design und die Entwicklung von C ++ (Bjarne Stroustrup)
Sind Sie mit dieser Aussage einverstanden Language comparisons are rarely meaningful and even less often fair
?
Persönlich denke ich, dass der Vergleich einer Sprache X mit Y Sinn macht, weil es viel mehr Gründe gibt, X / Y zu lieben / zu verachten :-P
Was denkst du Leute?
quelle
Antworten:
Ich liebe es, Programmiersprachen zu vergleichen!
Ich vergleiche Java mit einer warmen Brise mit einem Hauch von Regen
Ich vergleiche C # mit einem schönen Frühlingstag mit gerade genug flauschigen weißen Wolken, um den Himmel glücklich zu machen
Ich vergleiche C mit einem Vorschlaghammer in einem Raum voller Glas
Ich vergleiche C ++ mit einer Tüte Vorschlaghammer in einer Welt aus Kristall
Ich vergleiche VB mit einem alten Aufziehspielzeug, das in einer Badewanne versinkt
Ich vergleiche PL / 1 mit einem rostigen Amboss, der am Boden festgeschraubt ist
Womit vergleichen Sie sie?
quelle
Ich denke, Stroustrup ist völlig richtig. Ein angemessener Vergleich zweier Sprachen hinsichtlich ihrer technischen Vorzüge erfordert eine ausreichende Vertrautheit mit beiden, um idiomatischen Code zu schreiben und dieselben Entwurfsmuster zu verwenden, die normalerweise von Programmierern verwendet werden, die in beiden Sprachen sehr produktiv sind. Jemand, der nicht über beide Kenntnisse in beiden Sprachen verfügt, sieht möglicherweise Dinge, die in der Sprache, mit der er nicht so vertraut ist, nicht explizit vorgesehen sind, und geht davon aus, dass dies zu Problemen führen würde.
Beispielsweise kann jemand, der Python nicht regelmäßig verwendet, davon ausgehen, dass Python-Benutzer aufgrund von Einrückungen regelmäßig Probleme haben. Oder jemand, der nicht mit Common Lisp vertraut ist, kann sich das Fehlen polierter Bibliotheken ansehen, aber nicht wissen, dass das FFI leistungsfähig genug ist, um Wrapper für C-Bibliotheken mit nominalem Aufwand zu schreiben. Jemand, der nicht mit Ruby vertraut ist, erkennt möglicherweise das Fehlen einer statischen Typisierung und geht davon aus, dass Typfehler ein großes Problem darstellen. Schließlich kann jemand, der mit Haskell nicht vertraut ist, den Mangel an Zuweisung erkennen und davon ausgehen, dass er den Status nicht verarbeiten kann.
All dies setzt voraus, dass Sprachen tatsächlich nur nach ihren technischen Vorzügen verglichen werden.
quelle
Eine Sprache ist ein Werkzeug. Das heißt, ich habe wirklich, wirklich beschissene Werkzeuge gesehen. Niemand möchte mit einem Hammer arbeiten, dessen Kopf leicht abfliegt und einen anderen Zimmermann in den Bauch schlägt. Wenn Sie bemerken würden, dass der Hammer Ihres Arbeitskollegen in dieser Form ist, würden Sie sich wahrscheinlich von ihnen fernhalten, wenn sie ihn benutzen.
Es ist auch wichtig zu verstehen, um welches Tool es sich handelt. Sie können einen Schraubenzieher und einen Hammer nicht austauschbar verwenden (obwohl einige es verzweifelt versuchen). Zur Hölle, Sie können nicht einmal alle Hämmer austauschbar verwenden. Für einige Dinge braucht man einen Schlitten, für andere einen Hammer und für andere eine Wende. Wenn Sie das unangemessene Tool verwenden, machen Sie bestenfalls einen schlechteren Job, im schlimmsten Fall verletzen Sie sich selbst oder einen Kollegen.
Mit anderen Worten, ein Sprachvergleich ist insofern nützlich, als er Arbeitsunfälle verhindern kann. Das Obige aus der Metapher herausnehmen; Es ist schwierig zu wissen, ohne zu vergleichen, ob eine bestimmte Sprache ein Vorschlaghammer, ein Schraubenzieher, ein Dremel oder eine Tischkreissäge ist, da man (anders als bei physischen Werkzeugen) nicht wirklich nur durch einen Blick erkennen kann. Sie müssen über die angebotenen Funktionen nachdenken, sie in Aktion sehen (indem Sie versuchen, wichtige Teile einer darin geschriebenen großen Codebasis zu lesen) und im Idealfall auch selbst testen. Achten Sie darauf, nicht den Fehler zu machen, Cobol nur in Python zu schreiben (zum Beispiel). Sie müssen die neue Sprache idiomatisch verwenden, was bedeutet, dass Sie sie gut lernen. Dies ist wahrscheinlich der Grund, warum Bjarne sagt, dass die meisten Leute sich nicht genug Mühe geben, um einen nützlichen Vergleich anzustellen.
Die Art des Vergleichs, der mit "Ich mag Blub" beginnt und mit "Nun, ich mag Blub ++" fortgesetzt wird, ist völlig nutzlos. Wenn es darum geht, eine Sprache auszuwählen, sagt es Ihnen nur, wer in einer bestimmten Gruppe am überzeugendsten ist und / oder welches Sprachunternehmen das größte Werbebudget hat. Wenn Sie analysieren, was eine Sprache kann, für welche Aufgaben sie geeignet ist und wo ihre Mängel liegen, ohne auf unangemessene Argumente oder persönliche Vorurteile zurückzugreifen, kann dies in der Tat nützlich sein.
quelle
Abgesehen von einigen seltenen (und - seltenen - wie in "es passiert ein- oder zweimal im Leben eines Sonnensystems") Ausnahmen führt dies normalerweise zu Sprachkriegen, in mehr oder weniger starken Varianten, und lässt nur sehr selten einige praktische und nützliche Schlussfolgerungen.
Sprachen sind Werkzeuge, keine Religionen. Sie vergleichen einen Hammer nicht mit einem Schraubenzieher, sondern verwenden den Hammer, der am besten zu Ihrer Aufgabe und Denkweise / Ausbildung / erforderlichen Abstraktionsstufe passt. Da derjenige, der den Vergleich durchführt, durch die Tatsache voreingenommen ist, dass er mindestens einen der beiden kennt oder zumindest einen der beiden bevorzugt, ist es schwierig, ein wirklich objektives Kriterium für den Vergleich zu finden (Ausnahmen bestehen).
quelle
Wenn wir Sprachen als Produkte und alle Entwickler als Marktplatz behandeln, können wir zu einigen interessanten Schlussfolgerungen kommen:
quelle
Stroustrup ist völlig richtig.
Die meisten "Sprachvergleiche" werden mit einem bestimmten Ergebnis durchgeführt, das "zeigen" soll, dass das eine dem anderen "überlegen" ist.
Oft bedeutet dies, einen Code in beiden Sprachen zu schreiben und die Leistung der generierten ausführbaren Datei zu messen, wobei eine Sprache hochoptimiert und die andere absichtlich für eine schlechte Leistung geschrieben wird. Auf diese Weise wird der Mythos "Java ist langsam" verewigt. Die "Tests", um zu "beweisen", dass sie absichtlich geschrieben wurden, um nicht die Leistung beim Ausführen von Java-Code zu messen, sondern die Startzeit der JVM. Nehmen Sie zum Beispiel eine einfache mathematische Operation und durchlaufen Sie sie 100 Mal. Führen Sie dies in Java und C ++ durch, kompilieren Sie die C ++ - Version mit aktivierter Optimierung, die Java-Version ohne Optimierungsflags und führen Sie dann beide ausführbaren Versionen aus. Die Java-Klasse wird aufgrund der Startzeit der JVM viel länger ausgeführt als die ausführbare C ++ - Datei. Dies zeigt nicht, dass "Java langsam ist" Die JVM-Startzeit bedeutet jedoch, dass Java nicht das richtige Tool für sehr kurz laufende Prozesse ist (weder eine interpretierte Sprache noch irgendetwas anderes, das das Laden einer Laufzeit erfordert). Wurde der Test ordnungsgemäß geschrieben, um über einen Zeitraum von mehreren Stunden sowohl mit Codebasen als auch mit Compilersystemen unter Verwendung gleicher Optimierungsstufen ausgeführt zu werden, sind die Ergebnisse sehr unterschiedlich (wahrscheinlich mit ziemlich ähnlicher Leistung).
Und das ist nur ein Beispiel (mit dem ich zufällig vertraut bin).
quelle
Als Projektmanager müssen Sie einige Vergleiche anstellen, um die Sprache auszuwählen, in der Ihre Software codiert wird. Kriterien können nicht technisch sein:
quelle