it-swarm.com.de

Warum gibt es auf llvm kein gutes Schema/LISP?

Es gibt Gambit-Schema, MIT Schema, PLT-Schema, Hühnerschema, Bigloo, Larceny, ...; dann gibt es alle lisps.

Meines Wissens gibt es jedoch kein einziges beliebtes Schema/LISP für LLVM, obwohl LLVM viele nette Dinge bietet wie:

  • einfacher Code zu generieren als x86
  • einfach C FFI Anrufe zu tätigen ...

Warum gibt es auf LLVM kein gutes Schema/LISP?

38
anon

LLVM bietet eine Menge, aber es ist immer noch nur ein kleiner Teil der Laufzeit, die eine funktionale Sprache benötigt. Und C-FFI-Aufrufe sind unkompliziert, da die LLVM die Speicherverwaltung überlässt, um von einer anderen Person verwaltet zu werden. Die Interaktion mit dem Garbage Collector macht FFI-Aufrufe in Sprachen wie Scheme schwierig.

Möglicherweise interessieren Sie sich für HLVM , aber es ist zu diesem Zeitpunkt noch mehr als experimentell.

22
Pascal Cuoq

Es gibt hier einen sehr kleinen und scheinbar nicht optimierten Scheme-Compiler:

http://www.ida.liu.se/~tobnu/scheme2llvm/

Ihre Frage wörtlich nehmen,

  • Compiler zu schreiben ist schwer.
  • Eine schlechte Implementierung wie die oben verknüpfte kann neue Implementierungen blockieren. Die Leute, die auf die LLVM-Seite gehen, sehen, dass es bereits ein Schema gibt, und kümmern sich nicht darum, eines zu schreiben.
  • Es gibt eine begrenzte Anzahl von Leuten, die Scheme schreiben und verwenden (ich bin eins, kein Hasser, übrigens).
  • Es gibt viele bereits vorhandene Interpreter und Compiler von Scheme, und es besteht kein schreiendes Bedürfnis nach einem neuen.
  • Es ist nicht sofort von Vorteil, einen neuen Dolmetscher mit LLVM zu schreiben. Wäre es schneller, einfacher, flexibler und in gewisser Weise besser als die anderen Dutzende von Scheme-Implementierungen?
  • Das LLVM-Projekt ging mit einer anderen Sprache (C) einher, um ihre Technologie zu demonstrieren, und hat nicht die Notwendigkeit gesehen, viele andere zu implementieren.

Ich denke, dass es sehr viel Spaß machen kann, einen LLVM-basierten Scheme-Compiler zu erstellen. Die Scheme-Compiler in SICP und PAIP sind beide gute Beispiele.

12
Evan P.

Für CL: Clasp ist eine Common LISP-Implementierung in LLVM und mocl implementiert eine Teilmenge von Common LISP in LLVM. 

Für Schema: Es gibt ein Self-Hosting-Schema-> LLVM-Demo und ein Prototyp-LLVM-Backend für Bigloo-Schema .

Für Clojure: Es gibt Rhein , was eine von Clojure inspirierte LISP ist.

8
Wilfred Hughes

Dabei ist zu beachten, dass viele dieser Implementierungen C-FFIs und native Code-Compiler haben, die vor der LLVM wesentlich älter sind. 

7
Pillsy

Vielleicht missverstehe ich die Frage oder den Kontext vollständig, aber ich glaube, Sie könnten ECL verwenden. Dies ist ein allgemeiner LISP, der bis C kompiliert wird, und den Clang - Compiler für LLVM ( anstelle von GCC).

Ich bin nicht sicher, welchen Nutzen (falls überhaupt) Sie davon haben würden, aber es würde Ihnen einen LISP geben, der auf LLVM =] läuft.

6
andrew

CL-LLVM bietet allgemeine LISP-Bindungen für LLVM. Es erfordert den FFI-Ansatz, anstatt zu versuchen, die LLVM-Baugruppe oder den Bitcode direkt auszugeben.

Diese Bibliothek ist über Quicklisp verfügbar.

3
masukomi

mocl ist ein Compiler für eine relativ statische Teilmenge von Common LISP. Es wird über LLVM/Clang kompiliert.

3
Rainer Joswig

es gibt (meines Wissens) keinen einzigen populären Plan/LISP für LLVM

Derzeit ist llvm-gcc das, was einer beliebten Implementierung von any in LLVM am nächsten kommt. Insbesondere gibt es no mature LLVM-basierte Sprachimplementierungen mit Garbage Collection. Ich bin mir sicher, dass LLVM als Grundlage für viele aufregende Sprachimplementierungen der nächsten Generation verwendet werden wird, aber dies wird einen Zeitaufwand von lot erfordern, und in diesem Zusammenhang ist es für LLVM noch früh.

Mein eigenes HLVM -Projekt ist eine der wenigen LLVM-basierten Implementierungen mit Garbage Collection und der GC ist multicore-fähig, aber lose gebunden: Ich habe einen Schattenstapel für eine "unkooperative Umgebung" verwendet, anstatt den C++ - Code zu hacken in LLVM, um echtes Stack Walking zu integrieren.

2
Jon Harrop

GHC experimentiert mit einem Schema-Backend und erhält wirklich aufregende vorläufige Ergebnisse mit seinem eigenen Code-Compiler. Zugegeben, das ist Haschisch. Sie haben jedoch kürzlich neue Änderungen an der LLVM vorgenommen, was die Abrufaufrufe für IIRC vereinfacht. Dies könnte für einige Systemimplementierungen gut sein.

0
Golias