Frage

Bitte entschuldigen Sie meine Unwissenheit. Ich bin in PHP Dilettantismus und meine Füße nass Surfen immer so, und fühlen sich gezwungen, eine Frage zu stellen, die ich schon seit Jahren über mich gefragt:

Wenn Sie eine völlig neue Programmiersprache zu schreiben, was Sie schreiben es in

Das klingt wahrscheinlich wirklich dumm zu allen sind Sie Programmierer, für den ich großen Respekt haben, aber es ist ein verwirrendes Huhn & Ei, was für mich. Wie geht's? Sagen Sie sich Heute werde ich eine neue Sprache erfinden! und dann feuern ... Notepad? Sind alle Compiler auf bereits vorhandenen Sprachen gebaut, so dass man ein alle Programmiersprachen Diagramm immer auf eine monströse Verzweigung Baum, der schließlich geerdet aus an ... Ich weiß nicht, was alt

Mit meinem schwachen Verstand, finde ich faszinierend ... Bitte, mich erziehen!

War es hilfreich?

Lösung

Es ist nicht eine dumme Frage. Seine eine ausgezeichnete Frage.

Wie bereits beantwortet die kurze Antwort lautet: „Eine andere Sprache.“

Nun, das führt zu einigen interessanten Fragen? Was passiert, wenn es die erste Sprache geschrieben für  Ihr spezielles Stück Hardware? Ein sehr reales Problem für Menschen, die auf Embedded-Geräten arbeiten. Wie bereits beantwortet „die Sprache auf einem anderen Computer“. In der Tat werden einige Embedded-Geräte nie einen Compiler bekommen, werden ihre Programme immer auf einem anderen Computer erstellt werden.

Aber man kann es schieben noch weiter zurück. Was ist mit den ersten Programmen überhaupt geschrieben?

Nun, die ersten Compiler für „Hochsprachen“ geschrieben worden wären, in was „Assemblersprache“ genannt. Assemblersprache ist eine Sprache, wo jeder Befehl in der Sprache an die CPU auf einen einzigen Befehl entspricht. Seine sehr niedriges Niveau Sprache und extrem ausführlich und sehr arbeitsintensiv schreiben in.

Aber auch Assembler-Sprache zu schreiben erfordert ein Programm eine Assembler genannt Assemblersprache in „Maschinensprache“ zu konvertieren. Wir gehen weiter zurück. Die ersten Monteure wurden in „Maschinencode“ geschrieben. Ein Programm, bestehend ausschließlich aus binären Zahlen, die eine direkte Eins-zu-Eins-Entsprechung mit der rohen Sprache des Computers selbst.

Aber es ist noch nicht zu Ende. Selbst eine Datei mit nur rohen Zahlen in ihm noch braucht Übersetzung. Sie müssen immer noch die reinen Zahlen in einer Datei in den Computer erhalten.

Nun es glauben oder nicht die ersten Computer eine Reihe von Schaltern auf der Vorderseite von ihnen hatten. Sie blätterte die Schalter, bis sie eine binäre Zahl dargestellt wird, dann Sie einen anderen Schalter schnippte und geladen, dass einzelne Zahl in den Computer-Speicher. Dann hielt man geschaltet Kümmerst flicking, bis Sie ein minimales Computerprogramm geladen hatten, die Programme von der Festplatte Dateien oder Lochkarten lesen konnte. Sie schnippte einen weiteren Schalter, und es begann das Programm ausgeführt wird. Als ich in den 80er Jahren auf die Universität ging, sah ich Computer, die diese Fähigkeit hatte aber nie die Aufgabe des Ladens in einem Programm mit den Schaltern gegeben.

Und noch früher als die Computerprogramme hatten schwer mit Steckerleisten verdrahtet werden !

Andere Tipps

Die häufigste Antwort ist C. Die meisten Sprachen werden in C oder in einer Mischung aus C mit Rückrufen und einem „Lexer“ implementiert wie Flex und Parser-Generator wie YACC . Dies sind Sprachen, die für einen bestimmten Zweck verwendet werden - Syntax einer anderen Sprache zu beschreiben. Manchmal, wenn es um die kompilierten Sprachen kommt, werden sie zuerst in C. Dann wird die erste Version der Sprache verwendet wird implementiert, um eine neue Version zu erstellen, und so weiter. (Wie Haskell .)

Viele Sprachen sind bootstrapped- das heißt in sich selbst geschrieben . Wie, warum wollen Sie, dies zu tun, ist es oft eine gute Idee href="https://stackoverflow.com/questions/1493747/bootstrapping-a-compiler-why"> essen Sie Ihr eigenes dogfood .

Wikipedia-Artikel Ich beziehe mich auf bespricht das Huhn und Ei Problem. Ich glaube, Sie finden es sehr interessant.

