Sind Sprachvergleiche sinnvoll? [geschlossen]

8

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?

Prasoon Saurav
quelle
1
So viele hypothetische Programmierfragen verschwinden, wenn Programmierer gezwungen sind, über die geschäftliche Seite der Dinge nachzudenken. Wenn Sie eine Reihe von Sprachen auswählen, um etwas Neues zu entwickeln, sind Sie dann nicht gezwungen, diese zu vergleichen? Bestehende Erfahrungen sind wichtig, Bibliotheken, Stabilität, Zukunftsaussichten, aber auch Sprachmerkmale sind wichtig, oder? Insbesondere wenn Aktionäre oder Geschäftsleute wissen möchten, warum Sie A, B und C ausgewählt haben. Wenn Sie es wagen, ihnen zu sagen, dass Python nicht anders als Assembly ist, erwarten sie, dass Sie Funktionen in ASM mit derselben Geschwindigkeit schreiben.
Job
Darunter, denke ich, spricht Bjarne über den Vergleich von C ++ mit Objective-C und mit Eiffel. Die Sprachen hatten völlig unterschiedliche Designziele, so dass ein Kludge durchaus notwendig sein könnte.
Macneil

Antworten:

13

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?

Steven A. Lowe
quelle
Ich liebe es so weit! Was ist mit Perl, Python, Ruby, Clojure, Scala usw.?
Job
2
@Job Ich vergleiche Perl mit einem Niesen auf der Tastatur. Fühlen Sie sich frei, Ihre eigenen in den Kommentaren hinzuzufügen!
Steven A. Lowe
2
"Lisp ist wie eine Schüssel Haferflocken mit Nagelabschnitten." - Larry Wall
Job
"Scheme ist ein exotischer Sportwagen. Schnell. Schaltgetriebe. Kein Radio. Emacs Lisp ist ein 1984er Subaru GL 4WD: 'Das Auto, das immer vor Ihnen steht.' Common Lisp ist Howl's Moving Castle. " -Steve Yegge
Inaimathi
3
(Lisp ist wie (in gewisser Weise (zumindest)) (meine Großmutter (RIP)), die in (interessanten (normalerweise (und verwandten))) Tangenten sprach)
Steven A. Lowe
9

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.

Larry Coleman
quelle
Ich stimme mit allem außer dem ersten Satz überein. Stroustrup ist nicht gut aufgestellt, um C ++ mit irgendetwas zu vergleichen, weil er niemals unparteiisch erscheinen kann. +1 für die Aussage, dass Sie beide ausreichend kennen müssen, um die beiden richtig zu vergleichen.
Frank Shearar
6

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.

Inaimathi
quelle
Sie haben Hämmer erlebt, die Sie in den Fuß schießen können?
1
@Thor: Viele Waffen haben Hämmer
Steven A. Lowe
@ Thorbjørn Ravn Andersen: Ich habe Metaphern nicht so schlecht gemischt: p Nein, aber ich habe einen Hammer verwendet, dessen Griff locker war (der Kopf flog ab, als ich ihn das zweite Mal schwang; er traf jedoch niemanden, nur brach ein Glas). Der Punkt ist, dass es so etwas wie einen schlechten Hammer gibt, und zu sagen "Sie sollten Hämmer nicht vergleichen" ist nur dann ein vernünftiger Rat, wenn sie alle gleichwertig oder austauschbar sind.
Inaimathi
Sie können jedoch erkennen, dass ein Hammer gefährlich ist, oder erklären, wofür er verwendet werden sollte, ohne auf Vergleiche mit anderen Hämmern zurückgreifen zu müssen.
Jhominal
3
Bibliotheken sind eher Werkzeuge. Sprachen sind wie die Materialien, aus denen die Werkzeuge bestehen. Wir bevorzugen normalerweise sowohl Hämmer als auch Schraubendreher aus Stahl. Und viele Sprachen fühlen sich wie verrostetes Eisen, Gummi oder Play-Doh an.
MJP
4

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

