Was ist eine "mächtige" Sprache?

22

Ich habe oft Leute gesehen, die sich darum stritten, dass ihre Lieblingssprache "mächtiger" ist als andere. Wenn es um die Beschreibung einer Programmiersprache geht, kann ich verstehen, was eine objektorientierte Sprache ist oder was eine dynamische Sprache ist, aber ich kann immer noch nicht herausfinden, was genau eine "mächtige" Sprache ist. Was sind deine Gedanken?

Handwerker
quelle
5
Eine Sprache ist so mächtig wie ihr Benutzer.
Ysolik
6
@ysolik nicht unbedingt wahr. Ich könnte jemandem eine beschissene Sprache geben und sehen, wie weit sie kommen. es hat eine OP, NOOP! =)
Mark Canlas
2
@Mark, wenn wir über Extreme reden, dann hast du recht. Wenn Sie jedoch die heute mehr oder weniger verbreiteten Sprachen berücksichtigen, dann ist der Benutzer ein großer Teil davon.
Ysolik
1
PowerBASIC: Leistungsstärker geht es nicht. ^^
gablin
1
@ysolik: Es wäre genauer zu sagen: "Eine Sprache kann nicht mächtiger sein als ihr Benutzer."
Duncan Bayne

Antworten:

32

Wir können nicht definieren, was eine "mächtige" Sprache ist, ohne zuerst das Wort "mächtig" zu definieren.

Die wörtliche Definition von Macht wäre "Potenz", und ich denke, wir sind uns alle einig, dass die große Mehrheit der Compiler - und sogar viele Interpreten, die nicht Turing-vollständig sind - ebenso gut dafür sorgen, dass der Prozessor ihre Anweisungen ausführt . Was die wörtliche Definition betrifft, wäre die Antwort auf die Frage "fast jede Sprache überhaupt".

Praktisch sollten wir hier wirklich aufhören. Das Definieren einer "mächtigen Sprache" ist ein bisschen wie das Definieren einer "guten Person" oder eines "Qualitätsprodukts". Es gibt absolut keine objektive Definition dieser Wörter, auf die sich jeder oder sogar die Mehrheit der Experten einigen könnte, und die meisten Definitionen werfen einfach die Frage auf . Je nachdem, mit wem Sie sprechen, kann die Macht eine der folgenden sein:

  • Ein umfangreiches Framework oder eine Bibliothek für allgemeine Zwecke zur Ausführung einer Vielzahl gängiger Aufgaben
  • Eine ausgefeilte domänenspezifische Syntax, die "eins tut und es gut macht"
  • Direkter Zugriff auf Maschinenfunktionen, dh die Fähigkeit, Code auf niedriger Ebene zu schreiben
  • Abstraktion von Konzepten auf Maschinenebene, dh die Fähigkeit, Code auf hoher Ebene zu schreiben
  • Ein sehr umfangreiches Typensystem, das erweiterte Strategien wie Reflektion, DI und statische Analyse ermöglicht
  • Ein sehr loses Typensystem , mit dem Programmierer es einfach erledigen können (Typenzwang usw.)
  • Die Fähigkeit, alles als Objekt zu behandeln , das eine konzeptionelle Verifikation bietet
  • Die Fähigkeit, alles als eine Funktion zu behandeln , die eine mathematische Verifikation bietet
  • Automatisches Speicher- und Ressourcenmanagement (GC, RAII) führt zu weniger Fehlern
  • Manuelle Speicher- und Ressourcenverwaltung, die möglicherweise zu einer Leistungsoptimierung führt
  • Ein Minimum an syntaktischem Rauschen , was zu einer verbesserten Lesbarkeit führt
  • Eine eher englische Syntax , die eine flachere Lernkurve bietet
  • Die Fähigkeit, sehr präzisen Code zu schreiben (dh ternärer Operator, Null-Koaleszenz, Null-Erweiterung)
  • Die Unfähigkeit , möglicherweise verwirrenden Code zu schreiben (dh keine ternären Operatoren usw.)

