Gibt es einen Grund zu der Annahme, dass Programmiersprachen konvergieren werden?

Obwohl die meisten Menschen heute auf der Erde etwas Englisch sprechen, gibt es anscheinend keinen Grund zu der Annahme, dass die Hauptsprache der zukünftigen Generation in den kommenden Jahrzehnten / Jahrhunderten dieselbe sein wird (dh wir werden weiterhin unterschiedliche Muttersprachen haben und eine gemeinsame Sprache lernen). später im Leben).

Ebenso gibt es eine Reihe verschiedener Programmiersprachen. Aber der Iterationsprozess ist hier viel viel schneller. Regelmäßig entstehen neue Programmiersprachen, alte veralten...

Gibt es einen Grund zu der Annahme, dass Programmiersprachen in den kommenden Jahrzehnten/Jahrhunderten zu einer einzigen Sprache zusammenlaufen werden?

Ich denke, damit die Sprachen konvergieren, müssten wir zuerst die Hardware konvergieren. Paralleles Rechnen zwingt einige dazu, von aktuellen Sprachen wie Java auf besser geeignete Sprachen umzusteigen. Aber wenn wir Exaflop-PCs haben, wer braucht dann diese lästigen guten Algorithmen? Hochrangige Sprachen werden keinen großen Unterschied zu niedrigen Niveaus erkennen.
Ich träume neuerdings von einer guten Sprache, die alles kann, aber es ist nicht so einfach. Mittlerweile kann man sich alle Methoden der Computersteuerung als eine große, komplizierte Sprache vorstellen. Eine gute vereinheitlichte Sprache könnte alle Paradigmen verwenden, um unnötige widersprüchliche Konventionen wie Größe vs. Länge zu vermeiden, aber zum Beispiel a) Menschen mögen unterschiedliche Dinge und sind sich möglicherweise nicht leicht einig, b) die Vereinheitlichung würde ohnehin sehr viel Arbeit erfordern.
Natürlich gibt es keinen Grund. Wie genau willst du Sachen wie Brainfuck und Haskell "konvergieren"?
Es gibt eigentlich zwei Arten von Programmierern: die einen, die der neusten Programmiersprache hinterherjagen und glauben, dass sie all ihre Probleme lösen wird, und den Rest von uns, der nützliche Arbeit erledigt. Ich würde vermuten, dass die Leute in Jahrhunderten immer noch C & FORTRAN verwenden werden, während die Modesprachen den Weg von SNOBOL, Forth und vielen anderen gehen werden, an deren Namen ich mich nicht einmal erinnern kann.
Dies ist eine Frage, die gelegentlich auf Programmers.SE gestellt wird: Warum schaffen wir nicht eine universelle Sprache? Weil High-Level-Semantik inkompatibel sein kann und PL-Design ein Spiel mit Kompromissen ist .
@Mints97 Ehrlich gesagt soll Brainfuck eine Art Parodie auf eine Programmiersprache sein. Ich würde eher an LISP, C und Perl denken. Diese wurden zumindest alle für reale Zwecke entwickelt.
@BartekChom Ja. Microsoft begann ebenfalls mit dem OpenGL-Zug – sie verließen das Unternehmen, um ihr eigenes proprietäres DirectX zu entwickeln, weil sie Software entwickeln mussten . Das Komitee brauchte einfach zu lange, um die einfachsten Probleme zu lösen. Die Vereinigung ist eine verlockende Aussicht, aber sie ist auch langsam, schmerzhaft und unflexibel. Wenn der Eine Weg wehtut, wird jemand einen Anderen Weg machen, der das nicht tut – und Ihre Vereinigungsbemühungen sind umsonst.
Ich verstehe die Prämisse nicht ... Wenn C ++ in Java konvergiert, passiert tatsächlich, dass Sie Java verwenden. Wenn eine neue Sprache auftaucht, die eine Mischung aus Java & C++ ist (und angeblich besser als beides), wäre es keine Konvergenz von Java und C++, sondern eine neue, andere Sprache (es sind also nicht „zwei, die ineinander konvergieren one" als "ein neues erscheint und die anderen zwei werden aufgegeben")...
Perl- und Python-Communities haben einmal versucht zusammenzuwachsen ;-)
Sprachen veralten, aber sehr langsam, reines C wird in bestimmten Bereichen immer noch viel verwendet, aber für größere Projekte ist es überhaupt keine optimale Wahl. Es scheint also, als würde es immer verschiedene Sprachen für verschiedene Situationen geben (z. B. Treiber vs. webbasierte Business-App).
Warum sollten Programmiersprachen konvergieren? Sie sind schließlich Werkzeuge. Konvergieren die Werkzeuge der Schmiede? Konvergieren Zimmermannswerkzeuge?
@el.pescado Nun, wir haben Fabriken, die so ziemlich alles aus Metall oder Holz herstellen können ...
@Sheraff Trotzdem, wenn die Fabrik etwas aus Metall herstellen möchte, kann sie es gießen, CNC-bearbeiten, walzen, aus kleineren Teilen schweißen ... Viele Techniken.
Obligatorisches xkcd zum Thema xkcd.com/927 Ein Teil des Problems ist, dass sich nicht alle darüber einig sind, was diese eine Programmiersprache sein sollte.
Die Computer Science SE hat die Frage Warum gibt es so viele Programmiersprachen? , was damit zusammenhängt.
Vielleicht, wenn sich die KI der Zukunft, die selbst programmiert, einigen kann. Aber ich bezweifle, dass sie das auch können.
Diese Programmiersprache existiert bereits, sie heißt Assemblersprache. Es ist der GCD aller Sprachen.
Bei Programmiersprachen ist es noch unwahrscheinlicher: Manche Menschen finden mehr Freude daran, neue Programmiersprachen zu erfinden, als an der eigentlichen Programmierung. Neue natürliche Sprachen entstehen meist unbeabsichtigt; neue Programmiersprachen hingegen entstehen, weil der Innovationsdrang intelligenter Menschen angeboren ist. Beachten Sie, dass es sich nicht um eine Konsolidierung handelt; Es ist ein Drang, mutig dorthin zu gehen, wo noch kein Mensch zuvor gewesen ist.
Da alle anderen gute Argumente vorgebracht haben, präsentiere ich ein Analogieargument: Lieber ein Werkzeug für jeden Job als ein Schweizer Taschenmesser für alle.

Antworten (20)

Es ist technisch nicht möglich, zumindest ohne auf Funktionalität zu verzichten.

Beispielsweise haben Sprachen unterschiedliche Strengegrade, die proportional dazu sind, wie hoch oder niedrig sie sind. Skriptsprachen sind weich typisiert, da sie Typüberprüfungen und -konvertierungen zur Laufzeit problemlos durchführen können. Vergleichen Sie dies mit C/C++, das viel mehr Schwierigkeiten mit der Typflexibilität hat, da es näher am Speicher liegt. Während weitere typunabhängige Funktionen hinzugefügt werden, sind die meisten davon letzten Endes immer noch Compiler-basiert: Sie dienen eher als Programmierhilfen als als eigentliche Sprachfunktionalität.

Ein weiteres wichtiges Beispiel ist der Umgang mit Speicher. In Skriptsprachen (und sogar einigen kompilierten Sprachen) liegt der Speicher weitgehend außerhalb der Hände des Programmierers und wird vom Interpreter oder einem anderen System verwaltet. Im Gegensatz dazu bieten Sprachen niedrigerer Ebene die Möglichkeit, Speicher, wie etwa die Zeiger von C/C++, direkt zu manipulieren und darauf zuzugreifen.

Während man denken kann, dass wir uns mit zunehmender Leistung eines Tages nicht mehr um Low-Level-Programmierung kümmern und alle anfangen werden, für alles ein seltsames PHP-Analogon zu verwenden, denke ich, dass wir nicht verstehen, wie die Welt wirklich funktioniert. Ich betrachte C/C++ als eine Low-Level-Sprache, wie die meisten Leute; aber es war einmal, und immer noch unter einigen, es war eine Sprache auf hohem Niveau, und auf niedrigem Niveau würde so etwas wie Assembler sein. Dies ist nicht nur eine Terminologie: Mit dem Leistungsrahmen der Effizienzfrage verschieben sich auch die Maßstäbe dafür. Vereinfachungen, die wir jetzt selbst in interpretierten Sprachen für zu kostspielig halten, könnten eines Tages unter "Hochsprachen" alltäglich sein, Java könnte als "Low-Level" betrachtet werden.

Ich denke, dass es aus diesem Grund viel weniger wahrscheinlich ist, dass Programmiersprachen konvergieren als gesprochene Sprachen. Die menschliche Sprache dient einer einzigen festen Aufgabe, Informationen zu übermitteln. Während Sie vielleicht argumentieren, dass verschiedene Sprachen bei einem Teil dieses Ziels besser oder schlechter sind als andere, können sie alle diese Ziele erreichen. Es gibt jedoch Dinge, die Sie in PHP einfach nicht tun können. Es gibt auch Dinge, die kein vernünftiger Mensch (heutzutage) in der Versammlung tun möchte.

Eine Möglichkeit, darüber nachzudenken, könnte diese sein. Wenn alle Menschen auf der Welt morgen fließend Walisisch sprechen würden, was würde passieren? Nun, jeder könnte sich auf Walisisch unterhalten, Übersetzungsdienste würden untergehen, und vielleicht würde Lauch populärer werden. Wenn morgen die einzige verfügbare Programmiersprache JavaScript wäre, wären wir alle völlig am Arsch.

Das zählt nicht einmal Trägheit. In der menschlichen Sprache ist Trägheit meist eine Frage der Fähigkeit, alte Literaturwerke lesen zu können, was selten eine Entscheidung für das Erlernen einer neuen Sprache und niemals eine Entscheidung für das Erlernen einer Muttersprache ist. Der Verlust des Verständnisses für klassische Werke wäre zwar ein kultureller Verlust, aber es ist wahrscheinlich nicht wahrscheinlich, dass er zu groß angelegten Aktionen motiviert. Andererseits würde die Neuprogrammierung des Linux-Kernels, von Windows, fast aller Gerätetreiber und Webserver definitiv in umfassendere Entscheidungen über Programmiersprachen einfließen. Dass COBOL immer noch lebt, ist meiner Meinung nach ein ziemlich starkes Argument gegen die Konvergenz von Programmiersprachen.

Es gibt jedoch einen Punkt, von dem Sie möglicherweise eine gewisse Konvergenz in Programmiersprachen erwarten: Syntax. Das geschieht bereits, und die C-ähnliche Familie hat weitgehend gewonnen. C, C++, Java, JavaScript und PHP haben alle eine weitgehend identische Syntax, unterstützt durch einige Änderungen in den Operatoren, die größtenteils ihre inhärenten Unterschiede widerspiegeln. Keine Zeigeroperationen *und &in PHP, keine lustige und einfache Zeichenfolgenverkettung .in C. Davon abgesehen sind diese Sprachen jedoch zumindest in der Struktur fast vollständig verständlich. Eine alternative Familie wäre die BASIC-Linie, einschließlich VB und ich würde Python argumentieren.

