Beste Antwort
Es hängt davon ab, was Sie unter „Systemprogrammierung“ und „am besten“ verstehen.
Zum Beispiel kann ATS (http://www.ats-lang.org/) alle Ihre Kriterien und mehr erfüllen – es ist eine sichere Sprache mit Parallelitätsfunktionen auf hoher Ebene, die eine Funktion unterstützt, aber kein Mandat für eine Funktion erteilt Stil und sehr gute Leistung. Auch wenn es eines der besten auf dem Papier ist, ist es möglicherweise nicht das „Beste“, da nicht genügend Leute es verwenden und es „anders“ erscheint.
In der anderen Richtung ist C aus verschiedenen Gründen schrecklich. Die manuelle Speicherverwaltung ist eine große Fehlerquelle und in einer gleichzeitigen Umgebung noch schwieriger zu beheben. Wenn Sie konzeptionell nahe am Metall bleiben, haben Sie keine Möglichkeit dazu Abstrakt auf eine Weise, mit der Sie Arbeitscode schneller erstellen können, und ermutigt Sie, Dinge auf einer Ebene zu schreiben, die schwer zu parallelisieren ist. Andererseits ist es möglicherweise die beste Systemprogrammiersprache, wenn Sie auf Hardware ausgeführt werden müssen, auf der andere Compiler knapp sind, oder wenn Sie Kernelprogrammierer einstellen müssen.
Während es mich schmerzt, es zu sagen, Da ich mit einigen Aspekten des Designs grundsätzlich nicht einverstanden bin, sollten Sie sich Go ansehen. Es scheint, als ob ihre Designkriterien ziemlich gut mit Ihren Anforderungen übereinstimmen.
Antwort
Es scheint, dass Sie eine „Sprache“ suchen, die Ihnen beide Abstraktionen gibt, ohne sich Sorgen machen zu müssen über die damit verbundenen Komplikationen (dh es ist nicht erforderlich, die Parallelität von Grund auf neu aufzubauen), aber auch hochleistungsfähig und ressourcenschonend. Und da dies eine „Systemaufgabe“ ist, sollte es in der Lage sein, eine direkte Verbindung mit der gesamten Hardware herzustellen Etwas, bei dem der größte Teil des schweren Hebens bereits erledigt ist (entweder in den Redewendungen der Sprache oder der verfügbaren Bibliotheken oder vielleicht in beiden). Außerdem würde es einen nativen Compiler anstelle einer VM benötigen.
Wenn dies der Fall ist ist der Fall, ich bin mir definitiv nicht sicher, ob ich der Beste bin. Es gibt viele Alternativen, sogar viele der kleinen Gruppe, die ich kenne. Wenn Sie „wirklich“ das „Beste“ erreichen wollen, müssen Sie eine Liste aller Sprachen erstellen – ohne Vorurteile. Dann beginnen Sie mit der Verfeinerung durch Auslassung – dh Gehen Sie alle Anforderungen durch und lassen Sie diejenigen weg (oder gehen Sie zumindest weiter unten in der Liste), bei denen die Sprache (oder ihre Tools) der Anforderung nicht angemessen sind.
Die Abstraktionsanforderungen würden höchstwahrscheinlich C und entfernen Vielleicht aus der Liste, vielleicht halten die neuen Updates für C ++ es trotzdem am Laufen.
Alle VM-basierten würden wahrscheinlich in irgendeiner Hinsicht versagen (beachten Sie nicht unbedingt, aber Sie würden eine Möglichkeit brauchen mindestens Teile davon in native umzuwandeln). Also diese Java / PVM / DotNet / etc. Sprachfamilie kann wahrscheinlich auch weggelassen werden.
Hardware-Links können einige entfernen, beachten Sie jedoch, dass es nicht unmöglich ist, mehr als eine Sprache (oder Sprachfamilie) zu verwenden, um sich fortzubewegen Diese Anforderung. Zum Beispiel ist es sogar unmöglich, C für den gesamten Stapel von Systemaufgaben zu verwenden – zumindest einige der Boot-Teile in allen Systemen werden in Assembly geschrieben, und darüber hinaus werden viele Systeme in höherem Level über dem geschrieben „C“ Portionen. In den meisten Fällen ist es eine Situation, nur das zu verwenden, was bereits gemacht wurde, und / oder es zu dem zu ergänzen, das besser für die Stellen geeignet ist, an denen sie passen. Sie können also wahrscheinlich (in der gleichen Weise) eine Bibliothek / ein „Plugin“ erhalten. Dadurch kann jede Sprache die Hardware direkt beeinflussen. Ob dies dann Dinge wie Leistung oder Ressourcenökonomie beseitigt, ist eine andere Sache, die Tests und alternatives Kombinationsdenken erfordern würde (z. B. erstellen Sie in C eine atomare Disc-Zugriffsroutine, die von einem Akteur-Thread in Lisp aufgerufen wird und möglicherweise Overhead verursacht Jeder atomare Aufruf verwendet seine eigenen Ressourcen und möglicherweise geht die Leistung aufgrund der CFFI-Aufrufe verloren.
Und dann ist der weiße Elefant (und der Hauptgrund, warum C so allgegenwärtig ist) ein Beispiel: Es ist viel schwieriger etwas in einer anderen Sprache auszuprobieren, in der Samples schwer zu finden oder gar nicht vorhanden sind. Es ist immer äußerst schwierig, der Erste zu sein, der es tut, anstatt nur dasselbe zu tun, nur „Ihren Weg“.
Wenn Sie diesen Weg gehen, würden Sie wahrscheinlich sehr schnell große Teile dieser enormen Liste von Sprachen eliminieren. Die zeitaufwändigste Aktion wäre jedoch, jede Sprache zu untersuchen, um herauszufinden, wie sie sich für jede der Anforderungen gegen andere misst. Deshalb würden sich die meisten nicht darum kümmern und bleib einfach bei etwas wie C, obwohl es (auf lange Sicht) bedeuten kann, dass sie in der Lage sind, etwas „besser“ schneller zu machen.