Warum kann es keine „universelle“ Programmiersprache geben, die allen Zwecken dient? [geschlossen]


57

Warum nicht die besten Funktionen aller vorhandenen Programmiersprachen kombinieren und in eine universelle Programmiersprache einfügen?


23
Der Begriff "Bester" ist subjektiv, sodass Sie niemals einen allgemein akzeptierten Bester haben würden. Natürlich gibt es eine ganze Reihe von Sprachen, die sich für eine breite Palette von Entwicklungen auf allen Plattformen eignen. C ++ und Java sind die beiden wichtigsten.
GroßmeisterB

5
@GrandmasterB Du hast C #
Daniel Little am

15
Es gibt, es heißt "C"
Martin Beckett

9
Wir als Spezies haben die angeborene Fähigkeit, (aufgrund unserer Individualität) nicht zuzustimmen , daher werden wir uns niemals auf das einigen, was universell erforderlich ist, und daher wird es niemals einen geben (zumindest keinen, der von Menschen erschaffen wurde!)
Nim

9
Eine universelle Programmiersprache? Sie meinen, analog zu der universellen menschlichen Sprache , zu der alle vor so vielen Jahren gewechselt haben?
Kyralessa

Antworten:


116

Aus dem gleichen Grund benutzt du kein Schweizer Taschenmesser , um ein Huhn zu schnitzen ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

Das Schweizer Taschenmesser hat in der Regel eine Klinge sowie verschiedene Werkzeuge wie Schraubendreher und Dosenöffner und viele andere. Diese Aufsätze werden über einen Drehpunktmechanismus im Griff des Messers verstaut ...

Das Design des Messers und seine Flexibilität haben beide zu weltweiter Anerkennung geführt ...


26
Aus dem gleichen Grund bringen Sie keinen Minivan zu einem Drag Race. Aus dem gleichen Grund bringen Sie keine Wasserpistole zum Duell mit.
Chris

19
@ Chris Was ist, wenn es ein Wasserpistolen-Duell ist?
Rusty

44
Aus dem gleichen Grund geht man nie mit einem Sizilianer in Kontakt, wenn der Tod auf dem Spiel steht.
Rusty

6
Wenn du ein Schweizer Taschenmesser hättest, das alle Dinge erledigt, die du zum Bau eines Hauses benötigst, wäre es dann in irgendeinem von ihnen gut?
Brad Mace

4
Diese Antwort ist eine schreckliche Analogie. Vielleicht hätten Sie geschrieben: Weil die französische Sprache eine andere Ausdruckstreue erlaubt als die englische, hätte mir die Analogie vielleicht besser gefallen. Aber Computersprachen sind weder "Dinge" noch menschliche Sprachen. Die richtige Antwort lautet: Wir wissen es nicht. Es wird mehr Einsicht erfordern, wie Menschen Logik ausdrücken und wie sie an diesen Punkt gelangen. Darüber hinaus sind einige Sprachen "Metasprachen", die andere DSLs ausdrücken können. Sollen wir diese in Ihre Frage aufnehmen?
Dibbeke,

80

weil

  1. niemand möchte den gesamten Legacy-Code neu schreiben.
  2. Es ist schwierig, sich auf alle Zwecke zu einigen
  3. Sobald Sie eine umfassende Liste von Zwecken erstellt haben, werden sie sich ändern, bevor Sie sie erstellen können.
  4. Jemand würde aufgrund eines neuen Zwecks eine völlig andere Sprache anfangen.
  5. Microsoft
  6. Apfel
  7. Open Source
  8. Was würden wir mit all den Babel-Fischen machen?
  9. Konnte SQL nicht einmal universell machen.

Du hast kurz angehalten. Ich hatte eine dieser ha-ha-only-seriösen "Top 10" -Listen erwartet.
Jeffrey Hantin

4
+1 für die Verhinderung einer "Save the Babel Fish" -Kampagne. Verdammte Hippies.
Rusty

2
Was den Babel-Fisch betrifft, mach Sushi!
Muad'Dib

1
In Bezug auf Punkt 1 muss der gesamte Legacy-Code irgendwann entweder ohnehin mit der neuesten Version von Code / Bibliotheken neu geschrieben werden oder kann ohne einen lächerlichen Betrag an Supportkosten nicht effektiv ausgeführt werden.
Michael

38

Was Sie in der Programmierung haben, ist eine sehr große Problemdomäne. Diese Domain reicht extrem und in viele Richtungen.

Aus diesem Grund sind eingebettete Flugsteuerungen in C und Websites in PHP, Java, Rails, .NET und vielen anderen geschrieben.