So ziemlich jede Sprache, wenn man mit geeignet, um mit Grafiken und anderen komplexen Datenstrukturen arbeiten, wird viele Dinge einfacher machen. Die Produktion Compiler ist oft geschrieben in C oder C ++ aus Leistungsgründen, aber Sprachen wie OCaml, SML, Prolog und Lisp sind wohl besser für das Prototyping, die Sprache.

Es gibt auch mehrere „kleine Sprachen“ in der Sprache Design verwendet. Lex und yacc sind zur Angabe Syntax und Grammatiken verwendet, zum Beispiel, und sie kompilieren zu C. (Es gibt Anschlüsse für andere Sprachen, wie ocamllex / ocamlyacc, und viele andere ähnliche Werkzeuge.)

Als Sonderfall, neue Lisp Dialekte sind oft auf bestehenden Lisp-Implementierungen gebaut, da sie auf den meisten der gleichen Infrastruktur huckepack können. Schreiben eines Scheme-Interpreter kann in weniger als einer Seite des Codes in Schema durchgeführt werden, an welcher Stelle eine neue Funktionen leicht hinzufügen können.

Im Grunde Compiler sind nur Programme, die in etwas lesen und übersetzen es um etwas anderes - Umwandlung LaTeX Quelle zu DVI, C-Code Montag Umwandlung und dann in Maschinensprache, eine Grammatik-Spezifikation C-Code für einen Parser Umwandlung usw. Sein Designer gibt die Struktur des Quellformat (Parsing), was diese Strukturen bedeuten, wie die Daten zu vereinfachen (Optimierung), und die Art der Ausgabe zu erzeugen. Interpreter lesen Sie die Quelle und direkt ausführen. (Dolmetscher sind in der Regel einfacher zu schreiben, aber viel langsamer.)

Eigentlich können Sie schreiben in nahezu jeder Sprache, die Sie mögen. Es gibt nichts, was Sie vom Schreiben eines C-Compiler in Ruby verhindert. „All“ Sie tun müssen, ist das Programm zu analysieren und den entsprechenden Maschinencode emittiert. Wenn Sie / Schreiben von Dateien lesen können, wird Ihre Programmiersprache wahrscheinlich ausreichen.

Wenn Sie von Grund auf neu auf einer neuen Plattform starten, können Sie tun Cross-Kompilierung: einen Compiler für die neue Plattform schreiben, die in Java läuft oder nativ auf x86. Entwickeln Sie auf Ihrem PC und überträgt dann das Programm auf die neue Zielplattform.

Die grundlegendsten Compiler sind wahrscheinlich Assembler und C.

„eine neue Programmiersprache Schreiben“ mit sich bringt technisch keinen Code. Es kommt nur mit einer Spezifikation für das, was Ihre Sprache aussieht und wie es funktioniert. Sobald Sie eine Vorstellung davon haben, was Ihre Sprache ist wie, können Sie Übersetzer und Dolmetscher schreiben, um tatsächlich Ihre Sprache „Arbeit“ zu machen.

Ein Übersetzer gibt ein Programm in einer Sprache und gibt ein äquivalentes Programm in einer anderen Sprache. Ein Dolmetscher gibt ein Programm in einer Sprache und führt es aus.

Zum Beispiel kann ein C-Compiler übersetzt typischerweise C-Quellcode (die Eingabesprache) zu einer Assemblersprachenprogramm (die Ausgangssprache). Der Assembler nimmt dann das Assembler-Sprache-Programm und produziert Maschinensprache. Sobald Sie Ihren Ausgang haben, brauchen Sie nicht die Übersetzer Ihr Programm auszuführen. Da Sie nun ein Maschinensprache-Programm haben, wirkt die CPU als Dolmetscher.

Viele Sprachen unterschiedlich umgesetzt. Zum Beispiel ist javac ein Übersetzer, die Java-Quellcode zu JVM-Bytecode umwandelt. Die JVM ist ein Interpreter [1], die Java-Bytecode ausgeführt wird. Nachdem Sie javac und bekommen Bytecode ausführen, brauchen javac Sie nicht mehr. Jedes Mal, wenn Sie Ihr Programm ausführen möchten, werden Sie die JVM brauchen.

Die Tatsache, dass die Übersetzer brauchen nicht um gehalten werden, um ein Programm auszuführen ist, was es möglich macht, ohne dass es zu „Bootstrap“ Ihre Sprache läuft am Ende „oben auf“ Schichten und Schichten aus anderen Sprachen.

[1] Die meisten JVMs tun Übersetzung hinter den Kulissen, aber sie sind nicht wirklich Übersetzer, dass die Schnittstelle zu der JVM ist nicht „Eingabesprache -> Ausgangssprache“.