Seht jeder, was hier los ist? Praktisch jedes Aufzählungszeichen kann als Zeichen von "Macht" interpretiert werden, und genau das Gegenteil!

Irgendjemand dachte offensichtlich, dass variable Variablen eine großartige Idee seien, die die Sprache sehr mächtig machen würde . Ich werde nicht beurteilen; Ich bin kein PHP-Typ.

Ich schlage vor, dass wir alle anstelle dieses ganzen Unsinns aus dem Heiligen Krieg diese wirklich einfache Definition verwenden:

Die mächtigste Sprache ist diejenige, mit der Sie in kürzester Zeit das qualitativ hochwertigste Produkt zu den niedrigsten Kosten versenden können.

Vage? Darauf kannst du wetten. Deshalb muss jeder, der sich als Profi bezeichnen will, sowohl die Programmierkonzepte als auch die Projektdomäne verstehen . Nur so können Sie entscheiden, was für Sie "mächtig" ist.

Andernfalls bringen Sie möglicherweise nur ein wirklich großes Messer in einen Schusswechsel.

Aaronaught
quelle
1
+1 Dies ist die einzige Definition, die versucht, alle verschiedenen Begriffe der Sprachmacht zu berücksichtigen. Mir gefällt besonders, wie Sie zeigen, dass widersprüchliche Funktionen als leistungsstark angesehen werden können. Informatik ist die Wissenschaft der Kompromisse, auch bei der Wahl der Sprache.
CodexArcanum
11

Ich bin vielleicht voreingenommen, weil ich ein Systemprogrammierer bin. Ich denke, eine Programmiersprache, die für die gesamte Kernel-, System-, Server- und Anwendungsprogrammierung verwendet wird, oder die mehrere Programmierparadigmen unterstützt, oder beide, kann als "leistungsfähig" bezeichnet werden.

C, C ++, D sind mächtig, aber das ist natürlich nur meine bescheidene Meinung.

grokus
quelle
Sie würden Java für die Programmierung auf Kernel-Ebene verwenden oder verstehe ich Sie falsch?
Davy8
@ Davy8, Sie haben recht, nach meiner eigenen Definition hätte ich Java nicht einbinden sollen.
Grokus
5

Es gibt einige Definitionen von Macht, die über die Vollständigkeit von Turing hinausgehen. Mark zitierte, was ich tendenziell als "die Paul Graham-Definition" betrachte. Es ist eine ziemlich gute Definition mit einem schwerwiegenden Fehler: Es ist falsch. Es ist theoretisch eine sehr gute Definition der Sprachkraft, aber Sie wissen, was sie über den Unterschied zwischen Theorie und Praxis sagen ...

Wenn jeder in der Lage wäre, perfekten Code zu schreiben, der nicht nur fehlerfrei, sondern auch absolut zukunftssicher ist, dann wäre die Definition von Paul Graham korrekt. Das ist aber offensichtlich nicht der Fall. In der Praxis wird der größte Teil der Zeit und des Aufwands für das Software-Engineering nicht durch die erstmalige Erstellung des Produkts, sondern durch die anschließende Wartung in Anspruch genommen. Abhängig davon, welche Statistiken Sie anhören (und dies ist wahrscheinlich von Projekt zu Projekt sehr unterschiedlich), kann die Wartung zwischen 60% und 90% des Gesamtaufwands eines Programms ausmachen.

Die Wartung wird häufig von anderen Personen als der Person durchgeführt, die den Code ursprünglich geschrieben hat, und häufig Monate oder sogar Jahre nach dem ersten Schreiben des Codes. Dies bedeutet, dass es sich auch für den ursprünglichen Codierer möglicherweise um den Code anderer Personen handelt Punkt. Wenn Sie während der Wartung produktiv sein möchten, müssen Sie in der Lage sein, die ursprüngliche Absicht des Codes durch Lesen schnell festzustellen.