Ich stimme zu, wenn Sie hauptsächlich Text manipulieren, möchten Sie sich nicht durch die gesamte Funktionalität einer voll ausgestatteten Sprache wie C++ wühlen, also bleiben Sie bei COBOL. Umgekehrt, wenn Sie nur mathematische Berechnungen durchführen, können Sie eher bei FORTRAN als bei C++ bleiben. Grundsätzlich können wir eine Sprache erstellen, die "alles kann", aber auf Kosten der erschwerten Verwendung, wenn Sie nur eine Teilmenge der Funktionalität benötigen. IMO werden wir immer Fachsprachen wollen und verwenden, auch wenn wir sie nicht brauchen .
Tatsächlich verzeiht insbesondere C Typen sehr : Sie können alles in alles umwandeln, und es wird "einfach funktionieren". Sie werden offensichtlich nicht das gewünschte Ergebnis erhalten, wenn Sie versuchen, a char*als a zu verwenden short(es sei denn, Sie wollten dies offensichtlich tun), aber der Compiler lässt Sie; Es könnte eine Warnung ausgeben, und viele Compiler haben eine Einstellung, um Warnungen als Fehler zu behandeln, aber das war es auch schon. Ich erinnere mich, dass ich in den 90er Jahren unter DOS mit Speicherzeigern in C herumgespielt habe; ein short*Zeiger in den Video-RAM, der als chars behandelt wird, um auf den Bildschirm zu schreiben.
Einverstanden. Die Firma, für die ich arbeite, unterstützt/entwickelt Programme in CFML, COBOL, VB, Ruby usw. und hat mehrere verschiedene Formen von Datenbanken sowie die Verwendung von Javascript. Jede dieser Sprachen hat unterschiedliche Stärken und Schwächen und ich sehe nicht wirklich, dass es möglich ist, all diese in einer Sprache zusammenzuführen, die kein komplettes Durcheinander wäre.
Was stoppt eine Sprachform mit sowohl manueller als auch automatischer Speicherverwaltung? Oder von der Aufnahme sowohl statischer als auch dynamischer Typisierung? C# (eine sehr beliebte moderne Programmiersprache) hat sowohl statische Typisierung als auch einen Typ namens dynamisch , der die dynamische Typisierung in Skriptsprachen nachahmt.
@JohnColanduoni Die Kombination von dynamischer und statischer Typisierung, z. B. über verschiedene Formen der graduellen Typisierung und der partiellen Typinferenz, ist ein aktuelles Thema in PL-Design und -Forschung. Die Kombination von automatischer und manueller Speicherverwaltung ist unmöglich, es sei denn, auf manuell verwalteten Speicher wird nur über schwache Zeiger zugegriffen, die jederzeit explizit ungültig werden können – automatisch verwalteter Speicher muss garantiert niemals freigegeben werden, solange er noch erreichbar ist. In einem kombinierten System hätte also manuell verwalteter Speicher einen anderen Typ als automatischer Speicher.
@amon Sie müssten nicht vollständig separate Typen haben. Zum Beispiel könnten Sie eine Art konfluenten Zeigertyp haben, der es einem nicht erlaubt, den Zeiger zu speichern; Stattdessen erlaubt es einem nur, auf das Objekt zuzugreifen oder den Zeiger an Unterroutinen mit der gleichen Einschränkung weiterzugeben. Solange es sich um Subroutinen handelt (d. h. sie werden nur während der Laufzeit ihres Aufrufers ausgeführt), spielt es keine Rolle, ob der Wert manuell oder automatisch verwaltet wird, da der Aufrufer eine Referenz darauf behält (obwohl man dies mit manueller Speicherverwaltung natürlich könnte den Zeiger jederzeit löschen).
@JohnColanduoni C ++ geht mit Dingen wie "intelligenten Zeigern" in diese Richtung, aber Sie müssen es immer noch aufrufen, und wenn Sie nicht das eine oder andere universell im System auswählen, werden eigene Einschränkungen und Komplexitäten eingeführt. Ich bin mir nicht sicher, ob es eine so gute Idee ist, beides zu mischen, aber das ist größtenteils meine Meinung, und viele Leute sind eindeutig anderer Meinung, wenn es weitergeht. Nun, wenn Sie eine Sprache hätten, deren Modus Sie wechseln könnten, könnte dies auch zu einer philosophischeren Teilmenge dieser Frage führen: Wenn es eine Sprache gäbe, die alles tun könnte, aber nicht alles auf einmal, wäre es wirklich eine Sprache?
Speicherverwaltung und Typprüfung sind tatsächlich zwei der Sprachfunktionen, von denen ich erwarte, dass sie innerhalb von hundert Jahren zu einem Standard werden. Beides sind Probleme, für die es für 99 % aller realistischen Programme eine Lösung zur Kompilierzeit gibt, die aber nur schwer zu finden ist ; Wenn Computer immer lächerlich leistungsfähiger werden, wird es möglich, viel mehr Offline-Analysen von Programmen in voller Größe durchzuführen.
"Wenn morgen die einzige verfügbare Programmiersprache JavaScript wäre, wären wir alle völlig am Arsch." Passen Sie auf, wir könnten einen Tag sehen, an dem C zu Javascript kompiliert wird, damit es von der JavaScript-Engine ausgeführt werden kann, die es zur tatsächlichen Assemblierung JIT-kompiliert ;)
@hyde Ich finde, du hast da ein tolles Konzept für eine dystopische Scifi-Kulisse!
@hyde Du meinst wie asm.js ?
Genau genommen sind heute fast alle Programmiersprachen Turing-vollständig, und alle Turing-vollständigen Sprachen können alles tun, was jede andere Turing-vollständige Sprache tun kann, wenn unendlich viel Zeit und Speicher vorhanden sind. Die Aussage „Es gibt jedoch Dinge, die Sie in PHP einfach nicht tun können“ ist einfach nicht wahr – es gibt eine Menge Dinge, die es schrecklich wäre, sie in PHP zu versuchen (eigentlich als jemand mit viel mit professioneller Erfahrung würde ich sagen, dass es ziemlich schrecklich ist, irgendetwas in PHP zu tun), aber Sie könnten .
@KRyan Die Turing-Vollständigkeit bricht zusammen, wenn Sie sich mit der eigentlichen Hardware befassen müssen (bei der Turing-Vollständigkeit geht es nur darum, Algorithmen zu implementieren , nicht die entsprechenden Dinge mit elektrischen Signalen zu tun). PHP kann keine direkte Speicheradressierung verarbeiten, Punkt. C/C++ kann. Etwas, das eine direkte Speicheradressierung erfordert, kann nicht in PHP geschrieben werden.
@cpast Ich denke, ein guter Test ist: "Könnten Sie diese Sprache in dieser Sprache implementieren?" Da PHP einen Interpreter benötigt, lautet die Antwort nein. Andererseits sind die C/C++-Compiler und -Bibliotheken größtenteils in C/C++.
@ John Colanduoni: Werfen What stops a language form including both manual and automatic memory management?Sie einen Blick auf die Programmiersprache D, die versucht hat, dies zum Laufen zu bringen, und im Grunde gescheitert ist, aus Gründen, die niemanden überraschen werden, der mit Greshams Gesetz vertraut ist .
Ich stimme fast allem zu, und dennoch muss ich darauf hinweisen, dass alle Sprachen vollständig sind, Sie können alles in jeder Sprache tun ... wenn Sie Masochist genug sind, um es zu versuchen. Ich stimme jedoch zu, dass einige Sprachen VIEL besser darin sind, bestimmte Ziele zu erreichen, und der Versuch, eine winzige CPU in einer Appliance mit Python zu programmieren, wäre wahrscheinlich eine schlechte Idee. Zum größten Teil sind menschliche Sprachen in etwa gleich gut darin, Konzepte zu vermitteln; Programmiersprachen sind absichtlich so konzipiert, dass sie bestimmte Ziele am besten erreichen.
Es sind nicht nur nicht alle Sprachen Turing-vollständig, sondern die Zahl der Sprachen, die es nicht sind, nimmt zu. Für die reale Programmierung verursacht TC mehr Probleme als es löst: Eine weitere Hundertjahresprognose wäre, dass die Turing-Vollständigkeit höchstwahrscheinlich irgendwann den Mainstream verlassen wird. Es stellt sich heraus, dass es tatsächlich nützlich ist, Dinge über die Ausführung Ihres Programms beweisen zu können, wer hätte das gedacht.
Die implizite Annahme für die fortgesetzte Verwendung der Von-Neumann-Architektur in 100 Jahren ist fast lächerlich und macht viele der Argumente für Zeiger, Speicherzugriff usw. strittig. Vergessen Sie Quantencomputer nicht ... Ein weiterer Punkt, den ich ansprechen möchte, ist, dass wir in den nächsten 10 oder 20 Jahren eine natürliche Sprachprogrammierung haben werden, bei der wir einfach mit dem Computer sprechen und er unsere Absichten in das übersetzen wird, was wir heute a nennen Sprache auf „hohem Niveau“. Sobald dies geschieht, werden diejenigen, die den Dolmetscher für natürliche Sprache schreiben, wahrscheinlich eine oder vielleicht zwei Sprachen auswählen, die alles tun, was wir brauchen.

Gibt es einen Grund zu der Annahme, dass Programmiersprachen in den kommenden Jahrzehnten/Jahrhunderten zu einer einzigen Sprache zusammenlaufen werden?

Als Programmierer selbst würde ich sicherlich nicht hoffen. Es wäre wahrscheinlich eine massive Unannehmlichkeit für praktisch alle und würde praktisch niemandem nützen.

Unterschiedliche Sprachen eignen sich für unterschiedliche Arten von Aufgaben. Wenn Sie ein kurzes Skript schreiben, um ein Feld auf einer Webseite auszublenden, wenn ein Benutzer eine bestimmte Auswahl in einem Formular trifft, brauchen Sie nicht die Fähigkeit von C, jede adressierbare Speicheradresse direkt zu manipulieren, aber Sie können C nicht wirklich haben ohne das Konzept der Zeiger. (Sie können vermeiden, sie zu verwenden, aber das schränkt Ihre Möglichkeiten ziemlich ein; zum Beispiel haben Sie jetzt kein sprachnatives Konstrukt, das Sie für Zeichenfolgen mit variabler Länge verwenden können, also müssen Sie das neu erfindenRad.) Wenn Sie ein Betriebssystem schreiben, das auf Bare-Metal läuft, wird Javascript durch den Mangel an Aufrufkonventionskontrolle, Speicherverwaltung und Interrupt-Handlern die Aufgabe nahezu unmöglich, wenn nicht gar unmöglich machen. Wenn Sie jemandem die Grundlagen des Programmierens als Konzept beibringen, wird Assembler es nicht schaffen (es geht viel zu sehr in die groben Details des Addierens von zwei Zahlen oder des Zugriffs auf den Speicher); Wenn Sie andererseits den kritischen Abschnitt eines Hochfrequenz-Interrupt-Handlers schreiben, ist PHP wahrscheinlich nicht die Sprache, nach der Sie suchen. Eine Garbage Collection-Sprache wie Java ist eine schlechte Wahl für ein Echtzeitsystemwo die Vorhersagbarkeit der Ausführung eine Voraussetzung ist, da der Garbage Collector in den meisten GC-Sprachen technisch jederzeit eingreifen und anfangen kann, Ihre Daten durchzumischen, was sowohl CPU-Zeit beansprucht als auch Cache-Flushes verursacht. Das Schreiben von mengenbasierten Datenabfragen in C ist mühsam, aber SQL macht es zumindest relativ einfach, auszudrücken, was Sie mit Ihren Daten machen wollen, anstatt die Mechanik, wie es gemacht wird .

