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?
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.
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 char
s behandelt wird, um auf den Bildschirm zu schreiben.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 .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.
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
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,
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?
TL;DR: Nein. Programmiersprachen sind zu vielfältig.
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 ...
... 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.
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:
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.
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.
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 var
auch 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.
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.
dynamic
auch, außerdem gibt es immer den object
Typ trusty (den Sie umwandeln müssen, bevor Sie damit viel mehr tun können, als nur den Wert weiterzugeben …). :)dynamic
- habe das nicht überprüft).object
(oder besser gesagt, System.Object
; object
ist einfach das praktische Schlüsselwort in C#) bleibt bestehen System.Object
, bis Sie es in etwas anderes umwandeln. Ich denke, dynamic
es ist eine seltsame Ente, die zur Laufzeit eingegeben wird. Habe selbst noch keine Gelegenheit gehabt es zu nutzen.System.Object
ist insofern etwas seltsam, als es nicht viel tun kann, außer durchgelassen zu werden, aber es ist immer noch ein Typ.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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
Newton1212
BartekChom
Münzstätten97
jamesqf
ammon
Benutzer
Luan
SJuan76
el.pescado - нет войне
Maxime
el.pescado - нет войне
Sheraff
el.pescado - нет войне
GroßmeisterB
Benutzer
DoppeltDoppelt
Fred
Peter - Wiedereinsetzung von Monica
Krisch