45

Gambitスキーム、MITスキーム、PLTスキーム、Chickenスキーム、Bigloo、Larceny、...; その後、すべてのlispがあります。

それでも、LLVMは次のような多くの優れた機能を提供しますが、(私の知る限り)LLVMに人気のあるscheme/lispは1つもありません。

  • x86よりもコードを生成する方が簡単
  • CFFI呼び出しを簡単に行う..。

では、なぜLLVMに適切なscheme/lispがないのでしょうか。

4

10 に答える 10

25

LLVMは多くの機能を提供しますが、それでも関数型言語が必要とするランタイムのごく一部にすぎません。また、LLVMはメモリ管理を他の誰かが処理するように任せているため、CFFI呼び出しは複雑ではありません。ガベージコレクターとの対話により、Schemeなどの言語でFFI呼び出しが困難になります。

HLVMに興味があるかもしれませんが、現時点ではまだ実験的なものではありません。

于 2010-01-26T23:59:08.277 に答える
15

CLの場合:ClaspはLLVM上のCommon Lisp実装であり、moclはLLVM上のCommonLispのサブセットを実装します。

Schemeの場合:セルフホスティングScheme->LLVMデモとBiglooSchemeのプロトタイプLLVMバックエンドがあります。

Clojureの場合:ClojureにインスパイアされたLispであるRhineがあります。

于 2015-01-11T23:31:27.577 に答える
13

ここには、非常に小さく、明らかに最適化されていないSchemeコンパイラがあります。

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

あなたの質問を文字通りとって、

  • コンパイラを書くのは難しいです。
  • 上にリンクされているような不十分な実装は、新しい実装をブロックする可能性があります。LLVMページにアクセスする人々は、Schemeがすでに存在することを確認し、わざわざ作成する必要はありません。
  • スキームを作成して使用する人の数は限られています(私は1人であり、嫌いではありません)。
  • 既存のSchemeインタープリターとコンパイラーはたくさんあり、新しいものを用意する必要はありません。
  • LLVMを使用して新しいインタープリターを作成することには、すぐに明確なメリットはありません。他の数十のScheme実装よりも、より速く、より簡単で、より柔軟で、何らかの形で優れているでしょうか?
  • LLVMプロジェクトは、テクノロジーをデモするために別の言語(C)を使用しましたが、他の多くの言語を実装する必要はありませんでした。

誰かがLLVMベースのSchemeコンパイラを構築するのはとても楽しいことだと思います。SICPとPAIPのSchemeコンパイラはどちらも良い例です。

于 2011-02-04T17:50:57.650 に答える
8

覚えておくべきことの1つは、これらの実装の多くには、LLVMよりも大幅に古いCFFIとネイティブコードコンパイラが含まれていることです。

于 2010-01-28T00:55:56.700 に答える
8

質問やコンテキストを完全に誤解しているかもしれませんが、CにコンパイルされるCommon LispであるECLを使用し、 Clangコンパイラを使用して(GCCの代わりに)LLVMをターゲットにできると思います。

これによってどのようなメリットが得られるかはわかりませんが、LLVM=]で実行されるLispが得られます。

于 2012-08-20T03:51:27.517 に答える
5

CL-LLVMは、LLVMにCommonLispバインディングを提供します。LLVMアセンブリまたはビットコードを直接出力しようとするのではなく、FFIアプローチを採用しています。

このライブラリはQuicklispから入手できます。

于 2013-07-25T19:40:47.123 に答える
4

moclは、CommonLispの比較的静的なサブセット用のコンパイラです。LLVM/Clangを介してコンパイルされます。

于 2013-11-06T12:27:03.857 に答える
3

(私の知る限り)LLVMには人気のあるscheme/lispは1つもありません。

現在、LLVM上の任意のllvm-gcc言語の一般的な実装に最も近いものです。特に、ガベージコレクションを使用した成熟したLLVMベースの言語実装はまだありませんLLVMは、多くのエキサイティングな次世代言語実装の基盤として使用されると確信していますが、それには多くの時間と労力がかかり、このコンテキストでのLLVMの初期段階です。

私自身のHLVMプロジェクトは、ガベージコレクションを備えた唯一のLLVMベースの実装の1つであり、そのGCはマルチコア対応ですが、緩くバインドされています。LLVMのC ++コードをハッキングして実際のスタックを統合するのではなく、「非協調的な環境」にシャドウスタックを使用しました。歩く。

于 2010-04-26T19:28:28.067 に答える
1

明らかにSICPに基づくScheme2LLVMがあります。

このコードは、本SICP(コンピュータープログラムの構造と解釈)の第5章のコードと非常に似ていますが、SICPが明示的な制御エバリュエーター(仮想マシン)に既にあると想定する追加機能を実装する点が異なります。コンパイラーの多くの機能は、llvm関数にコンパイルされるスキームのサブセットllvm-definesに実装されています。

それが「良い」かどうかはわかりません。

于 2020-12-21T18:17:39.427 に答える
0

GHCは、スキームバックエンドを実験しており、ネイティブコードコンパイラよりも非常にエキサイティングな予備的な結果を得ています。確かに、それはハスケルです。しかし、最近、LLVMに新しい変更をプッシュして、末尾呼び出しをIIRCで簡単に行えるようにしました。これは、一部のスキームの実装に適している可能性があります。

于 2010-03-17T01:54:04.573 に答える