Und so geht es weiter. Während es sicherlich ein gewisses Maß an Überschneidungen gibt, beispielsweise zwischen Sprachen wie C# und Java oder BASIC und Pascal, füllt jede Programmiersprache in vielen der häufig verwendeten Sprachen eine bestimmte Nische aus . Die Wahl zwischen, sagen wir, Java und C# ist ziemlich willkürlich ( im allgemeinen Fall ist offensichtlich keines besser als das andere , obwohl in jedem speziellen Fall eines besser sein kann als das andere); die Wahl zwischen Ada und C++ ist nicht willkürlich (es gibt Dinge, die Sie in dem einen tun können, die Sie in dem anderen nicht tun können, oder Sie können die Sprache nicht erheblich verbiegen).

Selbst wenn wir architekturspezifische Sprachen wie Assembler außer Acht lassen, was bereits eine ziemlich große Handbewegung ist (in was schreiben Sie den Bootstrapper-„BIOS“-Initialisierungs- und Betriebssystem-Bootstrap-Code; binäre Maschinensprache?), Zumindest mit der Technologie von Computern, wie wir sie heute kennen und erkennen, gibt es eine Vielzahl von Aufgaben, die erledigt werden müssen, und die Anforderungen sind für jede unterschiedlich. Leistung, Vorhersagbarkeit, Benutzerfreundlichkeit für den Programmierer, API-Zugänglichkeit, Funktionsumfang (sowohl das, was benötigt wird, als auch das, was ausdrücklich nicht benötigt oder gewünscht wird) und so weiter und so fort. In einigen Fällen sind bestimmte Merkmale für den beabsichtigten Zweck der Sprache unbedingt erforderlich; in anderen Mangelbestimmter Merkmale ist ein Merkmal. Wie in den Kommentaren und auch an anderer Stelle ausgeführt, sind einige spezifische Funktionen per Definition nachweislich nicht miteinander kompatibel, unabhängig davon, wie sie implementiert oder ausgedrückt werden, und können daher möglicherweise nicht in derselben Programmiersprache koexistieren, so dass eine solche Sprache erforderlich wäre das eine gegen das andere einzutauschen. Betrachten Sie nun die Leute, die aus dem einen oder anderen Grund tatsächlich die herausgeschnittene Funktion benötigen ; Welche Programmiersprache werden sie verwenden?

All dies scheint es höchst unwahrscheinlich zu machen, dass alles in einer einzigen Programmiersprache zusammenläuft, die gleichermaßen zum Schreiben eines Betriebssystemkerns und eines Skripts zum Verbergen von Feldern für eine Webseite (oder was auch immer Webseiten in Ihrem Szenario ersetzt) ​​geeignet ist. Ich würde sogar so weit gehen zu sagen, dass es realistischerweise nicht passieren wird.

Wenn Sie möchten, dass Computerprogrammierung in Ihrer Welt realistisch erscheint, müssen Sie berücksichtigen, dass unterschiedliche Aufgaben unterschiedliche Tools erfordern und dass diese unterschiedlichen Tools von unterschiedlichen Personen verwendet werden. Eine Programmiersprache ist ein solches Werkzeug, und so wie wir heute sowohl Elektrowerkzeuge als auch manuelle Werkzeuge haben, die dasselbe leisten – sagen wir, ein Loch in eine Wand bohren – wird es mit ziemlicher Sicherheit verschiedene Programmiersprachen geben, die geeignet sind für unterschiedliche Aufgaben.

Und das, ohne auch nur das Thema des Neuschreibens jeder Software oder ihres Äquivalents in EZ++2108 zu berühren. Was, egal wie produktiv jemand in dieser neuen Sprache sein kann, ein gigantisches Unterfangen wäre.

Vergleichen Sie auch Warum gibt es so viele Programmiersprachen? auf dem Computer Science Stack Exchange, und warum verwenden Leute C, wenn es so gefährlich ist? auf dem Programmers Stack Exchange.

Ich denke, diese Antwort argumentiert erfolgreich, dass einige der Programmiersprachen, die wir derzeit haben, für eine bestimmte Aufgabe möglicherweise völlig ungeeignet sind. Das heißt aber nicht, dass es keine universelle Sprache geben kann, die für jeden Zweck geeignet ist. Um diese Möglichkeit zu widerlegen, müssen wir lediglich ein Beispiel für zwei wünschenswerte Eigenschaften finden, die nicht in derselben Sprache koexistieren können, zB Speichersicherheit und uneingeschränkte Zeigerarithmetik.
@amon Vielleicht, aber warum sollte eine Skriptsprache für Webseiten uneingeschränkte Zeigerarithmetik haben (und den Programmierer damit belasten), nur weil dies zum Schreiben eines Betriebssystems erforderlich ist? Im Kern geht es bei Programmiersprachen darum auszudrücken, was der Computer tun soll. Wenn eine Webseiten-Programmiersprache (denken Sie an Javascript) dieselbe ist wie eine Betriebssystem-Programmiersprache (denken Sie an C oder Assembler) mit entfernten Funktionen, kann man argumentieren, dass die beiden nicht dieselbe Sprache sind; Sie haben unterschiedliche Featuresets und erfüllen unterschiedliche Anforderungen, auch wenn die Kernsyntax vielleicht gleich ist.
Wenn sie dieselbe Syntax und dieselben Funktionen haben, dann ja, sie sind dieselbe Sprache, erlauben aber auch sehr gefährliche Konstrukte, die ohne sehr sorgfältiges Sandboxing (etwas, das wir selbst mit Javascript nicht immer richtig hinbekommen) möglich wären. , zumindest den Webbrowser-Prozess beschädigen. Ich werde sehen, ob ich dies in meine Antwort aufnehmen kann, um es klarer zu machen.
@amon gibt es Features die nachweislich nicht kompatibel sind. Beispielsweise können Sie mit Typen als Beweise verschiedene Eigenschaften eines Programms beweisen - einschließlich in einigen Varianten (TLC, Agda, ...), dass es beendet wird. Es ist leicht zu glauben, dass sie immer noch stark genug sind, um viele interessante Probleme auszudrücken. Aufgrund des Halteproblems ist jedoch bewiesen, dass Sie keine universelle Turing-Maschine darin implementieren können - Sie haben also einen Kompromiss. Wenn Sie dem Typsystem eine ausreichende Anzahl von Funktionen hinzufügen, erhalten Sie ein unentscheidbares Typsystem (es gibt keinen möglichen Algorithmus zum Überprüfen, ob eine Programmtypprüfung durchgeführt wird).

TL;DR Es ist nicht unmöglich, aber ich bezweifle es ziemlich.


Es gibt bereits gute Antworten, aber ich wollte einen etwas anderen Standpunkt hinzufügen.

Erstens sind gesprochene Sprachen KEINE gute Analogie für Programmiersprachen . Tatsächlich unterscheiden sie sich in ihrer Natur erheblich. Mit Ausnahme des Konlangs sind die gesprochenen Sprachen das Ergebnis jahrhundertelanger Evolution. Die Trennung vergrößerte den Unterschied, aber die Kommunikation führt dazu, dass sie homogener werden. Die Hauptidee ist, miteinander zu kommunizieren, sich zu verstehen und sich auszutauschen (oder Geschäfte zu machen). Dennoch werden diese Sprachen von vielen Sprechern gesprochen, und niemand oder niemand kontrolliert tatsächlich die Entwicklung der Sprache. Selbst Einrichtungen wie die französische Académie Française spiegeln lediglich die Entwicklung der Sprache a posteriori wider . Es gibt keine Reflexion über „am besten“ oder „effizienter“.

Meiner Meinung nach wird "Englisch" als Kommunikationssprache immer mehr verwendet, aber selbst dies wird vom tatsächlichen Englisch abweichen. Und ich bezweifle auch, dass die anderen Sprachen aufgrund der von Wiliam Kappler erwähnten Trägheit vollständig verschwinden werden.

Auf der anderen Seite werden Programmiersprachen in Kollaborationen diskutiert, die Standards setzen. Am bekanntesten ist ANSI für C. Aber bei den meisten Sprachen ist eine Gruppe von Menschen an der Entscheidung über die Entwicklung der Sprache beteiligt. Es ändert die Art der Entwicklung von Programmiersprachen im Vergleich zu gesprochenen Sprachen vollständig.

Könnten die jetzt zusammengeführt werden? Ich würde sagen, es ist nicht unmöglich . Wenn Sie vor 10-15 Jahren zurückblicken, hätten sich nur wenige vorstellen können, wie sehr sich eine Sprache wie Java verbreiten würde. Tatsächlich waren Größe, Leistung und Kompilierungszeit erheblich schlechter als beispielsweise C++. Aber seitdem haben sich die Sprache, die JVM und die Compiler erheblich verbessert. Darüber hinaus bedeutet der Fortschritt bei Computern, dass ein paar MB mehr hier oder da und Ausführungsunterschiede in den meisten Fällen der Benutzererfahrung kaum wahrnehmbar sind.

Bei Mikrocontrollern gibt es einen Trend, immer mehr ARM-Architekturen zu adaptieren. Was auf eine Zusammenlegung der Hardware hindeutet. Und wenn wir den OS-Krieg für mobile Anwendungen sehen: zB Microsoft, das zu ARM zurückkommt, oder Tablets, Smartphones usw. Wenn sie es schaffen, tatsächlich ein einziges Betriebssystem auf allen Systemen laufen zu lassen, würde das eine Vereinheitlichung der Programmiersprachen erleichtern. Wenn der Preis des Speichers sinkt, wird es weniger Anreize geben, tatsächlich Low-Memory-Lösungen zu verwenden, die Anwendungen größerer Betriebssysteme ermöglichen (sehen Sie, wie "niedrig" Linux durch Embedded-Linux wird).

Allerdings sehe ich vier Argumente dagegen .

Wie die anderen Antworten zeigen, sind Programmiersprachen in der Regel auf Nischen spezialisiert . Ich konnte ein paar Achsen sehen, um Sprachen zu unterscheiden

  • Zugänglichkeit: Wie einfach ist es, die Sprache zu lernen/ein Programm zu lesen?
  • Effizienz: Das ist bereits das Dreifache: Größe des Bins, Menge an RAM und Geschwindigkeit
  • Funktionalität: Was können wir mit der Sprache machen?
  • Portabilität: In welchem ​​Umfang kann sie implementiert werden? Wie einfach ist es, unsere Kunden zu erreichen?

Und wahrscheinlich sind es noch ein paar mehr. Die einzige Möglichkeit, die Sprachen zu vereinheitlichen, besteht darin, eine Sprache zu finden, die in all diesen Achsen die beste ist. Nur um eine Veranschaulichung zu geben,

  • Ruby ist leicht zu lesen und zu lernen, aber nicht besonders effizient,
  • Java ist weit verbreitet, aber zu groß/komplex für eingebettete Systeme,
  • C kann sehr effizient sein, aber (vergleichsweise) schwer zu lernen.

Aufgrund dieser unterschiedlichen Achsen und der Spezialisierung, die wir heute beobachten, ist es zweifelhaft, dass sich eine der Sprachen entwickelt , um die anderen zu dominieren.