Für den eingebetteten Flugcontroller habe ich ungefähr 128 KB Arbeitsspeicher. Wenn mein Code eine unbehandelte Ausnahme darstellt, stürzt das Flugzeug ab, 200 Menschen sterben und ich werde angeklagt, 1 Mrd. USD zu tunen und muss Ingenieure an alle schicken Flughafen in der Welt zu beheben Flugzeuge, die geerdet sind, verlieren meine Kunden $ 10M / Tag. Ich muss mit einer Sprache arbeiten, die sehr eng ist und eine kleine Anzahl von sich bewegenden Teilen hat, die schief gehen könnten.

Für meine Webanwendung stehen mehrere GB Arbeitsspeicher zur Verfügung, aber die Netzwerkgeschwindigkeit ist begrenzt (in geringerem Maße täglich, aber dies ist wahrscheinlich die größte Webbeschränkung). Ich werde mir eine Sprache ansehen, die mir eine Menge Funktionen bietet und eine Ausgabe erzeugt, die so schnell wie möglich übertragen werden kann. Es ist mir egal, ob meine Website ausfällt, ich werde vielleicht ein paar Verkäufe (100 US-Dollar) verlieren und den bombardierten Anwendungsfall patchen müssen, keine große Sache.

Websites wurden seit über 15 Jahren nicht mehr in C geschrieben (jemand macht CGI-Skripte?) Und soweit ich weiß, beginnen Fluglotsen erst jetzt, sich mit C ++ zu befassen, aber selbst dann auf sehr eingeschränkte Weise.


3
Die meisten Websites, die tatsächlich Geld verdienen, verlieren mehr als 100 US-Dollar, wenn es zu erheblichen Ausfallzeiten kommt. Das soll nicht heißen, dass es mit einer Situation auf Leben und Tod vergleichbar ist, aber das Risiko wird dadurch mehr als ein bisschen heruntergespielt.
Aaronaught

3
Hast du eine Ahnung, wie flippig Facebook ist. Sie haben vor kurzem alle 37 Minuten einen Push-Code veröffentlicht. Ihre Site ist ständig auf die eine oder andere Weise überlastet und sie haben eine Million Tickets in ihrem Backlog. Der Punkt ist, dass mit dem Web niemand sterben wird, Sie "könnten" ein paar Verkäufe verlieren, aber insgesamt nicht wirklich viel Risiko. Die meisten Probleme, mit denen Sie konfrontiert sind, betreffen nur einige wenige Kunden, nicht die gesamte Basis
Bill Leeper,

24
  1. Geh in deine Garage (oder in die Garage deiner Eltern).
  2. Öffnen Sie den Werkzeugkasten.
  3. Wenn Sie mehr als ein Tool sehen, überlegen Sie, wie dies auf Ihre Frage zutrifft.

Wenn Sie keinen Werkzeugkasten haben oder nur einen dieser kleinen Hämmer mit den Schraubendrehereinsätzen im Hohlheft haben, dann habe ich großes Mitgefühl für Sie.

Ernsthaft. Wenn Sie in eine Autowerkstatt gehen, hat Ihr Mechaniker dann nur ein einziges Allround-Werkzeug in seiner Werkzeugkiste? Er (oder sie) ist ein Profi mit professionellen Werkzeugen, die speziell für die Durchführung verschiedener Autoreparaturaufgaben entwickelt wurden.

Ebenso sollten professionelle Softwareentwickler über eine ausreichende Anzahl von Tools verfügen, um ihren Beruf auszuüben. Wenn Sie Ihre Toolbox öffnen und nur einen Philips-Schraubendreher sehen, können Sie sich selbst nicht als Profi bezeichnen.

Sie können einen Bolzen mit einem Gabelschlüssel, einem Ringschlüssel, einem Ratschenschlüssel oder einem verstellbaren Schlüssel drehen. Sie können sogar einen Bolzen im Notfall mit einer Gleitgelenkzange ungeschickt drehen, mit geringfügigen bis schweren Schäden. Mit einem Vorschlaghammer ist es jedoch recht schwierig, einen Riegel zu drehen.


Das ist für die Aufnahme von "Elterngarage". Das macht es wirklich klarer, da ich keine Garage habe.
Dan Rosenstark

5
Eine bessere Analogie wäre, dass eine Sprache eher einer Toolbox gleicht als einem einzelnen Tool.
Tom Hawtin - Tackline

4
Der Karton kann 20 verschiedene Werkzeuge enthalten. Aber ich wette, Sie brauchen nur eine Sprache, um sie zu beschreiben.
ThomasX

2
Heutzutage ähnelt die Toolbox eher den Bibliotheken, die für die betreffende Sprache verfügbar sind.
Michael

18

