ガンビットスキーム、MITスキーム、PLTスキーム、チキンスキーム、ビッグルー、ラーセニーなどがあります。
しかし、LLVMには次のような多くの優れた機能がありますが、LLVMには(私の知る限り)単一の一般的なスキーム/ LISPはありません。
では、なぜLLVMには適切なスキーム/ LISPがないのでしょうか?
LLVMは多くの機能を提供しますが、それでも関数型言語が必要とするランタイムのごく一部です。また、LLVMはメモリ管理を他の誰かが処理する必要があるため、C FFI呼び出しは複雑ではありません。ガベージコレクターとのやり取りは、Schemeなどの言語でFFI呼び出しを困難にするものです。
[〜#〜] hlvm [〜#〜] に興味があるかもしれませんが、現時点ではまだ実験的なものではありません。
非常に小さく、明らかに最適化されていないSchemeコンパイラがここにあります:
http://www.ida.liu.se/~tobnu/scheme2llvm/
あなたの質問を文字通り受け取り、
誰かがLLVMベースのSchemeコンパイラを構築するのはとても楽しいことだと思います。 SICPとPAIPのSchemeコンパイラは両方とも良い例です。
CLの場合: Clasp はLLVMのCommon LISP実装であり、 mocl はLLVMのCommon LISPのサブセットを実装します。
Schemeの場合: 自己ホスティング方式-> LLVMデモ と Bigloo方式のプロトタイプLLVMバックエンド があります。
Clojureの場合: Rhine があり、これはClojureにヒントを得たLISPです。
たぶん私は質問やコンテキストを完全に誤解しているかもしれませんが、CにコンパイルされるCommon LISPである [〜#〜] ecl [〜#〜] を使用して、 Clang コンパイラー(GCCではなく)LLVMをターゲットにします。
これがどんなメリットをもたらすかはわかりませんが、LLVMでLISPを実行することでメリットが得られます=]。
心に留めておくべきことの1つは、これらの実装の多くに、LLVMよりもかなり古いC FFIとネイティブコードコンパイラがあることです。
CL-LLVM は、LLVMの一般的なLISPバインディングを提供します。 LLVMアセンブリまたはビットコードを直接出力するのではなく、FFIアプローチを採用しています。
このライブラリはQuicklispから入手できます。
mocl は、Common LISPの比較的静的なサブセット用のコンパイラです。 LLVM/Clang経由でコンパイルします。
(私の知る限り)LLVMには一般的な単一のスキーム/ LISPはありません
現在、 llvm-gcc
は、LLVMでのany言語の一般的な実装に最も近いものです。特に、ガベージコレクションを備えたno成熟したLLVMベースの言語実装がまだあります。 LLVMは多くのエキサイティングな次世代言語実装の基盤として使用されると確信していますが、これにはlotの時間と労力がかかり、この文脈におけるLLVMの初期の頃。
私自身の [〜#〜] hlvm [〜#〜] プロジェクトは、ガベージコレクションを備えた唯一のLLVMベースの実装の1つであり、そのGCはマルチコア対応ですが緩やかにバインドされています。実際のスタックウォーキングを統合するためにLLVMのC++コードをハッキングするのではなく、「非協力的な環境」。
GHCは、スキームバックエンドを実験しており、ネイティブコードコンパイラーを超える非常にエキサイティングな予備結果を得ています。確かに、それはhaskellです。しかし、最近、LLVMに新しい変更が加えられ、末尾呼び出しがより簡単になりました。これは、一部のスキームの実装に適している場合があります。