Wir müssen auch die Trägheit berücksichtigender Veränderung. Programmiersprachen wurden in einer vollständig vernetzten Welt (unter ihren Benutzern) geboren. Daher wird mehr Kommunikation ihren Verlauf nicht verändern (wie bei den gesprochenen Sprachen). Die meisten Benutzer zögern, neue zu lernen, und warten oft bis zum letzten Moment, um darauf zurückzugreifen, um etwas Neues zu lernen. Aber „natürliche Auslese“ könnte hier eine Rolle spielen und diejenigen begünstigen, die dies tun. Aber zusammen mit den Programmierern wird die Trägheit von Programmiersprachen in ihren Code geschrieben. In vielen Forschungsbereichen ist Fortran die Sprache der Wahl (ich habe sogar Code in F77 gesehen), obwohl 1) die Forschung sich oft der neuen Tools bewusst ist und 2) einige argumentieren würden, dass Fortran eine verstorbene Sprache ist. Aber wieso? Weil in diesen Fortran eine riesige Menge an Code implementiert wurde! Und es wäre ein riesiger Aufwand, und es würde sich wahrscheinlich als unmöglich erweisen, alles in eine andere Sprache zu übersetzen (die ursprünglichen Autoren sind nicht verfügbar, die Wissenschaft dahinter ist schwer zu überprüfen). Dasselbe gilt für anderen großen Code: Wahrscheinlich wird niemand den Linux-Kernel neu schreiben. Sie müssen kompatible Sprachen implementieren. Aber auch dann bedeutet das, dass die „alte“ Sprache noch aktuell gehalten werden muss.

Die Wirkung des Anarcho-Liberalismus von Programmierung und Internet. Das lässt sich gut an den zahlreichen Forks auf FOSS erkennen: Wenn jemand mit einer Entscheidung zum neuen Standard nicht einverstanden ist, wird er wahrscheinlich entweder beim alten bleiben oder eine Alternative schaffen. Ähnlich wie, wie Wiliam betonte, viele aktuelle Sprachen von C abgeleitet sind. Und wenn wir uns auf die letzten 30 Jahre oder so verlassen könnten, sehen wir, dass die Zahl der Anwendungen von Programmiersprachen explodiert, die meisten Sprachen sich weiterentwickeln, einige erscheinen als Ableitung von diesen, andere als neue Konzepte (selten). Aber auch heute noch werden ältere Standards verwendet. Es gibt also eine Multiplikation und Diversifizierung der Sprachen. Es ist schwer vorstellbar, dass sich dieser Trend umkehrt.

Der letzte von vier Punkten ist die Irrationalität der Akteure des Sektors, auch bekannt als Programmierer. Neue Sprachen werden wegen irrationaler Faktoren implementiert: Whitespace ist ein perfektes Beispiel. Manche Leute werden die Eleganz, die Poesie usw. ihrer Sprachen verteidigen. Dadurch entstehen einige der berühmten Internet-Flame-Wars. Ich schlage vor, dass Sie nach "C++ vs. Java" suchen. Nehmen Sie einen Verband mit. Neue Benutzer treten oft an einer der Seiten an. Wie wir im berühmten berüchtigten Krieg zwischen Emacs und Vim gesehen haben.

Abschließend würde ich sagen, dass ich ein Szenario sehen kann, in dem HW-Speicher billig wird, die HW-Architektur auf wenige beschränkt wird (X86, ARM) und dass ein Betriebssystem auf allen vorherrscht. Es erscheint eine neue Sprache, die auf allen oben genannten Achsen die beste oder fast die beste ist. Dann könnten mit genügend Zeit die anderen Sprachen aussterben.

Aber wirklich, am einfachsten wäre es wahrscheinlich, einen Diktator des bösen Genies dazu zu bringen, die Kontrolle über die Welt zu übernehmen und jede andere Sprache als Assembler zu verbieten. Denn wer braucht noch etwas?

Monteur? Pfft. Zu meiner Zeit , als wir uns neumodisch und ausgefallen fühlten, benutzten wir eine magnetisierte Nadel .
Ich habe nicht gesagt, dass er ein lustiger, böser Diktator ist. Aber ich habe noch nie durchbrochenen Karton gesehen.

TL;DR: Nein. Programmiersprachen sind zu vielfältig.

Grund 1: Zweck

Laut der Wikipedia- Liste der Programmiersprachen gibt es 806 verschiedene Programmiersprachen, ausgenommen BASIC-Dialekte und esoterische Programmiersprachen.

Es gibt einige Merkmale jeder Sprache, die nicht allzu schwer zusammenzuführen wären: Die meisten Programmiersprachen haben irgendeine Form von bedingter Verarbeitung, Variablendeklaration, arithmetischen und mathematischen Operationen, Ausgabe und Eingabe – neben anderen Ähnlichkeiten. Dies sind die Teile, die sich relativ einfach zusammenfügen lassen (solange wir uns für einen Stil entscheiden können, was eine ganze Weile dauern kann ...).

Es gibt andere Teile anderer Sprachen, die nicht einfach zusammengeführt werden können, von denen viele vom Zweck der Sprache abhängen. JavaScript beispielsweise ist eine dynamische Web-Skriptsprache, die verwendet wird, um Webseiten Interaktivität zu verleihen. Vieles davon wird hier auf StackExchange verwendet, um Inhalte dynamisch zu laden, ohne die Seite neu laden zu müssen. Dieser Prozess wird AJAX genannt .

AJAX ist für das Web konzipiert. Es ist nicht für Desktop-Anwendungen konzipiert, wie sie in Java oder C# oder C oder C++ (usw. etc.) geschrieben werden könnten, die multithreaded sein und Inhalte dynamisch laden können, ohne AJAX zu erwähnen: So funktionieren diese Sprachen.

Am Beispiel von JavaScript und Java können wir auch sehen, dass der Zweck der Programmiersprache wichtig ist. JavaScript ist für das Web konzipiert; Java zur Installation auf einem System. JavaScript hat daher aus Sicherheitsgründen keinen Dateizugriff , um sicherzustellen, dass böswillige Websites nicht einfach auf Ihre Dateien zugreifen können. Angenommen, diese theoretische Programmiersprache (die ich Σ∞ oder Sigma Infinity nennen werde) muss auch für jeden Zweck geeignet sein, sie muss sowohl für das Web als auch für die installierten Versionen geeignet sein. Um diese Anforderung zu erfüllen, wären die Sprachdesigner gezwungen, zwei verschiedene Versionen der Sprache herauszugeben – eine ohne Dateizugriff, eine mit – um die Sicherheit aufrechtzuerhalten.

Wie Betreuer von modularen Sprachen oder Sprachen mit mehreren Versionen Ihnen sagen werden, ist dies eine große Aufgabe - sicherzustellen, dass beide Versionen ...

  • Kompatibel miteinander
  • Auf dem neusten Stand
  • Möglichst identisch
  • Unterstützt
  • Geprüft
  • Dokumentiert
  • Gebraucht

... ist eine große Bitte. Sie müssten ein riesiges Unternehmen gründen, um Σ∞ zu unterstützen.

Nein, es ist wahr, dies schließt die Möglichkeit der Existenz von Σ∞ nicht aus. Da wir hier jedoch von Praktikabilität sprechen, ist es für mehrere Unternehmen praktischer, mehrere Sprachen zu pflegen, als für ein großes Unternehmen, Σ∞ zu pflegen.


Grund 2: Funktionen

806-Programmiersprachen enthalten viele Funktionen. Abgesehen von den Kompatibilitätsproblemen des Zwecks, die wir gerade besprochen haben, wird das Erstellen von Σ∞ lange dauern, einfach wegen der schieren Menge an Zeug, das die Ersteller einbinden müssen. Für jede Sprache könnte der Erstellungsprozess in etwa so aussehen:

Geben Sie hier die Bildbeschreibung ein

Wenn man sich einen alten Post auf StackOverflow ansieht , scheinen viele Entwickler viel mehr Zeit mit der Fehlerbehebung zu verbringen als mit dem Schreiben neuer Funktionen. Daher wird es lange dauern , bis auch nur ein Feature implementiert ist, geschweige denn eine Sprache, geschweige denn 806 Sprachen.

Ja, ich übertreibe vielleicht etwas, und Sie können einfach viele Entwickler einstellen, aber die Zeit und das Geld, die in das Σ∞-Projekt fließen, werden erheblich sein.


Grund 3: Dateigröße

Eine einfache und eine, die leichter zu überwinden ist als die beiden vorherigen, aber dennoch erwähnenswert ist. Die verteilbare C-Datei und die Laufzeitumgebung nehmen auf meinem Computer komprimiert 37 MB ein. Das sind ungefähr 45 MB unkomprimiert. Unter der Annahme, dass C in Bezug auf die Dateigröße eine repräsentative Sprache ist, ergibt dies 38700 MB oder 38,7 GB als Gesamtgröße von Σ∞.

Das ist etwas weniger, als ich erwartet hatte, und sicherlich nicht viel in Bezug auf die Speicheranforderungen. Die Internetverbindungen müssen jedoch erheblich ausgebaut werden, bevor eine solche Datei heruntergeladen werden kann - Benutzer möchten nicht zu lange warten, bis Installer eine einzelne Datei heruntergeladen haben, insbesondere wenn für das Programm weitere Dateien heruntergeladen werden müssen.

Wie gesagt, dieses Problem ist viel einfacher zu lösen: Wir sprechen von der Zukunft, sodass Sie wahrscheinlich von besseren Internetverbindungen ausgehen können. Nur ein erwähnenswerter Punkt.


Grund 4: Typisierung und Compiler

Dies wurde in anderen Antworten behandelt, daher gehe ich es schnell durch: Je nach Zweck und Ebene der Sprache innerhalb der Datenverarbeitung unterscheiden sich die Kompilierungs- und Laufzeitprozesse erheblich.

JavaScript beispielsweise wird zur Laufzeit interpretiert . Der Code des Browsers übersetzt JS kurz vor der Ausführung in ausführbaren Code. Außerdem ist JavaScript schwach typisiert – Sie müssen nicht deklarieren, dass diese Variable eine Ganzzahl und dies ein String ist, Sie sagen einfach .var

Im Vergleich dazu ist C# eine stark typisierte , vorkompilierte Sprache. Sie müssen sagen, dass dies eine Ganzzahl und dies eine Zeichenfolge ist, und Ihr Code wird nicht kompiliert, wenn Sie dies nicht tun. (OK, das gibt es varauch in C#, aber es wird immer noch zur Kompilierzeit eingegeben.) Außerdem müssen Sie Ihren Code durch einen Compiler laufen lassen, der ihn in eine ausführbare Datei verwandelt, die Sie ausführen können.

Die Zusammenführung der beiden Sprachtypen wäre ziemlich schwierig, wenn nicht gar unmöglich.


Endlich...

Daraus schließe ich, dass es zu viele Programmiersprachen und zu viele verschiedene Arten von Programmiersprachen gibt, als dass das Σ∞-Projekt durchführbar wäre – geschweige denn praktisch.

