Ich mag das Design von Programmiersprachen sehr. Manchmal denke ich, dass meine Sprachprojekte und ihre potenziellen Benutzer von einem umfassenden Standarddokument profitieren würden. Ich habe mir viele Sprachstandards angesehen, angefangen von sehr formal (C ++) bis hin zu eher informell (ECMAScript), aber ich kann nicht wirklich verstehen, wie ich die Dinge aufschlüsseln und ein solches Dokument organisieren soll, obwohl ich Ich denke, dass ich im technischen Schreiben im Allgemeinen ziemlich gut bin.
Soll ich es wie ein langes Tutorial oder eher wie eine formale Mathematikarbeit schreiben? Wie halte ich es auf dem neuesten Stand, wenn ich es neben einer Referenzimplementierung entwickle? Sollte ich einfach aufgeben und die Implementierung und Dokumentation als De-facto-Standard behandeln? Gibt es wirklich einen signifikanten Vorteil, wenn man einen Standard hat? Bedeutet das Erfordernis eines Standards, dass die Sprache unnötig komplex ist?
Antworten:
Ich fand die Java-Sprachspezifikation sowohl formal als auch lesbar und ich denke, sie hat eine vernünftige Struktur. Einige der W3C-Spezifikationen könnten ebenfalls gute Beispiele sein.
Wenn Sie die formale Arbeit erledigen, können Sie die Sprachkomplexität reduzieren und die Eckfälle erkennen.
Überschriften Brain Dump: Quellcodierung, Lexing, Fundamentaltypen, Literale, Operatoren, Ausdrücke, einfache Anweisungen, Bedingungen, Schleifen, Funktionen (Definitionen und Aufrufe), Typdeklarationen, Module, Kompilierungseinheiten, Variable Scoping, verschiedene Arten der Namensauflösung (z. B. Importe, Methoden), Speichermodell, Nebenwirkungen, Typisierung, Nebenläufigkeit…
quelle
Lies viel und halte es einfach
Das Entwerfen einer neuen Sprache ist schwierig. Sehr hart. Aber letztendlich sehr befriedigend, wenn es populär wird und wirklich ein Problem löst, das die Leute auf elegante Weise erleben.
Wie ich in den Kommentaren erwähnt habe, empfehle ich Ihnen, domänenspezifische Sprachen von Martin Fowler aus folgenden Gründen zu lesen :
Denken Sie beim Verfassen Ihrer Spezifikation an Ihr Publikum. Bevor Sie mit dem Finger auf die Tastatur greifen, um Ihre Sprache zu entwerfen, müssen Sie sich natürlich genau überlegen, was Sie tun möchten.
Wenn es sich um eine neue, interpretierte Sprache handelt, die JavaScript ersetzt, möchten Sie einen sehr fairen Ansatz verfolgen, um Webentwickler mit einer begrenzten Aufmerksamkeitsspanne und dem Wunsch nach sofortigen Ergebnissen zu erreichen - oder, wenn möglich, schneller.
Wenn es bei der nächsten Titan-Mission eingesetzt werden soll, sind äußerst detaillierte Spezifikationen, die genaue formale Beweise für das Verhalten der einzelnen Komponenten enthalten, die Mindesteinstiegsstufe.
Es ist also keine einfache Sache. Um sich der Spezifikation anzunähern, ist es wahrscheinlich besser, wenn Sie viel Erfahrung in der Erstellung Ihrer Sprachen sammeln und auch mit denen zusammenarbeiten, die sie tatsächlich täglich verwenden. Wenn Sie gewillte Opfer haben, ähm, Entwickler, die bei der Arbeit etwas Zeit brauchen, um Ihre Sprache zu lernen, können sie Ihnen Feedback geben, was erforderlich ist, um sie dazu zu bringen, sie zu benutzen.
Kurz gesagt, halten Sie es einfach und mehr Menschen werden es benutzen.
quelle
Wirth hat viele Programmiersprachen entworfen und implementiert: Davon zeichnen sich die Spezifikationen für die Sprachen Oberon und Oberon2 durch Vollständigkeit, Knappheit und Lesbarkeit aus.
quelle
Common Lisp und Haskell haben Sprachstandards. Ruby und Python haben Implementierungen und Dokumentationen. Daher würde ich sagen, dass ein Sprachstandard nicht erforderlich ist, aber es kann hilfreich sein, wenn Sie erwarten, dass es mehr als eine Implementierung der von Ihnen entworfenen Sprache gibt. Andererseits ist ein Standard verfrüht, wenn Sie erhebliche Änderungen in Ihrer Sprachdefinition erwarten.
quelle
Jede Spezifikation sollte knapp sein und den Test der Zeit bestehen
Aus diesem Grund sehen Sie eine Abstraktion wie BNF, die für viele Sprachstandards verwendet wird. Sie ist knapp und wird noch lange verstanden, nachdem viele unserer aktuellen Tools zurückgelassen wurden.
Natürlich steckt mehr dahinter als nur eine Grammatik. Schauen Sie sich an, was andere getan haben ... perl6, scheme, C ... sie befassen sich mit Problemen, die auch dem Implementierer am Herzen liegen.
quelle