Eine andere Art der Antwort auf die anderen - ich denke tatsächlich, dass eine Sprache möglicherweise zu einer "universellen" Sprache wird, die die Merkmale und Paradigmen vieler anderer Sprachen zulässt, obwohl es sich möglicherweise nicht um eine streng entworfene Sprache handelt, an die Sie vielleicht denken.

Um die obige Analogie von brettmjohnson zu verwenden , ist die Idee, dass jede Programmiersprache das Werkzeug in einer Schachtel (oder auf einem Schweizer Taschenmesser) ist, die Annahme, die jeder macht, aber wirklich eine fehlerhafte Annahme.

Was wäre, wenn die Programmiersprache die Toolbox wäre?

Ich meine, was ist, wenn Sie der Sprache nach Belieben Features hinzufügen und entfernen können und Ihre eigene Toolbox mit den Tools haben, die Sie benötigen - auch wenn die Tools für unterschiedliche Zwecke bestimmt sind.

Das Konzept existiert teilweise schon. Mit Sprachen wie Nemerle können Sie beispielsweise der Sprache eine Syntax hinzufügen. Daher können Sie möglicherweise die "beste Funktion von Sprache X" verwenden und sie Nemerle (oder Ihrer eigenen) hinzufügen. Dies bedeutet nicht zwangsläufig, dass Sie Ihre eigenen Makros ständig schreiben müssen - jede Sprache (oder jedes Paradigma) kann in einem Makro in einer Standardbibliothek definiert werden -, sodass Sie import Haskell; import Prolog;die beiden Sprachen so schreiben können, als ob sie Teil von wären Ihre Sprache?

Die Frage ist dann: Wie bringen Sie die Merkmale verschiedener Sprachen / Paradigmen dazu, miteinander zu arbeiten? Obwohl ich das nicht beantworten kann, bieten Frameworks wie .Net und JVM einen Teil der Lösung - die Sprachen sind aufgrund ihrer Kompilierung zumindest teilweise kompatibel. Sie können jeden Code, der beispielsweise in C # geschrieben ist, ohne Beanstandungen in F # verwenden.

Das 'Problem' bei der heutigen Lösung ist, dass Sie diese Sprachen zusammen verwenden müssen, um sie als separate Projekte zu erstellen, die sich nicht gegenseitig referenzieren können. Sie können nur eine Einwegreferenz haben. Die Sprachbarriere besteht darin, dass jedes Projekt alle seine Dateien separat in Common Intermediate Language kompiliert, bevor ein anderes Projekt darauf zugreifen kann.