Daher ist eine leistungsfähigere Sprache eine Sprache, die das schnelle Lesen von Code erleichtert, und keine, die das schnelle Schreiben von Code erleichtert . Es besteht tendenziell eine gewisse Überschneidung zwischen den beiden Konzepten, aber die Konzepte sind häufig auch widersprüchlich, da in der knappen Syntax häufig Details ausgelassen werden, auf die ein Compiler / Interpreter viel einfacher schließen kann als ein Wartungsprogrammierer.

BEARBEITEN: Es gibt einen weiteren wichtigen Punkt bei der Beschreibung der Kraft einer Sprache: die Bandbreite der Konzepte, die Sie ausdrücken können, und wie leicht Sie beide Enden erreichen können. Paul Graham bewertet diesen gerne danach, wie hoch das Abstraktionsniveau sein kann, aber das ist nur die Hälfte davon. Jede Sprache, die eine niedrigere Abstraktionsgrenze auferlegt, unter die Sie bei Bedarf nicht gehen können, ist verkrüppelt, weil die Details, die weg abstrahiert werden, aus einem bestimmten Grund vorhanden sind. Dies ist der Unterschied zwischen einer leicht lesbaren Spielzeugsprache wie COBOL und einer leicht lesbaren, leistungsstarken Sprache: COBOL verfügt über keine Zeiger und keinen Zugriff auf Inline-Assemblys, in denen Sie Berechnungen ausdrücken können, auch wenn diese für COBOL nicht gut geeignet sind.

COBOL ist auch nicht besonders gut darin, das obere Ende des Abstraktionsspektrums zu erreichen. Laut Wikipedia gibt es "keine benutzerdefinierten Typen und keine benutzerdefinierten Funktionen", was es sehr schwierig macht, Algorithmen und Datenstrukturen zu erstellen.

Mason Wheeler
quelle
1
Das Problem, das ich damit habe, ist, dass es auf COBOL als eine sehr mächtige Sprache hinzuweisen scheint.
David Thornley
2
Ich nehme an, Sie kennen Lisp nicht? :)
Dash-Tom-Bang
1
@Matt: Das ist die Sache. Wofür eine Sprache verwendet wird, hängt davon ab, wofür eine Sprache verwendet werden kann. Mit Python können Sie viel weniger tun als mit einer Sprache, die keine speicherbezogenen Details abstrahiert.
Mason Wheeler
3
-1 Aufgrund der impliziten Vorstellung, dass kürzerer, ausdrucksvollerer Code schwieriger zu pflegen ist. Sie haben beide gemeinsamen Bedeutungen der Sprachkraft (Ausdruckskraft vs. Offenheit) in einem Konzept zusammengefasst, das nur zur Hälfte eine der beiden ursprünglichen Ideen zum Ausdruck bringt.
CodexArcanum
1
@ Jörg W Mittag: Sie haben Recht, aber ich denke, der von mir zitierte Satz bezieht sich auf die direkte Steuerung der Hardwareressourcen (z. B. Speicher): C ++ gibt Ihnen mehr Kontrolle. Wenn Sie eine virtuelle Maschine implementieren, haben Sie natürlich die volle Kontrolle, aber ich denke, Mason Wheeler bezog sich auf die Kontrolle über die reale Maschine.
Giorgio
4

Dies wurde wiederholt ausführlich diskutiert (z. B. auf comp.lang.lisp, mehrmals). Ich glaube, niemand hat jemals eine "richtige" Antwort gefunden, aber viele Leute haben Antworten gefunden, die mir offensichtlich falsch erscheinen.

Lassen Sie mich in den Antworten, die ich hier sehe, die Antwort von Mason Wheeler auswählen. Auf der einen Seite die Themen er Abdeckungen sind wichtig - aber auf der anderen Seite kann ich nicht ganz vorstellen , dass sie überhaupt im Zusammenhang Aufruf „Macht“ . Es ist ein bisschen so, als würde er sagen, sein Honda Mini-Van sei leistungsstärker als ein Top-Kraftstoff-Dragster, weil er sicherer, leiser, handlicher, geräumiger und komfortabler ist. All dies ist absolut wahr und es ist alles wichtig. Diese Faktoren (unter anderem) machen den Minivan für die meisten Menschen praktischer und vernünftiger - aber sie ändern nichts an der Tatsache, dass der Motor des Minivans nur etwa 250 PS leistet, während der Dragster etwa 8000 PS leistet.