Turm
quelle
2
Ah, aber Sie sollten einen Hammer mit einem Schraubenzieher vergleichen. Woher wissen Sie sonst, welche der beiden Ihnen beim Öffnen Ihrer Farbdose hilft?
Frank Shearar
@Frank Sie können einen Hammer verwenden, um Farbe zu öffnen? Ich habe mein Auto benutzt.
Matt Ellen
@Frank - Ich glaube, ich könnte mit beiden einen Farbeimer öffnen;) Aber warum sich die Mühe machen (es kommt sowieso mit einer Schraube oben drauf)
Rook
1

Wenn wir Sprachen als Produkte und alle Entwickler als Marktplatz behandeln, können wir zu einigen interessanten Schlussfolgerungen kommen:

  1. Produkte konkurrieren nicht immer. Zum Beispiel löst Haskell nicht die gleichen Probleme wie Java, das nicht die gleichen Probleme löst wie Assembly, das nicht die gleichen Probleme wie Prolog löst. Ein Entwickler kann in verschiedenen Situationen alle diese Sprachen verwenden. Vergleich impliziert Wettbewerb um Überlegenheit. Daher macht es keinen Sinn, Sprachen zu vergleichen, die nicht miteinander konkurrieren.
  2. Sichtbarkeit auf dem Markt bedeutet, dass sich das Produkt bereits als nützlich für jemanden erwiesen hat. Das heißt, Sie können Ruby und Python nach Belieben vergleichen - die Leute tun es die ganze Zeit. Irgendwie scheint das niemanden umzustimmen (oder wenn ja, ändert die gleiche Anzahl von Menschen ihre Meinung in die andere Richtung). In der Hinsicht sind Ruby und Python gleichwertig. Es ist wie bei zwei riesigen Soda-Unternehmen, die "wissenschaftliche" Vergleiche ihrer Produkte anstellen. Eine Studie zeigt, dass Coca-Cola überlegen ist, während die andere zeigt, dass Pepsi überlegen ist. Auch wenn die Daten zuverlässig sind, bedeutet dies nichts. Wir alle wissen, dass es sich um perfekte Limonaden (Programmiersprachen) handelt und dass diese mehr oder weniger meinem persönlichen Geschmack entsprechen.
  3. Sprachvergleiche sind eine Form des Geek-Marketings. Wenn es einen vollkommen objektiven Ort gäbe, um einen Vergleich zu starten, könnten sie nützlich sein. Natürlich gibt es nicht. Jeder, der sich die Mühe macht, einen Vergleich anzustellen, versucht, eine bestehende Tendenz zu bestätigen. Sie versuchen eine Sprache zu verkaufen . Wenn C ++ so schlecht ist oder VB so schlecht ist oder Erlang so schlecht ist, warum verwenden die Leute sie dann? Sie können alle gewünschten Ansprüche geltend machen, aber das hindert sie nicht daran, nützlich zu sein. Wir gehen davon aus, dass die Menschen zu dumm sind, um die Wahrheit vor sich zu sehen, aber die Wahrheit ist wahrscheinlich, dass der "Markt" komplexer ist, als wir erkennen. Vergleiche sagen mehr über die Person aus, die den Vergleich durchführt, als über die zu vergleichenden Produkte.
Scant Roger
quelle
0

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

jwenting
quelle
0

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:

  • Ist die Sprache für die Aufgabe geeignet?
  • Ist die Sprache auf allen Zielplattformen verfügbar?
  • Qualität, Zuverlässigkeit und Kosten von Compilern
  • Gibt es Programmierer, die diese Sprache kennen, sind sie kompetent, teuer, kreativ?
Mouviciel
quelle
1
Obwohl es weniger Programmierer gibt, die mit neueren, fortgeschritteneren Sprachen vertraut sind, sind sie in der Regel sehr leistungsfähig.
Kevin Cline