Ein Sprungbrett zur Beseitigung dieser Barriere wäre, den Code verschiedener Sprachen (z. B. C # und F #) innerhalb desselben Projekts kompilieren zu lassen. Theoretisch könnten Sie jede Datei separat kompilieren (oder in Gruppen - wenn sie Teiltypen oder Zirkelverweise haben) und dann Dateien einer anderen Sprache kompilieren, die auf diese bereits kompilierten (CIL-) Objekte zugreifen können. Sie müssten die Kompilierungsreihenfolge genau definieren, damit dies funktioniert. Bei F # ist die Kompilierungsreihenfolge jedoch bereits erforderlich.

Jedenfalls sage ich nicht "es kann definitiv eine universelle Sprache geben". Ich schlage vor, dass es das Potenzial für eine viel bessere Interoperabilität zwischen Sprachen gibt als das, was derzeit existiert. In der Realität wird es wahrscheinlich nicht sehr bald besser werden, nur aufgrund des enormen Aufwands bei der Implementierung einer Sprache und der Bibliotheken, Tools usw., die für deren Verwendung erforderlich sind.


4
Die ganze Welt ist kein PC. Die Mehrheit der Prozessoren auf diesem Planeten verfügt über weniger als 64 KB Gesamtspeicherplatz. Eine Sprache, die auf diesen Prozessoren verwendet werden kann, muss so weit reduziert werden, dass Ihre universelle Sprache als erweiterte Assemblersprache angezeigt wird. Ich denke, das würde "C" heißen.
uɐɪ

10

Die besten Eigenschaften einiger Sprachen stehen im Widerspruch zu den besten Eigenschaften anderer Sprachen.

Zum Beispiel: Typbewusste Reflexionen sind eine sehr nette Funktion, aber sie wären in einer lose getippten Sprache nicht sehr viel wert, aber lose getippte Texte können manchmal auch ein echter Vorteil sein.

Selbst innerhalb einer Sprache können Sie nicht immer die besten Funktionen gleichzeitig verwenden, da sie in Konflikt miteinander stehen.


Wenn diese Funktion jedoch entsprechend den Erfordernissen aktiviert / deaktiviert wurde, z. B .: Sie können
typabhängige

2
und wenn Sie versuchen würden, die Funktionen einer Reihe von Sprachen in einer Sprache zu kombinieren, die alles kann, würden Sie eine Menge Redundanz, Verwirrung, Fehler auf all den verschiedenen Wegen bekommen, um verschiedene Kombinationen von Funktionen zu verwenden, und eine Menge Vergeudeter Aufwand, um anzugeben, welches Paradigma Sie in dieser Zeile verwenden.

killown Sie haben Recht, aber die Lösung des Problems durch die ultrakonfigurierbare Sprache erschwert die Verwendung der Sprache, wie sie von Fennic beschrieben wird. Ich mag eine flexible Sprache, die Dinge erlaubt, auch wenn sie in manchen Fällen gefährlich sind, aber die Konfigurationsebene, die Sie benötigen, um einige Konzepte zu kombinieren, würde es komplexer machen, als einfach zurückzutreten und die Lösung in C oder so etwas zu schreiben .
Bill

1
+1 für widersprüchliche Eigenschaften
Frank Shearar

Ich denke, das Problem besteht nicht nur darin, dass Sprachfeatures in Konflikt stehen, sondern vielmehr darin, dass viele Sprachen ein zugrunde liegendes Framework annehmen, das Features enthält, die einen bestimmten Overhead erfordern, aber die Vereinfachung bestimmter Vorgänge ermöglichen. Mit Sprachen sind in der Regel auch bestimmte „typische Verwendungsmuster“ verknüpft. Die Auswahl, welche Merkmale in ein Framework aufgenommen werden sollen und welche Codierungsmuster verwendet werden sollen, beinhaltet Kompromisse. und verschiedene Kombinationen von Merkmalen und Mustern sind für verschiedene Anwendungen besser.
Supercat

7

"Vieles können, aber nichts gut." fällt mir ein.

Einige Programme erfordern Geschwindigkeit, andere viel Speicher oder schnellen Zugriff auf die Festplatte. Einige Sprachen sind gut in einer, aber schlecht in einer anderen - ich glaube nicht, dass Sie eine Sprache bekommen würden, die überhaupt gut ist.

Obwohl Sie praktisch jedes Programm in jeder Sprache schreiben können, kann nicht garantiert werden, dass das, was Sie erhalten, das "beste" Programm ist, das Sie zur Lösung dieses Problems schreiben können.


4

Es gibt. Kein Werkzeug ist die beste von allem, aber einige Tool wie viele Sprachen Programmierung dienen zu allen Zwecken, nicht am besten für alle.

Sie können das beste Werkzeug für den Job auswählen, aber es gibt Programmiersprachen, die für alle Zwecke verwendet werden können, und Sie können sie auswählen. Ich empfehle es nicht, aber es ist möglich.


4

Aus irgendeinem Grund nenne ich das "Generalisierungs- / Spezialisierungsparadoxon", das wahrscheinlich einen anderen Namen hat und eigentlich kein Paradoxon ist

Je verallgemeinerter eine Programmiersprache ist, desto mehr Code wird benötigt, um etwas zu erreichen. Je spezialisierter die Sprache, desto weniger können Sie damit erreichen.


2
Ich stimme Ihnen zu, mit der Ausnahme, dass es möglich ist, Fachbibliotheken in einer allgemeinen Sprache zu haben.
Dan_waterworth

@dan: Einverstanden, aber nur, wenn sich die Sprache darauf konzentriert, Bibliotheksschreibern Funktionen bereitzustellen. Meine beiden Lieblingssprachen sind D und Python. Beide Sprachen sind ziemlich allgemein gehalten (insbesondere D), haben jedoch viele Funktionen für Bibliotheksschreiber, sodass Sie Ihre eigenen Bibliotheken erstellen können, um die speziellen Aufgaben zu bewältigen. Ich verachte super domänenspezifische Sprachen wie Matlab und R.
dsimcha

4

Sprachen prägen das Denken der Menschen. Dies gilt für natürliche Sprachen. Wenn ein Kind nur eine Sprache mit den Zahlen "eins, zwei, viele" kennt, ist es schwierig, diesem Kind Mathematik beizubringen. (Entschuldigung, ich habe den Link nicht) Auf Englisch sprechen wir über verschiedene Zeiten, als wären sie Orte - daher kann man sich das Konzept der Zeitreise vorstellen. In einigen anderen Sprachen käme den Sprechern die Idee einer Zeitreise nie in den Sinn.

Dies gilt auch für Programmiersprachen.

Wenn wir also eine einzige Programmiersprache haben, wird jeder über alle Rechenaufgaben genau gleich nachdenken. Daher werden wir keine Alternativen untersuchen, und der beste Weg, etwas zu tun, wird unentdeckt bleiben.

Das, was wir einer universellen Sprache am nächsten kommen, ist C. C ordnet die zugrunde liegenden Hardwarekonzepte sehr genau zu (wie Dinge tatsächlich in Hardware erledigt werden) und Programme in jeder Sprache können in C konvertiert werden Aufgaben) Das Problem bei C ist grundsätzlich, dass die oben genannten Konvertierungen aus Sicht des C-Programmierers keinen Sinn ergeben.