Das Problem ist natürlich, dass es bei Fahrzeugen eine klare Definition gibt, was "Kraft" ausmacht und was nicht. Bei den Programmiersprachen scheint es mir, als würde die Diskussion bedeuten, Handling, Komfort, Geschwindigkeit, Ladekapazität und Reichweite als Teil der "Kraft" zu behandeln. Das Ergebnis sind Fäden, die endlos weiterlaufen und viel mehr Wärme als Licht erzeugen. Die meisten der auftretenden Fragen hängen im Wesentlichen davon ab, wie wichtig Sie völlig unabhängigen und orthogonalen Merkmalen beimessen. Beispielsweise ist die Fähigkeit, die MMU in Assemblersprache zu programmieren, mehr oder weniger "leistungsfähig" als die Fähigkeit, Funktionen auf höherer Ebene zu erstellen in Haskell? Zumindest IMO, es gibt keine sinnvolle Möglichkeit, die beiden zu vergleichen, und es gibt keine sinnvolle Antwort auf die Frage "

So sehr ich es auch hasse, muss ich sagen, dass in diesem Fall die einzig sinnvolle Antwort im Grunde genommen eine relativistische ist - eine mächtige Sprache, die Ihnen dabei hilft, das zu erreichen, was Sie wollen. Unterschiede in den Zielen der Menschen machen die meisten "absoluten" Machtmessungen bestenfalls bedeutungslos.

Jerry Sarg
quelle
3

Das richtige Gleichgewicht zwischen Kürze und Flexibilität.

Gute Frage. Angesichts der Tatsache, dass viele Sprachen "Turing complete" sind, können wir sie alle in Bezug auf ihre theoretischen Fähigkeiten auf die gleiche Grundlage stellen. Das machen wir aber nicht, weil sich Sprachen offensichtlich voneinander unterscheiden. Und was ist der Unterschied?

Der Unterschied ist die Fähigkeit, mit sehr wenig viel zu sagen . Wenn wir bis zum Äußersten springen könnten, könnte ich eine Sprache erstellen, die die beste Sprache für die automatische Initialisierung eines Content-Management-Systems mit nur einem Zeichen, "c", ist. Aber worum würde es dabei gehen? Sicher, es ist kraftvoll in dem Sinne, dass es sehr kurz ist, aber es ist nicht flexibel. Was Sie wollen, ist eine Sprache, mit der Sie viele verschiedene komplexe Dinge sagen können, ohne zu wortreich zu sein. Ohne wie eine Versammlung zu sein, fähig zu allem unter der Sonne, unendlich flexibel, aber extrem wortreich.

Eine mächtige Sprache ist eine Sprache, mit der Sie viele verschiedene Dinge mit der geringstmöglichen Länge sagen können.

Mark Canlas
quelle
1
-1. Es tut mir leid, aber das ist nicht nur ein Missverständnis, sondern auch ein gefährliches, da es die Produktivität im weiteren Verlauf erheblich beeinträchtigen kann.
Mason Wheeler
@ Mason Wheeler: Könnten Sie näher darauf eingehen?
Joey Adams
@ Joey: Siehe meine Antwort auf diese Frage.
Mason Wheeler
1

Sobald Sie Turing vollständig getroffen haben (und es ist für eine Sprache einfach, dies zu tun), bedeutet "Macht" nicht viel, in dem Sinne, dass alles, was Sie in einer Turing-vollständigen Sprache sagen können, auch in einer anderen Sprache gesagt werden kann. Die Antwort von Mark Canlas spricht für sich : Kürze und Flexibilität machen den Unterschied.

Matthias Felleisens Aufsatz " Über die Ausdruckskraft von Programmiersprachen" ist dennoch eine interessante Lektüre. Darin versucht er, den Begriff der Ausdruckskraft in Sprachen zu formalisieren.

