Ich habe einen Interpreter für eine funktionale Sprache geschrieben, die ich versuche, mit einem Compiler bootstrap. Die Sprache hat ein dynamisches System und verwendet Listen, Zahlen und Strings. Es ist auch funktional und eine Funktion nimmt ihre Argumenta als Liste (wie perls @_ oder js Argumente). Funktionen sind erste Klasse und können geschachtelt werden. Welche Sprache soll ich mit dem Compiler ansprechen, btw. Ich denke, eine statische typisierte Imperativsprache anzusprechen, wie C wäre schwierig. Die Sprache sollte dynamische Typisierung und funktionale Programmierung unterstützen (js wäre nicht nett - die Sprache sollte einen Compiler selbst haben, wie geläufiges Lisp)Compiler-Backend für eine funktionale Sprache
Antwort
Sie benötigen keine spezielle Unterstützung von Ihrer Zielsprache. Der dynamische Versand kann mit generischen Versionen Ihrer Funktionen gelöst werden (aber überlegen Sie, ob Sie die Typen sicher ableiten können), z. B. für a + b
können Sie einen Code wie generic_add(a, b)
generieren, wobei generic_add
eine Funktion ist, die eine geeignete Implementierung auswählt Informationen zum Laufzeittyp.
Für den funktionellen Teil ist es einfach, ihn durch Lambda-Lifting zu eliminieren. Für letzteres müssen Sie einfach Listen von freien und gebundenen Variablen für jeden AST-Knoten erstellen: Eine Liste freier Variablen wird von den Blättern zum Stamm erstellt, und eine gebundene Liste wird in der entgegengesetzten Richtung aufgebaut. Für jeden Lambda-Knoten subtrahieren Sie frei von der Grenze und erstellen eine neue Funktion der obersten Ebene, die sowohl explizite Lambda-Argumente als auch diese Differenz (d. H. Die erfassten Variablen) annimmt.
Wenn Sie Optimierungen durchführen möchten oder wenn Ihre Sprache Fortsetzungen unterstützen soll, sollten Sie eine CPS-Transformation verwenden.
Ausgezeichnete Antwort! Vielen Dank, können Sie eine bestimmte Sprache nennen, die ich in Betracht ziehen sollte? Das wäre sehr nett. –
Verwenden Sie eine beliebige Sprache, die Ihnen die gewünschten Laufzeitfunktionen zur Verfügung stellen kann (Sie möchten vielleicht einen GC, zum Beispiel einige spezielle Bibliotheken, oder was auch immer). Im Zweifelsfall oder wenn es überhaupt keine spezifischen Bedürfnisse gibt, können Sie C verwenden, es ist eine allgemeine Wahl und dieser Pfad wird in mehreren Büchern und Tutorien sehr gut behandelt. Sie können LLVM IR auch direkt anvisieren. –
Gibt es eine ähnliche Schaltfläche auf Stackoverflow, ich möchte es wirklich drücken :) –
Das Targeting von Low-Level-Sprachen wie LLVM und C ist in Ordnung, solange Sie bereit sind, dynamischen Versand, Schließungen usw. selbst zu implementieren. Da Sie jedoch JavaScript als mögliches Ziel angeben (außer dem Mangel an Compilern, obwohl selbst JS in heutigen Hauptbrowsern JIT-kompiliert wird), wie wäre es mit Scheme? Es ist eine dynamisch typisierte, funktionale Sprache höherer Ordnung und hat bereits native Code-Compiler: http://community.schemewiki.org/?scheme-faq-standards#implementations Das einzige Problem könnte sein, dass es zu nah an Ihrer Ausgangssprache ist und Ihr Compiler (oder "Übersetzer", könnte ich sagen) wäre auch vielleicht einfach :-)
Wenn Sie bereit sind, C, ein guter Ausgangspunkt zum Ziel kann Marc Feeley Tutorial "das 90 Minuten Schema zu C-Compiler" sein. http://churchturing.org/y/90-min-scc.pdf
- 1. funktionale Assembler Sprache
- 2. Javascript als funktionale Sprache
- 3. Gibt es eine funktionale Sprache für C++ - Ökosystem?
- 4. Eine "erste" funktionale Sprache eines Amnesiepatienten? (Ich mag Clojure ...)
- 5. Funktionale Sprachen & Unterstützung für Memoization
- 6. Was sind die Hauptprobleme beim Entwerfen eines Interpreters für eine funktionale Sprache?
- 7. Funktionale Programme in nicht-funktionale Sprachen schreiben
- 8. Pure funktionale Programmierung für die GPU
- 9. Gibt es einen Algorithmus benötigt funktionale Sprache ausschließlich umgesetzt werden
- 10. Funktionale Programmierbibliothek für Objective-C
- 11. Wie würden Sie eine funktionale Programmiersprache implementieren?
- 12. Schreiben funktionale Spezifikationen für Spiele
- 13. Unterstützt Dart funktionale Programmierung?
- 14. Gute plattformübergreifende funktionale Sprache für die Verwendung in einer C++ - Anwendung?
- 15. Ist XSLT eine funktionale Programmiersprache?
- 16. Welche funktionale Programmiersprache sollte ich als erste funktionale Programmiersprache wählen?
- 17. Was ist eine gute funktionale Sprache, um einen Webservice zu erstellen?
- 18. Underscore funktionale JavaScript
- 19. Funktionale Programmierdokumentation
- 20. funktionale Abhängigkeit
- 21. Der beste funktionale Ansatz für UND über eine Liste hinweg
- 22. Funktionale Graphen
- 23. Wie schreibe ich eine funktionale Spezifikation?
- 24. Statische Analyse für eine domänenspezifische Sprache durchführen
- 25. Was für eine Sprache ist CSS?
- 26. Erhalten lokalisierter Zeichenfolgen für eine bestimmte Sprache
- 27. Funktionale Absätze
- 28. Unterstützung für die funktionale Mustererkennung in Elm
- 29. Konstante UUIDs für funktionale Protokollierung (Design)
- 30. Vorlagen für technische und funktionale Spezifikationen
Check out [QBE] (http://c9x.me/compile/). – Agis