"Lambdas" waren in C immer möglich. Die Syntax ist deaktiviert, einschließlich Code, der über das gesamte Projekt / die gesamte Datei verteilt ist. Daher war dies keine bevorzugte Lösung. Definieren Sie bei einer No-Capture / Upvalue / etc-Version eine Funktion an einer anderen Stelle und übergeben Sie einen Zeiger auf die Funktion. (siehe qsort () ) Um Lambdas mit erfassten Werten zu verwenden, steigt die Menge und Komplexität des Codes, den Sie schreiben müssen, stark an - soweit mir bekannt ist, hat noch niemand den Code für diese Programmiermethode in C geschrieben. Im Gegensatz zu Sprachen, in denen Lambdas Teil der Sprache sind und grundsätzlich überall verwendet werden.

Der wesentliche Unterschied zwischen C und C ++ ist , wie Sie C ++ fragen zu kümmern Sachen für Sie; Aber dann können Sie nicht mehr aus einer einzigen Codezeile ersehen, wie viel Sie wirklich von ihr verlangen. Die Antwort lautet: Es kommt darauf an (von all dem anderen Code).

Einige Programmiersprachen eignen sich hervorragend für bestimmte Aufgaben, aber wenn die meisten derzeit weltweit verwendeten Programme in dieser Sprache programmiert würden, wäre dies einfach nicht sinnvoll. Das heißt, wenn die Sprache verwendet werden könnte, um das Programm zu implementieren, was nicht selbstverständlich ist.


2
"In einigen anderen Sprachen würde den Sprechern die Idee einer Zeitreise niemals in den Sinn kommen." Zitat benötigt. Die Sapir-Whorf-Hypothese ist in ihrer starken Form keineswegs allgemein anerkannt.
Muhammad Alkarouri

4

Die technische Unmöglichkeit, eine universelle Sprache zu haben? Das ist totaler Unsinn. Sie könntenhaben eine universelle Sprache, die alle Grundlagen abdeckt. Das Problem ist größtenteils historisch: Verschiedene Sprachen wurden erfunden, um verschiedene Dinge zu tun und in verschiedenen Gemeinschaften verwendet zu werden. Viele von ihnen stecken fest. Hinzu kommen die Einstellungen (vi! Emacs! Wait, ich meinte Java! C #, wait, ich meinte Microsoft, Open Source usw. usw. usw.) und die allgemeine Einbettung historischer Unfälle. Schauen Sie sich die natürlichen Sprachen in einem winzigen Land an Masse wie einige europäische Länder, um zu sehen, wie verrückt dieses Thema werden kann. Einige Städte haben ihren eigenen Stolz und ihre eigene Freude, einen kleinen Dialekt, den nur sie sprechen. Nationen und Programmiergemeinschaften sind weder so unterschiedlich noch rationaler. Wenn sie es wären, würden wir alle Esperanto sprechen und in Universal etwas 'etwas' programmieren ...


1
Das Problem ist tiefer. Je mehr Optionen Sie zur Verfügung stellen, desto mehr müssen explizit angegeben werden, anstatt implizit die Funktionsweise in dieser Sprache zu bestimmen. Die Probleme werden offensichtlicher, wenn Sie Java nicht mit C #, sondern mit Prolog vergleichen. Die Funktionen von beiden in einer Sprache zu haben, würde die Syntax der zusammengesetzten Sprache verkomplizieren. Eine vernünftigere Wahl kann darin bestehen, die Syntax auf ein Minimum zu reduzieren und zuzulassen, dass jedes Feature als Metaprogrammbibliothek implementiert wird. Das ist im Grunde genommen das, was Lisp tut, obwohl sein Kern für manche Jobs nicht niedrig genug ist.
Steve314

4

Es ist ein Fehler zu glauben, dass "das Kombinieren aller Funktionen" eine bessere Sprache ergibt.

Es ist wahrscheinlicher, dass Sie mit einem aufgeblähten, komplexen, unlesbaren Durcheinander enden.

Gutes Sprachdesign erfordert Auswahl und Kompromisse. Die wahrscheinlich besten / revolutionärsten / erfolgreichsten Sprachen sind diejenigen, die etwas herausnehmen und eine bessere Alternative bieten, anstatt neue Dinge hinzuzufügen

  • Strukturierte Programmiersprachen (C, Pascal) - entfernt "goto", ersetzt durch Prozeduren und strukturierte Schleifen usw.
  • Java - Entfernt die "manuelle Speicherverwaltung" und ersetzt sie durch GC / verwalteten Speicher
  • Haskell / Clojure - beseitigt "unkontrollierten veränderlichen Zustand"
  • Lisp - nimmt die meisten "Sprachsyntax" heraus und ersetzt sie durch einen flexiblen homoikonischen Baum von s-Ausdrücken

Es gibt ein großartiges Gespräch darüber von Onkel Bob Martin - The Last Programming Language


"Strukturierte Programmiersprachen (C, Pascal) - entfernt" goto ", ersetzt durch Prozeduren und strukturierte Schleifen usw." - Entschuldigung, du liegst falsch: C hat goto. Aber ich mag den Rest der Antwort. Die Hauptsache, die C macht, ist, dass Sie sich nicht genau darum kümmern, wo im Speicher sich alles befindet und was sich zu welcher Zeit in welchem ​​Register befindet, und dass der Programmzähler ausgeblendet wird (in Bezug auf die genaue Adresse, an der er sich befindet). Sie können ihn verschieben auf fast montagegenauem Niveau mit goto).
Wyatt8740

