Gambitスキーム、MITスキーム、PLTスキーム、Chickenスキーム、Bigloo、Larceny、...; その後、すべてのlispがあります。
それでも、LLVMは次のような多くの優れた機能を提供しますが、(私の知る限り)LLVMに人気のあるscheme/lispは1つもありません。
- x86よりもコードを生成する方が簡単
- CFFI呼び出しを簡単に行う..。
では、なぜLLVMに適切なscheme/lispがないのでしょうか。
LLVMは多くの機能を提供しますが、それでも関数型言語が必要とするランタイムのごく一部にすぎません。また、LLVMはメモリ管理を他の誰かが処理するように任せているため、CFFI呼び出しは複雑ではありません。ガベージコレクターとの対話により、Schemeなどの言語でFFI呼び出しが困難になります。
HLVMに興味があるかもしれませんが、現時点ではまだ実験的なものではありません。
CLの場合:ClaspはLLVM上のCommon Lisp実装であり、moclはLLVM上のCommonLispのサブセットを実装します。
Schemeの場合:セルフホスティングScheme->LLVMデモとBiglooSchemeのプロトタイプLLVMバックエンドがあります。
Clojureの場合:ClojureにインスパイアされたLispであるRhineがあります。
ここには、非常に小さく、明らかに最適化されていないSchemeコンパイラがあります。
http://www.ida.liu.se/~tobnu/scheme2llvm/
あなたの質問を文字通りとって、
誰かがLLVMベースのSchemeコンパイラを構築するのはとても楽しいことだと思います。SICPとPAIPのSchemeコンパイラはどちらも良い例です。
覚えておくべきことの1つは、これらの実装の多くには、LLVMよりも大幅に古いCFFIとネイティブコードコンパイラが含まれていることです。
CL-LLVMは、LLVMにCommonLispバインディングを提供します。LLVMアセンブリまたはビットコードを直接出力しようとするのではなく、FFIアプローチを採用しています。
このライブラリはQuicklispから入手できます。
moclは、CommonLispの比較的静的なサブセット用のコンパイラです。LLVM/Clangを介してコンパイルされます。
(私の知る限り)LLVMには人気のあるscheme/lispは1つもありません。
現在、LLVM上の任意のllvm-gcc
言語の一般的な実装に最も近いものです。特に、ガベージコレクションを使用した成熟したLLVMベースの言語実装はまだありません。LLVMは、多くのエキサイティングな次世代言語実装の基盤として使用されると確信していますが、それには多くの時間と労力がかかり、このコンテキストでのLLVMの初期段階です。
私自身のHLVMプロジェクトは、ガベージコレクションを備えた唯一のLLVMベースの実装の1つであり、そのGCはマルチコア対応ですが、緩くバインドされています。LLVMのC ++コードをハッキングして実際のスタックを統合するのではなく、「非協調的な環境」にシャドウスタックを使用しました。歩く。
明らかにSICPに基づくScheme2LLVMがあります。
このコードは、本SICP(コンピュータープログラムの構造と解釈)の第5章のコードと非常に似ていますが、SICPが明示的な制御エバリュエーター(仮想マシン)に既にあると想定する追加機能を実装する点が異なります。コンパイラーの多くの機能は、llvm関数にコンパイルされるスキームのサブセットllvm-definesに実装されています。
それが「良い」かどうかはわかりません。
GHCは、スキームバックエンドを実験しており、ネイティブコードコンパイラよりも非常にエキサイティングな予備的な結果を得ています。確かに、それはハスケルです。しかし、最近、LLVMに新しい変更をプッシュして、末尾呼び出しをIIRCで簡単に行えるようにしました。これは、一部のスキームの実装に適している可能性があります。