Frank Shearar
quelle
Das stimmt übrigens nicht wirklich. Ich habe Sprachen gesehen, die vollständig sind, aber weniger mächtig als andere Sprachen. Ein einfaches Beispiel: Betrachten Sie eine Sprache, die nur Ganzzahlen und Zeichenfolgen als Datentyp hat, keine Möglichkeit zur Konvertierung zwischen diesen, willkürliche Berechnung für Ganzzahlen und nur Verkettung und Vergleich von Zeichenfolgen für Zeichenfolgen. (Ich habe mit einer solchen Sprache gearbeitet.) Turing ist vollständig, kann jedoch keine willkürlichen Funktionen für Zeichenfolgen ausdrücken. Wenn Sie also mehr Funktionen hinzufügen, wird die Rechenleistung erhöht.
Reinierpost
@reinerpost - sagte Turing-complete-Sprache kann immer noch beliebige Funktionen auf Zeichenketten berechnen, es muss sie nur auf eine andere Weise darstellen. Die Vollständigkeit zu prüfen ist ziemlich orthogonal zur Frage, welche Datentypen verfügbar sind. Zum Beispiel haben einige Sprachen, die vollständig sind, keine Datentypen und stellen einfach alles mit Funktionen dar - und müssen für die Arithmetik auf Dinge wie Church Encoding zurückgreifen.
Mikera
1

Es scheint viel Uneinigkeit darüber zu geben, was sprachliche Macht ausmacht. Ist es Kürze, Lesbarkeit, Anpassungsfähigkeit oder einfach nur Vollständigkeit? Ich denke, dass all diese Faktoren eine Rolle spielen. Daher ist es vielleicht am besten, wenn man sie in Bezug auf statistische Punkte betrachtet. Ja, ich spreche hier von einem Pen-and-Paper-Rollenspiel.

Die Idee ist, dass jede Sprache (ungefähr) die gleiche Anzahl von "Punkten" hat, die beliebig auf mehrere Kategorien verteilt werden können. Zu Diskussionszwecken werden lediglich die Faktoren Kürze, Lesbarkeit und Flexibilität genannt. Eine Sprache kann dann äußerst knapp und flexibel sein, ist aber folglich sehr schwer zu lesen. oder sehr gut lesbar und flexibel, aber sehr ausführlich.

(Die Anzahl der Punkte, die eine Sprache zu verteilen hat, hängt von den Fähigkeiten des Designers und Implementierers ab. Nehmen wir jedoch an, dass alle Sprachdesigner gleich gut darin sind, was sie tun.)

Wenn ein Sprachdesigner beschließt, die Stärke einer Sprache in einer Kategorie zu erhöhen, entzieht er logischerweise jeder anderen Kategorie einen Bruchteil dieser potenziellen Stärke. Aus diesem Grund wird so oft gesagt, dass es beim Design von Programmiersprachen nur um Kompromisse geht. Aus dieser Sicht ist die Gesamtstärke einer Sprache immer noch nicht definierbar, und wir müssen auf die bewährte Methode zur Kategorisierung von Sprachen anhand ihrer relativen Stärken zurückgreifen. Nicht befriedigend? Schade.

Sie können auf zwei Arten argumentieren: Eine mächtige Sprache ist eine Sprache mit einer relativ gleichmäßigen Punkteverteilung (Alleskönner, Meister ohne Punkte) oder mit so vielen Punkten wie möglich in einem Bereich, ohne andere unbeaufsichtigt zu lassen (Spezialist). Es gibt keine "Renaissance-Menschensprache" mit perfekter Beherrschung in zahlreichen Bereichen. Und wenn das Ihre Definition der mächtigsten Sprache ist, dann haben Sie einfach kein Glück.

Zur weiteren Lektüre wird in diesem Artikel (zufällig auch von Paul Graham, der gemischte Meinungen zu haben scheint) die Idee angesprochen , dass Programmiersprachen in der Tat unterschiedlich leistungsfähig sind , auch wenn es schwierig zu bestimmen sein mag . Er argumentiert ziemlich überzeugend, dass es sehr leicht zu erkennen ist, wie eine Sprache weniger mächtig ist als die von Ihnen bevorzugte - es fehlt Feature X -, aber es ist sehr schwer zu erkennen, wie eine wirklich mächtigere Sprache tatsächlich so ist - es ist im Grunde gleichbedeutend mit Sprache X, aber mit ein paar anderen Sachen. Ich hinterlasse Ihnen ein Zitat aus dieser Zeitung:

Die einzigen Programmierer, die in der Lage sind, alle Machtunterschiede zwischen den verschiedenen Sprachen zu erkennen, sind diejenigen, die die mächtigsten verstehen. (Dies ist wahrscheinlich, was Eric Raymond damit gemeint hat, dass Lisp Sie zu einem besseren Programmierer gemacht hat.) Sie können den Meinungen der anderen aufgrund des Blub-Paradoxons nicht vertrauen: Sie sind mit der Sprache, die sie gerade verwenden, zufrieden, weil sie die Sprache diktiert wie sie über Programme denken.
Jon Purdy
quelle
Ich bin mit Ihrem Modell nicht einverstanden, dass alle Sprachen notwendigerweise die gleiche Anzahl von Punkten in ihrer Verteilung haben. Nehmen wir das extreme Beispiel von Brainf * ck, und wir können leicht sagen, dass es mit keiner modernen Sprache vergleichbar ist, auch wenn es nur um die Gesamtpunktzahl geht. dh es ist kein Nullsummenspiel in der Programmiersprache - Sprache beginnt nicht mit x Punkten und verteilt sie, sie beginnen mit 0 und bekommen Punkte je nach Ausstattung. Dass es Kompromisse geben muss, ist natürlich selbstverständlich, aber alle Entscheidungen sind nicht gleich (zumindest meine Meinung).
n1ckp
Ich habe nicht gesagt, dass alle Sprachen notwendigerweise die gleiche Anzahl von Punkten haben. Ich sagte, dass alle betrachteten Sprachen (dh Sprachen, die für den tatsächlichen Gebrauch entworfen wurden) ungefähr die gleiche Anzahl haben. Esoteric Sprachen sind ein pathologischer Fall , weil sie nicht entworfen in erster Linie nützlich zu sein. Ich habe aus Gründen der Argumentation vereinfacht, da es nicht sinnvoll ist, zu versuchen, Sprachen anhand der bloßen "Anzahl von Features" zu unterscheiden, wenn Features tatsächlich zählbar sind.
Jon Purdy
Es tut mir leid, dass ich Ihren Beitrag noch einmal gelesen habe und ich muss zustimmen, dass ich etwas zu schnell gelesen habe. Trotzdem bin ich mir nicht einig, dass jede (Mainstream-) Sprache ungefähr die gleichen Punkte hat. Nehmen wir Java und C ++, weil sie eine Sprache sind, die ich etwas gut kenne. Ich bin mir ziemlich sicher, dass c ++ leistungsfähiger als Java ist, nur weil c ++ im Grunde alles ausmacht, was Java macht (außer gc - aber Java bietet dann auch keine manuelle Speicherverwaltung an) und noch mehr (echte Vorlagen FTW). Das, worüber ich etwas
sagen
beim Vergleich nur Mainstream-Sprachen.
n1ckp
0

Programmiersprachen sind Werkzeuge - nicht mehr und nicht weniger. Einige Werkzeuge sind äußerst spezialisiert und für bestimmte Zwecke gut geeignet. andere werden verallgemeinert und bis zur Nutzlosigkeit vereinfacht.

Ich würde behaupten, dass die "mächtigste" Sprache diejenige ist, mit der Sie Ihre Ziele mit einem Minimum an Zeit, Energie und anderen Ressourcen erreichen können. Das ist die Sprache, die den größten ROI bietet. In einigen Situationen könnte es C sein; in anderen Java; in noch anderen, Haskell.

Das Beste, was Sie tun können, ist, sich mit einer Vielzahl von Sprachen und deren Verwendungszweck vertraut zu machen. Dann, wenn der Zeitpunkt gekommen ist, ein neues Projekt zu beginnen, können Sie eine fundierte Entscheidung treffen, welche am besten geeignet wäre.