0

Es gibt kein Tool mit den besten Funktionen. Eine nette Eigenschaft von Javascript und Scheme ist zum Beispiel, dass sie klein sind. Wenn Sie also anfangen, Funktionen zu packen, haben Sie diese bereits verloren.

Trotzdem sieht Cobra vielversprechend aus, wenn man all die netten Features aus anderen Sprachen hat. :-)


0

Denn wenn Sie eine solche Sprache erstellen, wird es eine weitere neue Sprache sein. Möglicherweise verfügen Sie über eine große Fangemeinde, aber alle anderen Sprachen sind noch vorhanden.

C existiert immer noch, obwohl seitdem viele neue Sprachen erfunden wurden.

Man könnte sagen, dass Python eine so universelle Sprache ist, aber es gibt auch Rubin.

Der Grund, warum es viele Sprachen gibt, ist einfach, dass es viele Programmierer gibt, von denen einige gerne neue Sprachen erstellen.

Der Grund, warum es keine einheitliche universelle Sprache gibt, in der sich alle einig sind, ist, dass das Programmieren als Handwerk nicht von einer Institution diktiert wird, die alle Entscheidungen trifft. Jeder kann tun, was er will.

Das ist gut.


Ich würde auch argumentieren, dass es weder gut noch schlecht ist, sondern vielmehr ein Artefakt der Tatsache, dass Software-Engineering noch nicht einmal hundert Jahre alt ist und im Vergleich zu jeder anderen existierenden Art von Engineering sehr unausgereift ist.
Michael

0

Mit all dem, was bisher geschrieben wurde, ist es schwierig, viele neue Gründe hinzuzufügen, aber ich werde ein paar einwerfen.

  • Evolution: Es sind nicht nur biologische Systeme, die eingeführt, mutiert und einem Überlebenswettbewerb um Ressourcen und einer Nische ausgesetzt sind, in der sie sich behaupten können. Die Konkurrenz ist gut und treibt die Dinge voran.

  • Reife: Wir machen seit wahrscheinlich weniger als einem Jahrhundert Computersprachen. Wir können die Antwort noch nicht haben, weil wir noch nicht alle Fragen kennen.

  • Separate Genese: Ich bin mir nicht sicher, welches Wort dafür richtig ist, aber in der Welt gibt es viele Schriftsysteme, die in vielen geografischen Regionen gestartet wurden. Denken Sie an Keilschrift, die zum Teil durch die Anforderungen des Schnitzens in Tontafeln vorgegeben wurde. Denken Sie an Sanskrit, das griechische, hebräische, römische und arabische Alphabet. Hieroglyphen, die chinesische Methode des schönen Schreibens mit mehr als 6000 Symbolen, die in vielen ostasiatischen Ländern verwendet wird. Denken Sie an modernere gemischte Alphabete mit phonetischer Basis wie Kyrillisch, Katakana und Hirigana. Ich bin kein Linguist, also entzünde die Ungenauigkeiten nicht zu sehr, aber wenn Kulturen auf der ganzen Welt etwas brauchen, werden sie es schaffen und aus der Notwendigkeit heraus zu ihrem eigenen machen. Computersprachen kamen, als es weltweit viel Kommunikation gab, und wie das imperiale und das metrische System, kamen aus Orten mit starker Ideenführung. Aber Programmiersprachen dienen vielen verschiedenen Kulturen (von denen einige Unternehmenskulturen sind), sodass sie die Menschen widerspiegeln, die sie erstellt haben. Computersprachen haben kulturelle Hinterlassenschaften, die ihr Design und ihre Verwendung geprägt haben. In der Betriebssystemkernkultur werden C und C ++ für Java wahrscheinlich nicht bald veraltet sein (oder umgekehrt), da sie eine native Codegenerierung, eine enge / effiziente Kopplung mit Hardware zum Erstellen von Hardwareabstraktionsebenen und eine umfangreiche Installation ermöglichen.

  • Design of Design: Programmiersprachen basieren auf unterschiedlichen Organisationsparadigmen. COBOL und Ada stammten von Komitees, die Teil von DOD waren und eine große Hierarchie hatten. Wenn ich mich richtig erinnere, kamen C, C ++, Java und wahrscheinlich viele andere von einem oder wenigen Designern. Fred Brooks vergleicht die Ergebnisse des Komitees mit den visionären Ansätzen in seinem Artikel Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Wenn wir uns heute hinsetzen würden, um entweder ein Da Vinci oder ein Komitee auszuwählen, um die universelle Programmiersprache zu definieren, würden wir dann wissen, wer oder was mit welcher Methode sie aufgebaut werden sollte?


