Die Sprache Bel wurde in der Sprache Bel geschrieben.

Im Jahr 1960 beschrieben John McCarthy Lisp – einen neuen Typ von Programmiersprache. Ich sage 'neuen Typ', weil Lisp nicht nur eine neue Sprache war, sondern eine neue Art, Sprachen zu beschreiben.
Um Lisp zu definieren, begann er mit einer kleinen Menge von Operatoren, einer Art Axiome, die er dann verwendete, um einen Interpreter für die Sprache selbst zu schreiben.
Sein Ziel war es nicht, eine Programmiersprache im herkömmlichen Sinne zu beschreiben – eine Sprache, die verwendet wird, um dem Computer anzuzeigen, was er tun soll. In seiner Arbeit von 1960 wurde Lisp als formales Rechenmodell verstanden, das der Turing-Maschine ähnlich ist. McCarthy dachte über die Verwendung auf Computern nicht nach, bis dies Steve Russell, sein Absolvent, vorschlug.
In Lisp von 1960 gab es keine Funktionen, die für Programmiersprachen typisch sind. Zum Beispiel gab es keine Zahlen, keinen Fehler oder Ein-/Ausgabe. Daher mussten die Menschen, die Lisp als Grundlage für Programmiersprachen verwendeten, diese Funktionen selbst hinzufügen. Und sie taten dies, indem sie auf den axiomatischen Ansatz verzichteten.
So verlief die Entwicklung von Lisp in zwei scheinbar unabhängigen Phasen: die formale Phase, die in der Arbeit von 1960 dargestellt ist, und die Implementierungsphase, in der die Sprache angepasst und erweitert wurde, um auf Computern ausgeführt zu werden. Die Hauptarbeit, gemessen an der Anzahl der implementierten Funktionen, fand in der Implementierungsphase statt. Lisp 1960, übersetzt in Common Lisp, enthält nur 53 Zeilen. Es macht lediglich das Nötigste, um Ausdrücke zu interpretieren. Alles andere wurde in der Implementierungsphase hinzugefügt.
Meine Hypothese ist, dass es Lisp trotz seiner schwierigen Geschichte zugutekam, dass seine Entwicklung in zwei Phasen stattfand; dass das ursprüngliche Unterfangen, die Sprache durch das Schreiben eines Interpreters in derselben Sprache zu definieren, Lisp mit seinen besten Eigenschaften ausstattete. Und wenn dem so ist, warum nicht einen Schritt weiter gehen?
Bel — das ist der Versuch, die Frage zu beantworten: Was wäre, wenn man den Übergang von der formalen Phase zur Implementierungsphase nicht frühzeitig, sondern so spät wie möglich vollzieht? Wenn Sie weiterhin einen axiomatischen Ansatz verwenden, bis Sie etwas haben, das einem abgeschlossenen Programmiersprachenprojekt nahe kommt, welche Axiome benötigen Sie dann und wie würde die resultierende Sprache aussehen?
Ich möchte klarstellen, was Bel ist und was es nicht ist. Obwohl es wesentlich mehr Möglichkeiten bietet als Lisps McCarthy aus dem Jahr 1960, befindet sich Bel immer noch in der formalen Phase. Wie das in der Arbeit von 1960 beschriebene Lisp ist es keine Sprache, die man zum Programmieren verwenden kann. Hauptsächlich, weil es wie Lisps McCarthy nicht um Effizienz kümmert. Wenn ich etwas in Bel hinzufüge, beschreibe ich die Bedeutung dieser Hinzufügung, ohne eine effiziente Implementierung anzustreben.
Wozu? Warum den formalen Schritt verlängern? Eine der Antworten ist, um zu sehen, wohin uns der axiomatische Ansatz führen kann, was an sich eine interessante Übung ist. Wenn Computer so leistungsstark wären, wie wir es uns wünschen – wie würden dann die Sprachen aussehen?
Aber ich glaube auch, dass es möglich ist, eine effektive Implementierung basierend auf Bel zu schreiben, indem man Einschränkungen hinzufügt. Wenn Sie eine Sprache benötigen, die Ausdruckskraft, Klarheit und Effizienz besitzt, könnte es sinnvoll sein, mit Ausdruckskraft und Klarheit zu beginnen und dann Einschränkungen hinzuzufügen, anstatt in die entgegengesetzte Richtung zu gehen.
Wenn Sie also versuchen möchten, eine Implementierung basierend auf Bel zu schreiben – bitte sehr. Ich werde einer der ersten Benutzer sein.
Letztendlich habe ich einige Dinge aus früheren Dialekten reproduziert. Entweder haben ihre Designer alles richtig gemacht, oder, beeinflusst von zuvor verwendeten Dialekten, sehe ich keine richtige Antwort – die Zeit wird es zeigen. Ich habe auch versucht, nicht zu weit von den Vereinbarungen abzuweichen, die in Lisp akzeptiert sind. Das bedeutet, dass, wenn Sie eine Abweichung von den Lisp-Vereinbarungen sehen, es möglicherweise dafür Gründe gab.
.
Übersetzung Dank: Denis Mitropolsky
P.S.
Quelle: habr.com
