11

コンパイル言語を作りたい。現在、バックエンドを評価しています。これまでのところ、実行速度、コンパイル速度、および TCC と呼ばれる小さくて使いやすいコンパイラーを理由に C を検討しています。

ここでの中間言語としての使用についての議論を読んで、ガベージ コレクションと互換性を持たせ、例外を処理する方法を考えようとしています。これまでのところ、両方を解決できると思いますが、オーバーヘッドが大きくなります。

他の可能なバックエンドについての私の考えのいくつかを次に示します。

  1. アセンブリ: 移植性がなく、プログラムを作成するのが非常に面倒です。
  2. .NET: 本当に遅く感じます。起動に 5 秒、Ironpython と Boo で 1+2 を評価するのに 5 秒。大きなライブラリがないと実行できません。
  3. JVM: 少し遅く感じます。バイナリ ライブラリにはアクセスできません。大きなライブラリがないと実行できません。
  4. LLVM: Windows はサポートされていません。コンパイルされた実行可能ファイルのサイズは 16 mb 以上だと聞きました
  5. C--: 未発達に見えます。
  6. C++: おそらく。バンドルできる素敵な小さな無料のものを見つけることができません。

私の考えを変えたり、このリストに追加したい人はいますか?

編集

私は最近LLVMを試しています。プリコンパイルされたバイナリがあり、ネイティブ アセンブリにコンパイルできることがわかりました。

http://www.antlr.org/wiki/display/CS652/Generating+machine+executable+binaries+with+LLVM

手順は次のとおりです。

  1. LLVM アセンブリで llvm-as を実行すると、LLVM バイトコード ファイルが生成されます。
  2. LLVM バイトコード ファイルに対して llc を実行して、アセンブリ ファイルを生成します。
  3. アセンブリ ファイルに対してアセンブラを実行して、オブジェクト ファイルを生成します。(または、外部にインストールされた c コンパイラに依存していると思われる llvm-ld を実行します)
  4. gcc などで実行可能ファイルにコンパイルします。
4

6 に答える 6

8

その場合、LLVM がおそらくより良い選択です。

LLVM は Windows をサポートしていますが、コンパイルに時間がかかります

于 2009-04-06T12:39:47.073 に答える
4

TCC が最良の選択です。移植性があり、ライブラリがあるため、libtcc と呼ばれるバックエンドとして簡単に使用できます。実行可能ファイルは gcc より小さく、ANSI C です。

于 2009-05-04T05:11:49.230 に答える
4

C++ では多くの情報が得られないため、代わりに C を使用してください。しかし、言語を Web で使用したい場合は、.NET または Java を使用してください。読み込みは遅くなりますが、実際には C と同じくらい高速です。

于 2009-04-06T09:14:48.237 に答える
2

リストに追加するもう 1 つの要素: Slava は最近、Factor バックエンドに Smalltalk を実装しました。私はこれを自分で試したことはありませんが、下位レベルのものと同様のサイズ/パフォーマンスで、上位レベルのものから必要な機能をより多く提供すると感じています.

于 2009-04-07T06:39:23.560 に答える