Generell können Sie verwenden nur über das, was Sprache, die Sie mögen. PHP wurde in C geschrieben, zum Beispiel. Wenn Sie keinen Zugang zu Compiler auch immer haben, Sie gehen zu schreiben Assemblersprache zurückgreifen zu haben und es zu Maschinencode von Hand kompilieren.

Viele Sprachen wurden zum ersten Mal in einer anderen verfügbaren Sprache geschrieben und dann in mir selbst neu implementiert und Bootstrap auf diese Weise (oder nur gehalten, die Umsetzung in der Fremdsprache, wie PHP und Perl), aber einige Sprachen, wie der erste Assembler wurden von Hand kompiliert Maschinencode wie der erste C-Compiler Hand wurde Assembly kompiliert.

Ich habe in Bootstrapping interessiert gewesen, seitdem ich über sie gelesen. Um mehr zu erfahren Ich habe versucht, es selbst zu tun mit meiner eigenen Obermenge von BF zu schreiben, die ich genannt EBF an sich. die erste Version von EBF hatte 3 zusätzliche Primitiven und ich die Hand des ersten binären zusammengestellt. Ich fand einen zweistufigen Rhythmus, wenn dies zu tun. Ich implementiert eine Funktion in der aktuellen Sprache in einem Release und hatte einen süßen Release, wo ich den Code neu geschrieben die implementierte Funktion zu nutzen. Die Sprache war ausdrucksstark genug verwendet werden, um ein LISP-Interpreter .

Ich habe die Hand kompilierte Version zusammen mit der Quelle in dem erster Release-Tag und der Code ist ziemlich klein. Die letzte Version ist 12-mal größer in der Größe und der Code und ermöglicht kompaktere Code so Hand die aktuelle Version kompilieren wäre schwer richtig zu machen.

Edmund Grimley Evans habe etwas ähnliches mit seine HEX Sprache

Eines der interessantesten Dinge über diese selbst zu tun ist, dass Sie verstehen, warum manche Dinge sind wie sie sind. Mein Code war Produkt, wenn kleine inkrementelle Anpassungen eine sieht es eher wie es sich entwickelt hat und nicht von Grund auf neu entwickelt. Ich denke daran, wenn Code heute zu lesen, die ich denke, sieht ein wenig aus.

In der Regel mit einer Allzweck-Programmiersprache für Systementwicklung, z.B. C, Haskell, ML, Lisp, etc., aber die Liste der Optionen ist lang. Auch in der Regel mit einigen domänenspezifischen Sprachen für Spricht Implementierung, dh Parser und Lexer Generatoren, Zwischensprachen wie LLVM , etc . und wahrscheinlich einige Shell-Skripten, Test-Frameworks und ein Build-Konfigurationssystem, zB autoconf.

Die meisten Compiler wurden C oder ac wie Programm wriiten wenn nicht c dann Montage lang der Weg ist jedoch zu gehen, wenn ein neues lang von Grund auf neu zu schreiben, und Sie haben kein Makro lib oder Quellcode von einem Prototyp Sprache müssen Sie definieren Jetzt Ihre eigenen Funktionen in welcher Sprache? Sie können nur eine Form „des Quellcodes genannt psedocode an der Maschine schreiben sie wie eine BNF-Grammatik aus der objektorientierten strukturierten lang spec wie Fortran Grund algo Lisp aussieht. So Bild ein Kreuz das Schreiben von Code eines dieser Sprachsyntax ähnelt Das psedo Code ist

Auch weitere binäre oder Montagearbeiten müssen in Funktionen übersetzt werden, das ist der Montierer / Compiler Job, dann in dem Objekt, von Daten und Funktionen, wenn Sie „, wie diese Objekte Funktionalität sein nicht eine Quelldatei müssen sehen soll vertreten in Ihrer Sprache Implementierung, dann müssen Sie „sehen“ implementieren, oder definieren Sie Ihre eigenen Funktionen, Prozeduren und Datenstrukturen erkennen, die eine Menge von Wissen erfordert, müssen Sie sich fragen, was ein function.Your Geist wird dann die Sprache simulation.This getrennt vom Rest eines Master-Programmierer.

Auch ich hatte diese Frage paar Monate zurück. Und ich las einige Artikel und einige Videos gesehen, die mir geholfen, meine eigene Sprache weich genannt Schreiben zu beginnen. Es ist nicht vollständig noch nicht, aber ich habe eine Menge Sachen von dieser Reise gelernt.

Grund Dinge, die Sie wissen sollten, ist, wie Compiler funktioniert, wenn es ein Code-Snippet auszuführen hat. Compiler hat viele Phasen wie lexikalische Analyse, semantische Analysegerät, AST (Abstract Syntax-Baum) etc.

Was ich in meiner neuen Sprache hat hier gefunden werden können - http: / /www.singhajit.com/writing-a-new-programming-language/

Wenn Sie eine Sprache für die erste Zeit mit dem Schreiben dann alles Gute und Sie haben einen langen Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top