„Es gibt auch var in C#“ – heutzutage haben wir das dynamicauch, außerdem gibt es immer den objectTyp trusty (den Sie umwandeln müssen, bevor Sie damit viel mehr tun können, als nur den Wert weiterzugeben …). :)
@MichaelKjörling - in der Tat, aber sie werden immer noch alle zur Kompilierzeit eingegeben (mit der möglichen Ausnahme von dynamic- habe das nicht überprüft).
Richtig, object(oder besser gesagt, System.Object; objectist einfach das praktische Schlüsselwort in C#) bleibt bestehen System.Object, bis Sie es in etwas anderes umwandeln. Ich denke, dynamices ist eine seltsame Ente, die zur Laufzeit eingegeben wird. Habe selbst noch keine Gelegenheit gehabt es zu nutzen.
@MichaelKjörling Ich hatte bis vor 4 Minuten noch nicht einmal davon gehört! System.Objectist insofern etwas seltsam, als es nicht viel tun kann, außer durchgelassen zu werden, aber es ist immer noch ein Typ.
„Visual C# 2010 führt einen neuen Typ ein, dynamic. Der Typ ist ein statischer Typ, aber ein Objekt vom Typ dynamic umgeht die Überprüfung des statischen Typs.“ "Zur Kompilierzeit wird davon ausgegangen, dass ein als dynamisch typisiertes Element alle Operationen unterstützt." "[ein Methodenaufruf auf eine Variable vom Typ dynamisch wird] vom Compiler nicht überprüft, weil der Typ [...] dynamisch ist. Daher wird kein Compilerfehler gemeldet. Der Fehler bleibt jedoch nicht auf unbestimmte Zeit unbemerkt. Er wird abgefangen zur Laufzeit und verursacht eine Laufzeitausnahme. " MSDN
@MichaelKjörling - Wetten, dass es Spaß macht, damit zu spielen ...
@TracyCramer ein Webbrowser , ja. So wie es aussieht, hat JS keine experimentellen oder anderweitigen Methoden oder APIs, mit denen es auf Ihre Zugriffsdateien zugreifen könnte. es würde eine Änderung in der Sprache erfordern, um es zu unterstützen. Ich schließe geänderte Sprachen nicht ein.
@TracyCramer Die Frage betrifft die Konvergenz aktueller Programmiersprachen mit realistischen Änderungen. JavaScript erhält Dateizugriff ist nicht realistisch.
Grund 3: Die Dateigröße hat viel schlimmere Auswirkungen als Sie vielleicht denken. 38,7 GB ist nicht viel Speicherplatz, aber dieser Speicherplatz stellt viele weitere Hürden dar, durch die Sie bei jedem Durchlauf Ihres Compilers springen müssen. Diese Sprache passt vielleicht gut auf Ihre Festplatte, wird dann aber so langsam kompiliert, dass sie niemals als Skriptsprache funktionieren würde.

Hoffentlich nicht.

Programmiersprachen sollten niemals den Gesetzen unterliegen, die natürliche Sprachen konvergieren lassen.

Jetzt haben wir C++, das Englische unter den Programmiersprachen, das an verschiedenen Stellen seiner Geschichte wahllos Material von anderen unähnlichen Sprachen entlehnt (wahrscheinlich war die schlechteste Idee in seiner Geschichte der syntaktische Dump von Ada-Generika in die Template-Syntax). C++ kann nicht mehr sinnvoll durch Syntaxdiagramme beschrieben und nicht mehr sinnvoll von Parsern einer halbwegs regulären Klasse geparst werden. Seine Standards schwanken alle paar Jahre über die Semantik hin und her, und gerade jetzt wurden Arrays mit variablen Dimensionen, die erforderlich wären, um allgemein nützliche numerische Bibliotheken zu implementieren, die mit 50 Jahre alten FORTRAN-Bibliotheken konkurrieren könnten, wieder rausgeschmissen.

So ähnlich wie den Plural „ye“ im Englischen loszuwerden.

Vergleichen Sie nun mit einer Sprache wie „Lua“: Syntax passt auf eine einzige Seite im Referenzhandbuch (das Papier im A5-Format, etwa zur Hälfte Legal), eine einzige Datenstruktur, wenige skalare Datentypen, OOP-Programmiertechniken werden eher pro Protokoll implementiert als durch Syntax und so weiter.

Ihn in irgendeiner Weise mit C++ zusammenzuführen, würde keinen Sinn machen.

Interessanterweise gibt es jetzt eine Konvergenz von Computersprachen auf der Zielebene: Es gibt keine dedizierten Lisp-Maschinen wie Symbolics mehr, und aktuelle Architekturen bevorzugen die Stapeladressierung mit einem gemeinsamen Rückgabe- und Datenstapel, einem gemeinsamen Programm- und Datenadressraum, mit a Paradigma für Funktionsaufruf/Rückgabe (anstelle von Stapelumschaltung/Coroutinen) zur Organisation des Kontrollflusses und eines Heaps, der nur mit Daten arbeitet, anstatt Funktionsaufruf/Rückgabe (wie Sie es für vollständige Schemafortsetzungen benötigen).

Dies führt zu verschiedenen Programmiersprachen mit unterschiedlichen Leistungsmerkmalen und folglich zu unterschiedlichen Wahlmöglichkeiten der Programmiersprache, je nach dem erforderlichen Maß an Übereinstimmung mit dem Denken der Programmierer oder der Computer.

So kommt man in die Situation, dass „Hochsprachen“ oft in einer Niedrigsprache (z. B. Lua in C) statt in sich selbst implementiert werden, um ein System zu bekommen, mit dem sowohl Computer als auch Programmierer auch ohne auskommen viel Schmerz.

Diese fundamentale Spaltung zeigt keine Anzeichen dafür, dass sie verschwinden wird. Virtuelle Maschinen verschieben die Kompromisse ein wenig und fügen eine weitere Ebene der Schichtung hinzu, ändern das aber nicht wirklich.

Das war ein sehr informativer Beitrag @user9847. Ich habe es sehr genossen, es zu lesen.

Hier werden viele gute Antworten gegeben, die im Allgemeinen keine Sichtweise einnehmen.

Ich werde ja sagen , weil wir irgendwann Software entwickeln werden, die intelligent genug ist, um viel besser Code zu schreiben, als Menschen in der Lage sind, Code zu schreiben. Einige Zeit nach diesem Ereignis werden menschliche Programmierer obsolet.

Nach einem bekannten Argument schreibt diese Maschine ihren eigenen Code wiederholt um und erhöht ihre Intelligenz mit jeder Iteration. Unter der Annahme, dass die maschinelle Intelligenz eine Grenze hat, wird sie sich schnell diesem Intelligenzniveau annähern, und die von ihr verwendete Sprache wird sich in ähnlicher Weise einem Ideal annähern.

Stimmt, es sei denn, das Ideal ist mit Logik unerreichbar. Beispielsweise kann die ideale Sprache chaotisch sein.
@CortAmmon Kein Schweiß. Mein Supercomputer könnte damit umgehen! ;) Aber im Ernst, kann man nicht davon ausgehen, dass ein Computer nur berechenbare Funktionen ausführen kann, so dass sein Idealzustand rein logisch wäre.
Es ist tatsächlich bemerkenswert schwer, diese Annahme zu treffen. Fast überall in der Informatik verfolgen uns nicht berechenbare Probleme wie chaotische Systeme oder das Halteproblem. Es ist eigentlich überraschend, wie schwer. (Für eine Fallstudie setzt die moderne DARPA-Studie über militärische KI absichtlich Grenzen, ähnlich den von Ihnen erwähnten. Die KI-Doktoranden hassen diese Regeln, weil es praktisch unmöglich ist, unter ihnen etwas zu machen, das es wert ist, als intelligent bezeichnet zu werden.)
@CortAmmon Das ist sehr wahr. Ich behaupte nicht, dass es keine nicht berechenbaren Probleme gibt, nur dass sie kein Merkmal der berechenbaren Welt sind. Turings Ergebnis ist ein Theorem der Logik, also würde unser Supercomputer diese Einschränkungen kennen und hoffentlich in der Lage sein, seinen Weg zu einem idealen Zustand ohne Bezugnahme auf willkürliche Programme oder nicht berechenbare, chaotische Systeme zu navigieren. Ich rede hier wahrscheinlich aus meinem Hintern.
Selbst in diesem Fall würde es noch menschliche Programmierer geben, selbst wenn sie nur zum Spaß programmieren würden. Und sie werden verschiedene Programmiersprachen lernen, verwenden und erstellen, weil wiederum verschiedene Sprachen interessant sind.
@Roux Das ist ein guter Punkt. Menschliche Programmiersprachen werden für die Maschinen wie "naive" Volkskunst sein. i.ebayimg.com/00/s/NTk4WDgwMw==/z/ITwAAOSwxH1T1ilb/…

Könnte es in Zukunft eine einzige Programmiersprache geben? Sicherlich, aber werfen wir einen Blick darauf, warum wir heute so viele haben.

Es gibt derzeit eine Horde von Sprachen , die verwendet werden oder verwendet wurden, aber diese Liste zeigt nicht wirklich, warum wir heute verschiedene Sprachen haben, also verwenden wir stattdessen diese Liste von Sprachen nach Typ .

Skriptsprachen wie bash und ksh eignen sich gut für einfache, prozedurale Aufgaben, die immer wieder ausgeführt werden müssen, aber diese bieten nicht alle Funktionen, die für große Anwendungen erforderlich sind. Sie sind eher unterstützende Strukturen.

Kompilierte Sprachen wie C++ und Python haben beide große Stärken. Ersteres unterstützt die Feinspeichersteuerung und Ressourcenverwaltung. Python soll einfach zu lesen und der Quellcode kurz sein, sicherlich viel kürzer als C++. Diese beiden Sprachen arbeiten auch auf unterschiedlichen Ebenen: C++ ist eine Low-Level-Sprache (der Quellcode sieht aus wie die Systemanweisungen) und Python ist eine höhere Sprache (der Quellcode sieht aus wie gesprochene Sprache).

Es gibt auch Prolog , eine unterhaltsame Sprache, die wie eine Datenbanksprache mit Regeln und Abfragen funktioniert. Prolog basiert eher auf Logik als auf Prozeduren, wie es bei Bash und C++ der Fall ist. Infolgedessen ist es gut darin, Intelligenz (KI-Systeme) nachzuahmen, und nicht so gut darin, Register im Speicher zu manipulieren.

Jede dieser Sprachen hat ihre eigene Syntax und eigene Parsing-Regeln. Jemand, der C++ versteht, kann sich normalerweise eine ziemlich gute Vorstellung von Python-Code machen, indem er es sich ansieht, aber Bash und Prolog sind so unterschiedlich, dass sie voneinander nicht lesbar sind.

Die Syntax hat jedoch keinen wirklichen Einfluss darauf, was in einer Sprache unterstützt wird. Der Arbeitsentwurf für die C++-Standards von 2014 ist mehr als 1.300 Seiten lang. Es ist definitiv keine einfache Sprache.

Sofern es keinen großen Durchbruch in der Sprachkonstruktion und -anwendung gibt, gehe ich davon aus, dass Programmiersprachen als separate Strukturen bestehen bleiben, um sich auf bestimmte Aktivitäten zu konzentrieren. Wir sehen vielleicht einen kleineren Pool an verwendeten Sprachen, aber ich erwarte nicht, dass diese Zahl jemals eine erreicht.