0

Vielleicht etwas anders:

Was ist eine Sprache? Lächerlich einfach ausgedrückt: Wortschatz, Syntax und Semantik.

Was machst du als erstes mit einer Programmiersprache?
Sie definieren Dinge - Klassen, Variablen, Methoden - Sie erweitern den Wortschatz und die Semantik.

Warum? Jetzt können Sie Dinge sagen, die Sie vorher nicht sagen konnten.
Ob es Ihnen gefällt oder nicht, Sie haben eine neue Spezialsprache erstellt.

IMHO ist die Sache, nach der in einer Allzwecksprache gesucht werden muss, wenn es einfach ist, Allzwecksprachen zu erstellen.


0

Abgesehen von dem Schweizer Taschenmesser-Argument (das einen Sinn hat - es ist schwieriger , eine gute Breitspektrum-Sprache als eine domänenspezifische zu entwerfen -, bedeutet dies jedoch nicht, dass eine solche Sprache nicht beides wäre möglich und eine gute Idee), gibt es Probleme mit der "Kombination der besten Funktionen":

  • Für Sprachmerkmale ist "best" subjektiv oder zumindest (unendlich) fraglich.
  • Einige Funktionen sind nicht kompatibel. Ein gutes Feature aus einer Sprache kann in die Luft gehen, wenn es mit einem guten Feature aus einer anderen Sprache kombiniert wird.
  • Wir sind noch nicht mit neuen Funktionen fertig.

Kurz gesagt, das Sprachdesign ist schwieriger und komplizierter. Vielleicht möchten Sie sich Scala ansehen .



-2

Es gibt eine universelle Programmiersprache. Es heißt "Maschinensprache" und alles in jeder anderen Computersprache wird letztendlich als Maschinensprache ausgeführt.

Wie sieht es aus? Eine Zeichenfolge von 0-9 und AF.

Aber es ist eine Hündin zu benutzen. Also erfindet Alan eine Sprache, die in Maschinensprache übersetzt werden kann und besser zu dem passt, was Alan tun möchte. Bill erfindet eine andere Sprache für das, was Bill tun möchte. In Kürze haben Sie Cobol und Fortran und Lisp und Java. Alle von ihnen sind nur vereinfachte Versionen der Maschinensprache, die das Schreiben bestimmter Arten von Programmen erleichtern, das Schreiben anderer Arten von Programmen jedoch erschweren oder unmöglich machen. Einer ist gut für die Buchhaltung, ein anderer ist gut für die Steuerung des Space Shuttles.


6
Maschinensprache ist nicht universell; nicht annähernd. Jede Maschine hat ihre eigene Sprache.
Hasen

3
Es ist auch keine Zeichenfolge von 0-9 und AF. Es ist 1 und 0.
David Conrad

@hasen @David ist es nicht sinnvoll, wie @Andy vorzuschlagen, dass jede Sprache aus einer Sicht einer domänenspezifischen Sprache auf anderen Sprachen aufgebaut ist?
Armand

Ich sagte 0-9 und AF, weil Sie das wissen mussten, um die Mehrfach-Punch-Codes auf einer Keypunch-Maschine zu verwenden. Es sieht aus wie 0-1 oder 0-15 oder 0-255, wenn Sie es als Zahlen nehmen, abhängig davon, wie groß ein Stück zu einem Zeitpunkt ist. Und Hansen hat recht; Jeder Maschinentyp hat eine eigene Sprache. Fast alle PCs akzeptieren heutzutage 80386-Codes. Sogar mein Telefon wird! Aber das iPad wird nicht.
Andy Canfield

