5

私は現在、ペット用のプログラミング言語(学習目的のため)で働いており、昨年多くの研究を経ています。そのような言語の概念をモデル化する。まず第一に、JVMや.NETバイトコードなどの中間形式にコンパイルしたいと考えています。目標はマルチプラットフォーム/アーキテクチャに互換性があります。第二に、私はそれが速いことを望んでいます(私は他にも多くのことを念頭に置いていますが、その話題の目的ではありません)。バーチャルマシンとしてのLLVMの使用 - マルチプラットフォームとマルチアーキテクチャのコーディング

私の心に来た最良の選択肢は以下の通りであった。 は、JVMバイトコードにコンパイルおよび実行環境としてのOpenJDKのを使用し、 コンパイル.NETバイトコードへとランタイム環境としてのモノを使用し、 コンパイルLLVM IRにし、ランタイム環境としてLLVMを使用します。

あなたが想像していたように、私はLLVMを選択しました。どうして?その猛烈な速さのためです。私はC++のN-Bodyコードを使用して少しベンチマークを行い、IRを使って私のマシンで7秒を達成しました。

これは私の質問です:使用できるLLVM基本ツールセットの再配布可能なバージョンがありますか?あるいは私は自分自身をコンパイルする必要がありますか?後者の場合、それを行う方法に関するヒントを私に提供できますか?もし私が本当にそれをしなければならないと思うのですが、マシン(Intel Mac)からそれらをクロスコンパイルして、いくつかのインストーラを生成することが考えられています(Windowsの場合は.msi、人気のあるLinuxディストリビューションの場合は.rpmと.deb、 Mac)。 LLVMの最小限のサブセットだけが必要であることを覚えておいてください。このサブセットは、 "lli"を使ってVMのように動作することができます。ここでの本当の疑問は、LLVMを一般的な仮想マシンとして使用する方法です。

+0

LLVMプロジェクトには許可ライセンスがあります。あなたは** Core Libraries **を配布する必要があるように思えます。 –

+0

@RobertHarvey私が思っていたことは、購入することはどこから始めるのか分かりません。 – Salvia

+0

あなたはすでにドキュメンテーションを読んでおく必要があることは言うまでもなく、あなたがすでに決定したので... LLVMと一緒に働くことに興奮しています。ああ、私はまだドキュメントを読んでいない。 –

答えて

4

最初に、LLVM IR + LLVM、Javaバイトコード+ OpenJDK、.NET CIL + Monoの3つのオプションはすべて優れたオプションだと思います。

LLVMの場合、lliだけを使用したい場合は、LLVMをターゲットプラットフォームにコンパイルし、結果として得られるlli実行ファイルを配布ファイルにパックすることができます。

LLVMを介してJITコンパイラを書き込む別の方法は、実行エンジン(see the handy examples in the Kaleidoscope tutorial)を使用することです。つまり、自分の言語をJITコンパイルし、それを静的にLLVMにリンクしながら任意のプラットフォームにコンパイルして配布する独自のプログラムを書くことを意味します。

いずれにしても、JITコンパイラはLLVMバイナリをクライアント側にコピーする必要があるため、配布に著作権表示を添付するようにしてください(ただし、配布をオープンソースする必要はありません)。

+0

ありがとう、あなたがリンクした記事は非常に参考になった、私は出発点として使用することがあります。 – Salvia

+0

リンクが壊れています – rraallvv

+0

@rraallvv fixed、thanks! – Oak

関連する問題