Benjamin Chambers
quelle
-1

Diskussionen über Programmiersprachen sind - IMHO - Diskussionen über Mail-Clients in einigen Linux-Newsgroups ähnlich: Sie neigen dazu, ein Flammenkrieg zu sein. Ich kann mich an Zeiten erinnern, als VB6 beliebt war. Es wurde sogar argumentiert, dass es überhaupt keine Programmiersprache ist, während andere beeindruckende Anwendungen damit erstellten.

Ich denke, Programmiersprachen unterscheiden sich bereits im Konzept, da die Entwickler bei der Erstellung / Gestaltung der Sprache unterschiedliche Dinge im Auge hatten. Eine Sprache, die zu einem Zweck passt - und unter diesen Umständen mächtig ist -, passt möglicherweise nicht zu einem anderen. Die Sprache mächtig zu nennen oder nicht, ist dann rein subjektiv. Trotzdem glaube ich nicht, dass es eine Metrik gibt, die angewendet werden kann.

Sascha
quelle
+1, um ungeklärten Abstimmungen entgegenzuwirken, und weil ich dem im Allgemeinen zustimme. Verwenden Sie eine Sprache für die Aufgabe, für die es entwickelt wurde. Schreiben Sie keine komplexen GUIs in C, schreiben Sie keine komplexen Algorithmen oder Betriebssysteme in VB6
Gerry
-1

Sie sind alle Werkzeuge in Ihrer Werkzeugkiste. Ein Hammer kann mächtig sein, aber nicht, wenn Sie einen Schraubenschlüssel benötigen. C / C ++ ist großartig, wenn Sie ein Systemprogrammierer sind, aber Adobe Flash passt wahrscheinlich besser zu der Gaming-Website, die Sie erstellen möchten.

bigtang
quelle
-1

Die leistungsstärkste Programmiersprache ist diejenige, die das folgende lineare Programmierproblem löst :

Maximieren

      Geschwindigkeit der Entwicklung
    + Einfache Codelesung
    + Einfache Fehlersuche
    + Prägnanz / Kürze des Ausdrucks
    + Lehren / Lernen
    - CPU-Auslastung
    - Speicheranforderungen

Vorbehaltlich

  • Es muss Turing Complete sein.
  • Es muss multiparadigmatisch sein : funktional, objektorientiert, logische Programmierung, Constraint-Programmierung, Parallelität, verteiltes Rechnen usw.
  • Es muss vielseitig sein und die Erstellung von Befehlszeilenschnittstellen, Komponentenbibliotheken, Servern, GUIs und Webanwendungen ermöglichen.
  • Es muss portabel sein , dh in plattformübergreifenden Umgebungen einfach zu portieren und zu warten sein.
  • Es muss anpassungsfähig sein , dh offen für Veränderungen und in der Lage, sich weiterzuentwickeln, wenn neue Hardware (Quantenchips), neue Paradigmen und andere technologische Innovationen auftreten.
  • Es muss die Entwicklung von Bibliotheken (wie CPAN, CTAN und CRAN) fördern.
  • Es muss kostenlos und Open Source sein .

(Und ja, ich weiß, ich habe bereits eine völlig widersprüchliche Antwort gepostet. Das liegt daran, dass ich ein Dialektiker bin.)

Ein weiterer
quelle
-2

Dies wurde in Bezug auf natürliche Sprachen geschrieben, aber ich denke, dass es auch für Programmiersprachen angemessen ist:

Der Glaube, dass einige Sprachen anderen grundsätzlich überlegen sind, ist weit verbreitet, basiert jedoch nicht auf sprachlichen Fakten. Einige Sprachen sind in einem bestimmten Zeitraum der Geschichte natürlich nützlicher oder angesehener als andere, aber dies liegt an der herausragenden Stellung der Sprecher zu diesem Zeitpunkt und nicht an irgendwelchen inhärenten sprachlichen Merkmalen.
- David Crystal (Hrsg.). Die Cambridge Encyclopedia of Language 2 / e (1997). S.7

