Warum nicht die besten Funktionen aller vorhandenen Programmiersprachen kombinieren und in eine universelle Programmiersprache einfügen?
programming-languages
features
3 Umdrehungen
quelle
quelle
Antworten:
Aus dem gleichen Grund benutzt du kein Schweizer Taschenmesser , um ein Huhn zu schnitzen ...
quelle
weil
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
"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.
quelle
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.
quelle
Aus irgendeinem Grund nenne ich das "Generalisierungs- / Spezialisierungsparadoxon", das wahrscheinlich einen anderen Namen hat und eigentlich kein Paradoxon ist
quelle
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.
quelle
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 ...
quelle
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
Es gibt ein großartiges Gespräch darüber von Onkel Bob Martin - The Last Programming Language
quelle
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).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. :-)
quelle
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.
quelle
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?
quelle
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.
quelle
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":
Kurz gesagt, das Sprachdesign ist schwieriger und komplizierter. Vielleicht möchten Sie sich Scala ansehen .
quelle
Visual Batch ist ein Versuch einer anpassbaren Programmiersprache. Der Link unten zeigt, wie diese Programmierschnittstelle an die Anforderungen einer universellen Programmiersprache angepasst werden kann.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
quelle
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.
quelle
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. ;)
quelle
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.
quelle
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.
quelle
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.
quelle