Ich bin mir nicht sicher, ob alle zustimmen würden, dass Python eine kompilierte Sprache ist.
@PaŭloEbermann Es ist unter dem kompilierten Abschnitt in diesem zweiten Link aufgeführt. Es wird teilweise kompiliert, aber es wird auch interpretiert, also ist es umstritten.

Es könnte in einer Sprache zusammenlaufen, aber es wäre sehr vielfältig.

Bei der Metaprogrammierung interagiert Ihr Code mit dem Code selbst. Sie könnten eine Programmiersprache haben, aber verschiedene Anwendungsbereiche würden sie sehr unterschiedlich verwenden, vielleicht sogar inkompatibel. Am Ende wäre die Sprache sehr fortgeschritten.

Interessanterweise ist LISP, eine der ältesten Sprachen, wahrscheinlich am ehesten dafür geeignet. In LISP ist der Quellcode selbst auch die häufigste Datenstruktur, eine Liste. Ein LISP könnte möglicherweise verschiedene "Untersprachen" haben, die verschiedene Teile von LISP haben würden. Das ist so etwas wie Haskells Monaden.

Haskell ist ein weiterer interessanter Fall. Es ist sehr mathematischer Natur, daher können Compiler es mathematisch manipulieren, um Programme schneller zu machen. Außerdem hat es Monaden und DSLs, die im Grunde programmierbare Untersprachen sind. Sie können Ihre GPU in Haskell programmieren (nämlich das Haskell-Programm erstellt das Programm zum Ausführen von Programmen auf Ihrer GPU.)

Es sollte beachtet werden, dass, obwohl sie existieren, sowohl Lisp als auch Haskell etwas unklar sind. Sie sind jedoch auf dem Vormarsch, also könnten wir uns in Zukunft vorstellen, dass wir in Ihnen eine Art Supersprache haben, die im Grunde das Programm selbst zum Programm macht. Dies würde viele verschiedene Anwendungsfälle ermöglichen.

Es sollte beachtet werden, dass diese eine Sprache aus der Ferne wie viele getrennte Sprachen aussehen würde, obwohl ihr Kern eine einfache Basissprache sein könnte. Eine Bibliothek wäre im Grunde eine Sprache.

Grund genug zu glauben, dass die menschlichen Sprachen konvergieren werden.

Vor langer Zeit prognostizierten die Menschen eine schnelle Konvergenz der menschlichen Sprachen, doch dies steht noch bevor. Programmiersprachen haben ein zusätzliches Merkmal, das in menschlichen Sprachen nicht vorhanden ist, sie sind erfundene Sprachenvon Natur aus (im Gegensatz zu Esperanto und anderen erfundenen menschlichen Sprachen, die eine Ausnahme, nicht die Regel sind). Dies bedeutet, dass menschliche Sprachen zwar aufgrund der natürlichen Evolution und der zunehmenden Kommunikation durch Technologie konvergieren könnten, etwas, das in Zukunft zur Schaffung einer universellen Sprache führen könnte, die von der absoluten Mehrheit der Weltbevölkerung und sogar von Computersprachen gesprochen wird denselben Konvergenzprinzipien unterliegen, kommt hinzu, dass jeden Tag neue Computersprachen geschaffen werden. Einige neue Sprachen könnten eine Hegemonie in einer bestimmten Nische erreichen und sich später zu einer allgemeinen Körpersprache ausweiten. Dies können wir nicht ausschließen.

Ich glaube also, dass Computersprachen immer ein heterogenes Feld bleiben werden. Auch ältere Computersprachen, die als obsolet gelten (ich bin selbst Pascal-Programmierer), können eine neue Behandlung erhalten und modern werden. Pascal ist mit vielen Vorurteilen von Leuten konfrontiert, die es nur aus Texten wie Kerrighan "Warum Pascal nicht meine Lieblingssprache ist" kennen, aber das moderne Pascal ist viel weiter fortgeschritten als die C-Sprache, mit einem vollständigen Satz objektorientierter Zusätze, und nichts davon die Dinge, die Kerrighan in diesem populären Aufsatz kritisierte. Ich glaube also, dass Sprachen nicht zu einer einzigen universellen Sprache zusammengefasst werden, sondern weiter modernisiert werden und neue Dinge aus anderen Sprachen akzeptieren, genau wie unsere eigenen menschlichen Sprachen.

Zum einen haben wir, als Computer nach Brasilien kamen (ich bin Brasilianer), neue Wörter aus ihren englischen Gegenstücken „erschaffen“, wie „to delete“, die eine bestimmte gemeinsame Wurzel im Lateinischen haben, aber im modernen Portugiesisch nicht verwendet wurden. Aber das wird uns nicht dazu bringen, englische Wörter für gewöhnliche Dinge wie traditionelles Essen oder andere alltägliche Dinge zu verwenden, weil wir keinen Grund dazu haben, das wäre eine vergebliche Anstrengung mit wenig Gewinn. Man könnte sagen, dass die Leute Englisch lernen sollten, um bessere Jobaussichten zu haben (wie wir hier normalerweise denken) oder um das Publikum zu vergrößern oder ähnliches. Aber in diesem Fall werden die Leute in normalen Gesprächen keine englischen Wörter verwenden.

Dies führt also dazu, dass die Menschen zwei Sprachen haben, ihre Muttersprache nicht vergessen oder sie unnötig anpassen. Dies lässt mich glauben, dass menschliche Sprachen niemals (genau wie Computersprachen) zu einer einzigen Einheit zusammenlaufen werden.

Was Programmiersprachen (oder andere!) nicht können , ist genauso wichtig wie das, was sie können .

Das zeigt schon, dass es immer etwas geben wird, das einer gemeinsamen Sprache für alle absolut im Wege steht. Beispielsweise sind Programmierer von Sprachen mit verwaltetem Speicher sehr froh, dass sie sich nicht mit expliziter Speicherzuweisung und -freigabe befassen müssen – das bedeutet, dass Sie sich mehr auf Dinge konzentrieren können, die wir noch nicht automatisieren können (auch nicht teilweise). Anwaltssprache ist sehr gut, wenn Sie versuchen, so spezifisch wie möglich zu sein und wenig Möglichkeiten für alternative Interpretationen zu haben.

Sprachen (wieder Programmieren oder nicht) sind nur Werkzeuge. Sie wählen das beste Werkzeug für den Job – manchmal ist es ein Schraubenschlüssel, manchmal ein Presslufthammer.

Nun, Sie können offensichtlich eine Sprache erstellen, die alles erlaubt und verbietet, zum Beispiel basierend auf einigen vordefinierten Konstrukten oder sogar Compiler-Direktiven. Als ich beispielsweise an meinem C#-Betriebssystem gearbeitet habe, hatte ich tatsächlich C#-Code, der in Assembly-Äquivalente kompiliert wurde, etwa so:

registers.AX = memory.Indirect(variable1.Address); // Translated into mov ax, [EBP-20h]

(nur Pseudo-Code, der eigentliche Code war etwas anders - sollte aber die Idee veranschaulichen)

Dadurch konnte ich tatsächlich den gesamten Code in C# schreiben, einschließlich des Bootloaders und der Gerätetreiber.

Die Frage ist, bedeutet die Tatsache, dass es in C# geschrieben ist, dass es immer noch nur eine einzige Sprache namens C# ist?

Ich würde nein behaupten . Tatsächlich besteht ein erheblicher Teil der üblichen Arbeit eines Programmierers darin, seine eigenen Sprachen zu erstellen. Nicht Sprachen wie C# oder LISP, wohlgemerkt – sondern domänenspezifische Sprachen, um bestimmte Probleme gut zu bewältigen, und sonst nichts. Während diese immer in einer anderen bestimmten Sprache implementiert sind, sind sie eine eigene Sprache, eine Teilmenge - genau wie die englische Rechtssprache eine Teilmenge des Common-English ist.