"Macht" ist einfach nicht einer Sprache über einer anderen zuzuschreiben. Es wäre albern zu sagen, "Chinesisch ist eine mächtigere Sprache als Koreanisch." Ebenso ist es albern zu sagen, "APL ist eine mächtigere Sprache als COBOL."

Es gab mehrere Versuche, die sprachliche Kraft mit einer objektiven Maßnahme gleichzusetzen. Ich glaube, diese Versuche schlagen fehl:

  • Es kann einfacher sein, in den USA einen Job zu finden, wenn Sie amerikanisches Englisch sprechen, als Maori zu sagen. Ebenso ist es ohne Zweifel einfacher, einen Job als Programmierer für Java oder C zu bekommen, als für LISP oder J. Aber dieser wirtschaftliche Vorteil spiegelt sicherlich keine angeborene Macht der Sprache wider. Es geht um die Macht der Sprecher der Sprache.
  • "Hi" ist nicht besser als "ni hao" oder "shalom", weil es kürzer ist. Auch wenn eine Funktion in APL prägnanter ausgedrückt werden kann als in COBOL, spiegelt dies keine angeborene Macht der Sprache wider.

Meiner Meinung nach sind Diskussionen über "die Macht einer Sprache über eine andere" Ausdruck des Überlegenheitsgefühls des Sprechers gegenüber einer anderen Gruppe. Kurz gesagt, seine Vorurteile und Stereotypen. Natürlich glauben Menschen, die wirklich Vorurteile haben, wirklich sehr stark an ihre Stereotype, und es ist unwahrscheinlich, dass Sie sie überreden könnten, ihre Meinung zu ändern.

Ein weiterer
quelle
Ich stimme dir nicht zu. Für ein einfaches Beispiel denke ich, dass niemand etwas anderes sagen würde als zu sagen, als dass es eine mächtigere Sprache gibt als Brainf * ck (sagen), auch wenn es theoretisch vollständig ist (ich denke). Der Punkt ist, dass 'kraftvoll' eine bestimmte Eigenschaft ist, die nichts mit der Tatsache zu tun hat, dass sie alle 'vollständig' sind. Ich bin damit einverstanden, dass es etwas subjektiv sein kann, aber zu sagen, dass alle Sprachen in Bezug auf 'Powerfullness' gleich sind, scheint ziemlich weit hergeholt.
n1ckp
1
@ n1ck: Sagst du Power = Lesbarkeit? Und :. Die mangelnde Lesbarkeit von BF impliziert einen Mangel an Leistung? APL und J sind ebenfalls sehr schlecht lesbar, aber sie sind äußerst nützlich und prägnant (obwohl ich Nützlichkeit und Prägnanz sicherlich auch nicht mit Macht gleichsetze). In die entgegengesetzte Richtung ist COBOL sehr gut lesbar. es ist geradezu wortreich; aber auch dies macht es kaum leistungsfähiger als APL oder BF. BF ist sehr amüsant; es hat die Macht zu amüsieren; aber das ist nicht Power qua Power. Das Problem ist, dass niemand eine gute Theorie der Macht zu haben scheint, hinter der er einen Konsens erzielen kann.
andere
1
Nein, ich habe nicht gemeint, dass Macht = Lesbarkeit. Ich stimme Ihrer Ansicht nicht zu, dass alle Sprachen gleich sind und dass wir die Sprache nicht in Bezug auf 'Powerfullness' vergleichen können, wie auch immer Sie sie definieren. Meiner Meinung nach ist eine grundlegende Lesbarkeit erforderlich, um der Sprache eine Aussagekraft zu verleihen, aber das ist nicht wirklich die Frage. Wenn wir die Frage wirklich beantworten wollen, müssen wir natürlich zuerst die Macht definieren, aber aus meiner Sicht ist dies nicht das Gleiche wie "in jeder Situation am besten". Ihre Antwort scheint darauf hinzudeuten, dass Sie sie so interpretiert haben (dh nicht am besten) Sprache für alles, was ich irgendwie zustimme).
n1ckp