@hasenj und mit sehr unterschiedlichen Eigenschaften. Die für die Programmierung eines 6502 erforderliche Denkweise unterscheidet sich von der Programmierung eines x86-Chips und wiederum von einem RISC-Chip. Sehr weit weg von Universalität.

-2

Nur weil,

Es gibt keinen UNIVERSAL-Computer.

keine UNIVERSAL-Platte.

kein UNIVERSAL-Programmierer.

und nicht einmal ein UNIVERSAL-Kunde.

: P

Also brauchen wir einfach einen anderen für einen anderen. ;)


-2

Die meisten Antworten konzentrieren sich auf die Verwendung des besten Tools für jedes Problem. Ich glaube nicht, dass das ein guter Grund ist.

Wenn Sie sich mit großen Unternehmen beschäftigen, wird das Unternehmen in der Regel eine einzelne (oder eine kleine Anzahl) von Sprachen und Technologien verwenden, auch wenn es für ein bestimmtes Projekt eine bessere Sprache gibt.

Dies geschieht, weil die Vorteile einer verbesserten Standardisierung, einfacheren Unterstützung, gemeinsamen Nutzung von Code usw. (meistens) größer sind als der Mehrwert einer bestimmten Sprache.


1
Ich habe noch nie ein anständiges Unternehmensprojekt mit weniger als 4 verschiedenen Sprachen gesehen. Und ich glaube nicht an einen dieser "Vorteile" bei der Auswahl ungeeigneter Werkzeuge. Das klappt nie.
SK-logic

-3

Ich denke, dass all die Antworten "weil Sie Statuen nicht mit einem Bleistift schnitzen" den Punkt verfehlen.

Wer wählt hier WIRKLICH vor jedem neuen Projekt eine Sprache aus?

Die Wahrheit ist, wir brauchen nur ein paar Programmiersprachen, und die Programmierwelt wäre auf diese Weise besser dran: Die Leute würden sich darauf konzentrieren, die Skriptsprache besser zu machen, anstatt zum Beispiel über Python / Ruby / Perl / Younameit verstreut zu sein.

C # ist auf / für Windows programmiert (in Ordnung, es gibt Mono, jeder hier führt jeden Tag eine C # -Unter-Mono-App aus?) Und das bringt Benutzer dazu, Windows7 / 8 zu kaufen, und das bringt Geld für Microsoft.
Andere Unternehmen machen das Gleiche, dann wissen Open Source besser, dann auch Mister Genius ... und wir haben viele ähnliche Sprachen, es ist nur die egozentrische Natur der Menschheit.


Einverstanden - wir brauchen meistens nur eine "sichere" Hochsprache, eine "unsichere" Niedrigsprache, alle Assemblersprachen (eine pro CPU, sie sind unvermeidlich, aber verborgen) sowie einen speziellen Zweck (domänenspezifisch) Sprachen (zB SQL). Das eigentliche Problem ist, dass es für niemanden möglich ist, eine Sprache als "veraltet" zu deklarieren (selbst wenn der Sprachdesigner dies versucht - z. B. Python 2 vs. Python 3). Jedes Jahr werden mehr neue Sprachen und keine alten Sprachen verworfen, was bedeutet, dass letztendlich mehr Sprachen verwendet werden als Programmierer, um sie zu verwenden. ;-)
Brendan

-5

Wir müssen auf die Wirtschaft schauen, um diese Frage zu beantworten. Wenn nur eine Sprache das Geld für Unternehmen sparen würde, hätten wir es. Sie würden es standardisieren und verlangen, dass jeder es benutzt. Die anderen Sprachen würden in staubigen akademischen Gebäuden und den Kellern wildäugiger Enthusiasten schmachten. Dies ist nicht geschehen, daher darf dies kein Gewinnanreiz für eine universelle Programmiersprache sein, da es sich sonst natürlich inzwischen entwickelt hätte.


1
"Gespartes Geld" ist (trotz aller Bemühungen der Buchhalter) ein vages und nebulöses Konzept über den gesamten Lebenszyklus. So wie es den Mechanikern nicht gelungen ist, auch nur eine einzige Schlüsselgröße zu standardisieren, hat sich das Software - Engineering nicht standardisiert, da es so viele Kriterien für die Auswahl eines Werkzeugs (Sprache) oder sogar des Prozessors / Betriebssystems / der Umgebung gibt
Andrew
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.