Einige Sprachen eignen sich hervorragend für solche Untersprachen – LISP/ML (und ihre Derivate wie F# oder Scala) sind natürlich das beste Beispiel. Das Interessante ist, dass die strikten Sprachen am nützlichsten sind, um solche Untersprachen zu erstellen - unabhängig davon, ob die Untersprachen streng sein sollen oder nicht.

Wird es also jemals eine Supersprache geben? Sicher warum nicht. Es gibt bereits viele Kandidaten, die dem ziemlich nahe gekommen sind - x86 war eine Zeit lang fast universell, das ursprüngliche C hatte das Ziel, überall kompilierbar zu sein (viele Compiler produzieren immer noch nur Code, der für irgendeinen C-Compiler kompiliert werden soll). Oder moderner JVM-Bytecode oder IL. Aber das ist ungefähr das Niveau, auf dem ich es erwarten würde - mittelschwer. Die Endbenutzer- (-Entwickler-) Ebene wird ein nettes kleines Ökosystem aus verschiedenen Sprachen sein, die gut für ihre Arbeit geeignet sind – nicht weniger und nicht mehr. Es sei denn natürlich, Sie planen eine Dystopie, in der Apple-the-world-haegemon jeden zwingt, Objective-C oder so etwas zu verwenden. Denken Sie daran, dass es Arbeit erfordert, die Dinge einfach zu halten – Unordnung entsteht ganz natürlich. Es wird immer Unordnung und Meinungsverschiedenheiten geben, und beides wird Pluralität fördern.Komplexität zu reduzieren ist der schwierige Teil.

Ich fürchte, ich muss dem widersprechen - dynamische/statische und starke/schwache Typisierung sind unglaublich schwer in einer Sprache zu verschmelzen.
@ArtOfCode Ich sage nicht, dass es einfach ist - aber es ist offensichtlich möglich. Abgesehen von der Tatsache, dass jede Programmiersprache auf dem Planeten irgendwann auf physischer Hardware läuft, gibt es auch Forschungssprachen wie Systems C# (managed + unmanaged) und sogar C# selbst (statisch + dynamisch). Es ist nicht einfach, aber die Dampfmaschine zu bauen war auch nicht einfach. Tatsächlich verfügt C# auch über dynamische und statische Speichermodelle, obwohl der statische Teil sehr begrenzt ist (er ist immer noch größtenteils sicher; Systems C# ist andererseits in vielerlei Hinsicht das neue C++).
Ich werde immer noch nicht zustimmen, fürchte ich - William Kapplers Antwort oben zeigt, dass es im Grunde unmöglich ist, Sprachen verschiedener Ebenen zusammenzuführen (die oft auch Sprachen unterschiedlicher Typisierung sind).
@ArtOfCode Ich habe das Gefühl, dass Sie den Punkt meiner Antwort völlig verfehlt haben. Hast du gerade den "Klar, warum nicht"-Teil gelesen, oder bin ich so unverständlich? :D Ich behaupte, dass Sie, selbst wenn es eine Supersprache für alles gäbe , diese sowieso nicht codieren würden - Sie hätten kleinere, richtigere Sprachen für alles, was Sie tun. Genauso wie IL (bis zu einem gewissen Grad) die gesamte .NET-Welt vereint, aber alle codieren immer noch in C#, F#, LINQ, IronPython, C++/CLI, EntityFramework, ...
Nein, mein Punkt ist nicht, dass es für bestimmte Aufgaben keine kleineren Sprachen geben würde – das gibt es bereits, und da stimme ich Ihnen zu. Mein Punkt ist, dass das Erstellen einer Supersprache nahezu unmöglich ist, wenn nicht sogar absolut unmöglich.

Nein, da ist kein. Es mag einfacher sein, Sprachen zu mischen, aber solche Sprachen sind sehr formal und werden sich auf der Ebene des konzeptionellen Rahmens nicht vermischen.

Perl kommt einer natürlichen Kreolsprache nahe, aber nur unter ähnlichen "Typen" von Sprachen. Sie können nicht einfach etwas mischen, das um eine primitivere Gedächtnismanipulation herum aufgebaut ist, oder etwas hineinwerfen, das rein funktional ist. Der allgemeine Syntaxstil kann auch Variationen haben, aber Sie können nicht mit einer völlig anderen Art von Syntax konstruieren.

Wahrscheinlich nicht.

Wie Sie (richtig) gesagt haben, gibt es viele Programmiersprachen. Wie beim Sprechen von (natürlichen) Sprachen leihen sie sich oft gegenseitig aus. Im Gegensatz zu natürlichen Sprachen werden Programmiersprachen jedoch von intelligenten Designern, alias Programmierern, geleitet, die ihre eigenen (widersprüchlichen) Vorstellungen davon haben, „was das Beste ist“.

Wie JDługosz betont, sind Programmiersprachen immer sehr formal. In einer natürlichen Sprache können Änderungen der Sprachmuster und der Aussprache in einer isolierten Gruppe von Menschen zu unterschiedlichen Varianten führen (US vs. britisches Englisch ist ein mildes Beispiel). Nicht so in Programmiersprachen, ein Programm ist entweder spezifikationsgerecht oder nicht. Das Ändern der Spezifikation passiert nicht einfach, die Compiler/Interpreter-Autoren müssen einer Änderung zustimmen, die Hunderte von Programmen beschädigen könnte, die von einem bestimmten Verhalten abhängen. Wenn überhaupt, gehen Programmiersprachen tatsächlich auseinander , weil Compiler-/Interpreter-Autoren sich nicht die Mühe machen, sich an die Sprachspezifikation zu halten (siehe regex , es gibt: Perl, POSIX, emacs, vim usw.).

Ich halte es auch für unwahrscheinlich, dass Programmierer, die im Allgemeinen Menschen sind, sich auf eine einzige, alles umfassende Sprache einigen können. Neue Ideen werden immer integriert, um Sprachen modern zu halten, Ideen werden geteilt, aber ich halte es für unwahrscheinlich, dass alle Programmiersprachen zusammenlaufen.

Da Compiler immer mehr Speicher und CPU-Verarbeitungsleistung erhalten, können sie damit umgehen, immer mehr Quellcodesprachen zu erfassen. Beispielsweise kann gcc je nach Bedarf normalerweise als ansi-c oder c## kompiliert werden und kann auch als fortran F77 oder eine weniger alte Variante kompiliert werden. Was ich erwarten würde, ist, dass menschenlesbarer Quellcode weiterhin willkürliche Benutzerpräferenzen und Unternehmenspräferenzen an bekannte Standards anhängt, und manchmal können diese für andere unlesbar sein, aber wirklich optimaler ausführbarer Maschinencode auf einem wirklich beliebigen RISC-Prozessor wird wahrscheinlich konvergieren so viel wie möglich.

Eines Tages könnte der Quellcode so sehr hinter hochrangigen Anweisungen abstrahiert worden sein, dass es möglich sein könnte, vor Ihrem MakeAnythingBot zu stehen und zu sagen: „Computer, entwerfen und erstellen Sie ein Weltraumprogramm, ein Geldsystem, ein landwirtschaftliches Produktionssystem, alle notwendigen Materialien Zubehör und ein verbesserter MakeAnyThingBot", und das wird es. Sollte das passieren, stecken wir in großen Schwierigkeiten, denke ich.

Denken Sie daran, dass der schwierige Teil beim Programmieren nicht darin besteht , die eigentlichen Programmiersprachenkonstrukte einzutippen. Der schwierige Teil besteht darin, ein vages, breites, unzureichend spezifiziertes Dokument in hochspezifische Anweisungen umzuwandeln, denen der Computer folgen soll. Bei High-Level- versus Low-Level-Programmierung (BASIC versus Assembler) geht es um die Detailgenauigkeit , mit der Sie angeben, was der Computer tun soll, aber es ändert nichts an der Genauigkeit, die erforderlich ist, um anzugeben, was der Computer tun soll. Wenn der Programmierer diese Genauigkeit nicht liefert, muss die Programmiersprache es tun.

tldr Ich glaube, Programmiersprachen werden konvergieren, einfach weil es zu viele Möglichkeiten dafür gibt.

Lassen Sie uns einige der Höhepunkte der (ziemlich) kurzen Geschichte des Programmierens treffen.

  • Schalter
  • Lochkarten
  • Assemblersprache
  • Interpretierte/Skriptsprachen
  • Sprachen auf hohem Niveau
  • Objektorientierte Sprachen
  • "Verwaltete" Sprachen

In nur etwa 70 Jahren haben wir uns von Schaltern und Kurbeln zu unglaublich effizienten Compilern mit sowohl Syntax- als auch Semantikprüfung entwickelt. In ein- oder zweihundert Jahren kann ich mir nicht einmal vorstellen, wie wir programmieren werden (wenn wir es überhaupt tun), aber ich wage einige Vermutungen.

Die meisten Antworten hier machen eine implizite Annahme für die weitere Verwendung der Von-Neumann-Architektur, die für alle praktischen Zwecke die einzige Architektur ist, die derzeit existiert. Aber eine andere Architektur außer Acht zu lassen, insbesondere wenn optische oder Quantencomputer entstehen, ist kurzsichtig.

Alle „Gründe“ dafür, dass eine einzelne Sprache unhaltbar ist, heben einfach die Nachteile unserer derzeitigen Computerarchitektur hervor. Sie gehen nicht auf zukünftige Fortschritte in diesem Bereich ein. Zu sagen, dass wir in 100 Jahren immer noch eine Von-Neumann-Architektur verwenden werden, ist höchst spekulativ.

Wie können wir also zu einer Sprache kommen?

Als der „Java-Chip“ entwickelt wurde, waren wir eigentlich auf dem besten Weg, Java zu unserer „einen“ Sprache zu machen. Es verstand Java-Bytecode nativ - es wäre nur eine Sprache erforderlich, wenn jeder Computer den "Java-Chip" verwenden würde. Und für die Webprogrammierung hätten wir eine Teilmenge der Sprache verwenden können, um in Browsern zu arbeiten. Es gibt nichts, was uns (technisch) davon abhält, jetzt eine einzige Sprache zu verwenden. Wir hätten Browser für die Verwendung von C oder C++ schreiben und einfach einige der Befehle aus der Sprache redigieren können, wie zum Beispiel den Dateizugriff.

Wenn wir Architekturen ändern, kann eine Sprache die unvermeidliche und offensichtliche Wahl sein.

Wir kommen vielleicht an den Punkt, einfach zu sagen, was der Computer tun soll, und er versteht, was wir meinen – Programmierung in natürlicher Sprache. Die neue Computer-„Sprache“ wird das sein, was wir dem Computerprogrammierer programmieren, um es zu verwenden. Und es gibt keinen Grund, 10 Sprachen auf hohem Niveau zur Auswahl zu haben.

Und was ist mit neuralen Implantaten? Vielleicht „denken“ wir einfach, was wir tun wollen.

Und vielleicht programmieren wir in Zukunft gar nicht mehr. Eine künstliche Intelligenz wird einfach Maschinen bauen, Lebensmittel anbauen und alle unsere Bedürfnisse befriedigen, wie im Animationsfilm WALL-E. Hoffentlich werden wir nicht einfach so sesshaft und werden stattdessen Künstler, Musiker usw.

Flugzeuge wurden vor 112 Jahren erfunden, Raketen schafften es 30 Jahre später in die Umlaufbahn, 20 Jahre später zum Mond, 17 Jahre später (ungefähr zu der Zeit, als C erfunden wurde) ein Mann auf dem Mond, der erst vor 46 Jahren war. Im nächsten Jahr zur Venus und im nächsten Jahr zum Mars. Zu sagen, dass die Programmierung in 200 Jahren oder mehr so ​​sein wird wie jetzt, widerspricht der Geschichte.

Ist das zu weit draußen? Für manche Leute ja. Aber die Technologie schreitet so schnell voran, dass jedes dieser Szenarien von vornherein zu leugnen bedeutet, unser Potenzial als Spezies zu ignorieren.

Ich stimme zu, dass die Behauptung, dass die von Neumann-Architektur in 200 Jahren nicht die einzige Architektur sein wird, reine Spekulation ist. Aber das gilt auch für die Behauptung, dass One Chip / One Architecture, egal welche, sein wird. Die Geschichte zeigt, dass es dazu neigt, auseinander zu gehen. Sie beweisen also nicht wirklich die Wahrscheinlichkeit einer eindeutigen Sprache, die Ihr "tl: dr" anzeigt.
@bilbo_pingouin, ich stimme zu, aber ich bezweifle, dass jemand eine 200-Jahres-Vorhersage "beweisen" kann. Auch die Umlaufbahn der Erde ist unbekannten Unbekannten unterworfen.

Wie viele andere betont haben, haben verschiedene Programmiersprachen unterschiedliche Einsatzgebiete, also wahrscheinlich nein. Und dem stimme ich zu.

Aber ich möchte eine andere Perspektive hinzufügen. Informatik ist jung. Die erste Programmiersprache war Plankalkül von Konrad Zuse , entwickelt zwischen 1942 und 1945. Das ist vor 70 Jahren. Menschen aus dieser Zeit leben noch. Aber das waren die ersten Babyschritte, die Computertechnik erreichte damals noch keine Massen.

Es begann erst später, also würde ich annehmen, dass die erste Programmiersprache mit großer Reichweite ALGOL von 1958 war. Das ist etwas mehr als 55 Jahre her. Diese Sprache wird nicht mehr verwendet , keine Fragen zu Stack Overflow in diesem Jahr, nur drei im letzten Jahr; Ich denke, wir können davon ausgehen, dass es inzwischen tot ist.

Schauen wir also etwas weiter. COBOL wurde 1959 veröffentlicht. Bereits 88 Fragen in diesem Jahr auf Stack Overflow zeigen, dass diese Sprache immer noch verwendet wird. Wir sprechen über eine Sprache, die schon ein Dilbert-Comic vor fast 20 Jahren als Fossil zeigte:Geben Sie hier die Bildbeschreibung ein

Sogar C ist schon ziemlich alt und eine der beliebtesten Sprachen überhaupt.

Also, was passiert hier? Wie ich schon sagte, Computer ist ziemlich jung. Wenn eine neue Sprache 5 Jahre braucht, um populär zu werden, und 5 Jahre lang beliebt bleibt, und Jugendliche sie lernen, wenn sie mit durchschnittlich 25 Jahren populär ist, und dann arbeiten, bis sie 65 Jahre alt sind – dann können Sie sehen, dass sie mindestens 50 Lebensjahre bringt zu einer Sprache, die populär wird. Die einzigen, die früher gestorben sind, sind Sprachen, die nie populär werden. Und diese Zeit wird verlängert, wenn in dieser Sprache eine große Codebasis gepflegt werden muss, die in der Zeit erstellt wurde, als die Sprache populär war. Dies ist einer der Gründe, warum C immer noch so viel verwendet wird und ein Grund, warum ich denke, dass Java noch in Äonen von jetzt an programmiert werden wird.

Da die Informatik noch ziemlich jung ist, befinden wir uns noch in einer Phase, in der mehr Sprachen erstellt werden als solche, die nicht mehr verwendet werden. Das wird sich wahrscheinlich irgendwann legen, aber ich sehe keinen Grund, warum die Entwicklung neuer Sprachen jemals aufhören wird. Also nein, wenn man sich die Langlebigkeit von Sprachen aus historischer Sicht ansieht, wird es wahrscheinlich nie nur eine geben.

Diese Frage muss in Bezug auf Grenzen angegangen werden, ansonsten ist es nur ein Fachgespräch zwischen Programmierern. Da die Zeitskala von Jahrhunderten erwähnt wurde, gilt die Betrachtung des Grenzfalls.

Im Grenzfall wurde die gesamte Materie im Sonnensystem durch Nanomaschinen in Computronium umgewandelt, und all dieses Computronium wird um die Sonne herum angeordnet, um die maximal mögliche Energie zu ernten.

In diesem weit entfernten Stadium ist die zugrunde liegende Hardwarearchitektur wahrscheinlich ziemlich homogen – selbst heute sehen wir Anzeichen einer Konvergenz der Hardwarearchitektur – insbesondere in Bezug auf serielle Hochgeschwindigkeitskommunikation (PCI 4.0, 100 GBE, USB3.0 – unter der Haube sind sie es alle sehr ähnlich in Bezug auf elektrische Eigenschaften und Verbindungsschichtprotokolle, während sie früher ziemlich unterschiedlich waren). Die Leute sind eher auf die Informatik in Bezug auf Befehlssätze und Sprachen fixiert als auf das, was wirklich wichtig ist - sowohl heute als auch in meinem weit begrenzten Szenario, nämlich den thermodynamischen Kosten für das Verschieben von Daten von A nach B. Sobald die Daten verschoben wurden, die Kosten und Besonderheiten von Die Verarbeitung ist zweitrangig.

Mit zunehmender Verarbeitungsleistung und zunehmenden Entfernungen, die Daten zurücklegen müssen, um verarbeitet zu werden, wird die Informationsverarbeitung hauptsächlich zu einer thermodynamischen Berechnung, die von Shannons-Gesetzen und grundlegender Physik umschrieben wird.

Wenn diese Realität fortschreitet und deutlicher wird, werden die Vorteile, die durch die Verwendung dieser Abstraktion erzielt werden können, abnehmen, und die Sprachkriege werden enden und durch Mathematik und maximal effiziente Versionskontrollprotokolle ersetzt werden, die eine sinnvolle semantische Verarbeitung ermöglichen, selbst wenn die Die Zeit, die Daten benötigen, um von A nach B zu gelangen, ist sehr groß im Vergleich dazu, wie schnell sich die empfangende Entität entwickeln könnte, wenn sie dies wünschte.

Wenn alle Hardwarearchitekturen gleich sind, dann ist die universelle Sprache die Sprache, in der diese Hardware auf der niedrigsten Ebene der Programmierbarkeit programmiert wird. Darauf aufgebaute Sprachabstraktionen gelten wahrscheinlich nicht als Sprachen in der gleichen Weise, wie wir wissenschaftliche Terminologie, die in der englischen Sprache wiedergegeben wird, nicht als eine vom Englischen selbst getrennte Sprache betrachten würden.

Wenn schließlich die Hardware (Computronium) selbst rekonfigurierbar ist (zweifellos zu nicht trivialen thermodynamischen Kosten), haben die Konzepte von Software und Hardware keine große Bedeutung. Tatsächlich würden sich beide auf die gleichen thermodynamischen Prinzipien reduzieren, obwohl die Versionskontrolle (die auf dieser Ebene nur versuchen kann, wirklich irreversible Prozesse von reversiblen getrennt zu halten) eine unabhängige Rolle spielen könnte.

Offensichtlich liegt dieses Szenario noch in weiter Ferne, aber eine Storyline irgendwann auf dieser Flugbahn zu platzieren, ist meiner Meinung nach ein gültiger harter Sci-Fi-Ansatz.

Mir gefällt deine Herangehensweise sehr gut. Aber ich muss sagen, dass die von Ihnen erwähnte universelle Sprache wie die kompilierte Version der Anweisungen klingt. Es muss immer noch eine Möglichkeit für die Person geben, die diese Anweisungen auf einfache Weise erteilt. Das ist so eine Art, wofür Programmiersprachen im Moment da sind. Was lässt Sie glauben, dass es in Ihrer Geschichte nicht mehrere Programmiersprachen geben wird, die sich zu derselben maximal effizienten universellen Sprache kompilieren?
Abstrakte Programmiersprachen sind nützlich, um Menschen zu helfen, die in Begriffen spezifischer Abstraktionen denken. Wenn der größte Teil der Neuprogrammierung von Maschine zu Maschine erfolgt und viele/die meisten Maschinen zum Lernen programmiert sind (z. B. Deep Learning, wie es heute von Google, Microsoft usw. implementiert wird), sind die Anforderungen an die Programmierung anders. Abstraktionen werden immer noch nützlich und notwendig sein, um Datenübertragungen zu komprimieren, aber diese werden wahrscheinlich domänenspezifisch sein, basierend auf der Art der gesendeten Informationen. Was ich sagen will ist, dass Kommunikationsprotokolle viel wichtiger werden als Programme.
Außerdem sollte ich sagen, dass es in meinem Grenzfall keine menschlichen Programmierer gibt, außer in Zoos und Museen.

Insgesamt nein - aus allen genannten Gründen ist es jedoch wahrscheinlich, dass wir eine universelle Beschreibungssprache für Programme/Features entwickeln werden, die sowohl für Menschen als auch für die spezialisierten Expertensysteme verständlich ist, die sie zum Schreiben grundlegender Anwendungen verwenden. Siehe Verarbeitung natürlicher Sprache .

Wir könnten zum Beispiel sagen: „Ich hätte gerne eine Anwendung, die Wetterdaten für meine Region sammelt, archiviert und anzeigt.“ Das Expertensystem würde dies interpretieren und ein effektives Wegwerfmodul schreiben, das diese Funktion ausführt (mit einem gewissen Einblick in Ihre persönlichen GUI-Präferenzen durch Analyse Ihres Profils oder dynamisch generiert auf der Grundlage der Stilpräferenzen des Terminals, auf dem Sie die Anwendung anzeigen ).

Natürlich wäre die Beschreibung eines Spiels sehr langwierig und grafisch anspruchsvoll, aber durch die Aufteilung der Beschreibung in Features und Levels könnte dies tatsächlich erreicht werden. Die Beschreibungssprache – was auch immer das sein mag – wäre so strukturiert, dass sie mit diesen Aufgaben fertig wird.

Es gibt viele oben aufgeführte Gründe dafür, dass es niemals eine eine wahre Sprache geben wird. Es liegt aber durchaus im Bereich des Möglichen, dass man eine Mega-Sprache kreiert, die im Kern ein Bündel von DSLs ist.

Alle Sprachen müssten die gleiche Laufzeit oder virtuelle Maschine verwenden, und es müsste eine Art Namespace-Standardisierung geben. Sobald Sie das haben, können Sie Folgendes haben:

  • Eine einfache imperative Programmiersprache, wenn Sie sagen möchten: "Mach dies , dann dies und dann dies . "

  • Eine echte objektorientierte Sprache für Kapselung und ähnliche Dinge

  • Eine funktionale Programmiersprache ohne nicht funktionale "Lecks" (nicht einmal eine Druckanweisung), damit Sie die Isolierung eines Codestücks garantieren können

  • Eine relationale Sprache, vielleicht sogar eine Variante von SQL, so dass es eher eine erstklassige Sprache sein könnte als eine Liste von Zeichenfolgen, die zur Kompilierzeit nicht überprüft werden können

  • Eine deklarative Sprache ähnlich Make oder Prolog

  • Eine erstklassige Sprache für reguläre Ausdrücke, sodass Sie keinen Code schreiben müssen, der wie Zeilenrauschen aussieht

  • Richtige Parser – so etwas wie Lex und YACC, die sich nicht in C kompilieren lassen, sondern selbst zu erstklassigen Sprachkonstrukten werden.

  • Eine Software-Build-Systemsprache – so etwas wie Maven oder Ant oder so etwas.

Es wäre immer noch nicht die One True Language – etwas so Großes müsste wahrscheinlich in etwas Einfacherem implementiert werden (C schlägt wieder zu!). Damit könnte man aber weit kommen. Es müsste nicht viel (wenn überhaupt) schwieriger sein, es zu lernen, als heute eine Sprache zu lernen, weil jede Sprache es sich leisten könnte, unvollständig zu sein. Beispielsweise müsste keine Sprache außer der Sprache für reguläre Ausdrücke über die Funktionalität für reguläre Ausdrücke verfügen. Die deklarative Sprache müsste nicht in der Lage sein, imperativen Code auszuführen, nur um nützlich zu sein. Die imperative Sprache kann einfach sein, da sie nicht jedes Programmierparadigma unter der Sonne unterstützen muss.

Als kurze Antwort werden Computersprachen mit Syntax und Semantik geschrieben, um Probleme zu lösen. Ich bin mir sicher, dass wir, wenn der Umfang der Probleme, die Computerprogrammierung lösen soll, konstant bleiben würden, feststellen würden, dass die Sprachen ziemlich schnell konvergieren würden.

Es könnte jedoch schwierig werden, jemanden zu finden, der glaubt, dass der Umfang der Computerprogrammierung konstant bleibt, oder überhaupt jemanden, der glaubt, dass der Umfang der Computerprogrammierung etwas anderes als einen ungezügelten Sprint in die Zukunft tut.

Nach dem Microsoft-Theorem „Verwenden Sie Ihre eigene Sprache im .NET-Framework“ begann es mit etwa 26 Sprachen und umfasst jetzt etwa 146 Sprachen, Tendenz steigend. Und jeder von ihnen entwickelt sich mit neuen Hardware-Trends weiter. Programmiersprachen sind nur gereift, nicht fallen gelassen.

Nach dem Java-Weg "Vergiss alles, lerne nur Java". Ich bin mir über den aktuellen Status nicht ganz sicher, während Java von Sun zu Oracle/IBM verschoben wurde, ... und so weiter, das Hauptziel der Portabilität langsam zu verlieren.

Im Gegensatz zu menschlichen Sprachen sollten sich PC-Sprachen weiterentwickeln und neue hinzugefügt werden. Wir hatten 'C/Fortran'-basiert und 'Basic'-basiert. Dann schemabasiert. Es ist also Sache des Programmierers, welche Geschmacksrichtung er/sie mag.

Meine persönliche Berufungssprache ist VB und es hat immer das gelöst, was ich brauchte. Am wichtigsten für einen langen späteren Zeitraum ist, dass der Code so gut wie normales Englisch zu lesen und zu verstehen ist und dennoch in hocheffiziente Binärdateien kompiliert wird.

Lassen Sie neue Programmiersprachen entstehen, damit neue Methoden entwickelt werden können. Lassen Sie uns bitte nicht im Namen der Konvergenz einschränken.