アカウント名:
パスワード:
んー、llvmの吐く中間コードはUCSD Pascal仮想マシンやJava仮想マシンのように完結性の高い仮想マシンで共通して「One write,All run」(だっけか)動くバイトコードであって、RTL式のようなコンパイラが内部で使うための構文木とは違います。
何言ってんだか。その正反対ですよ。各CPUの機械語に落とし込みやすいLLVM IRを定めるための、現存CPUの差異を捨象した仕様こそがLLVMですよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stableって古いって意味だっけ? -- Debian初級
中間コード… (スコア:0)
gimple,rtlとかは違うの?
というか、まじめにC/C++のコンパイラを書こうとしたら、
構文木はどこかにして保持したくなるんじゃないの?
それがあるからってどこが単なるコンパイラじゃないの?
llvmがよさげなのは、実行時プロファイルを元にvm用のコードを最適化してくれるところでしょ。
中間コードでも意味が違う(Re:中間コード… (スコア:1, 興味深い)
# RTL式を動かすインタプリタは出来ないことはないけど、あんまし効率がよくないのではないかと思うのですが…
つまりは、この手のコンパイラの工程を簡略に表すと、以下のような感じになります(斜体は中間でVM吐く場合に追加)
ソース
↓
RTL
↓
最適化・(必要なら)リンク
↓
仮想マシンバイトコード出力
↓
最適化・リンク
↓
実マシン
Re:中間コードでも意味が違う(Re:中間コード… (スコア:1, 興味深い)
何言ってんだか。その正反対ですよ。各CPUの機械語に落とし込みやすいLLVM IRを定めるための、現存CPUの差異を捨象した仕様こそがLLVMですよ。
Re:中間コードでも意味が違う(Re:中間コード… (スコア:2, 興味深い)
LLVMはcompiler infrastructureであり、最適化やセマンティクスの拡張などコンパイラの実装に必要な情報を可能な限り保持し抽象化したものです。
だから伝統的な内部表現とは違い型情報がついている。
コンパイラ実装者以外には、基本的には無用の長物。
> 各CPUの機械語に落とし込みやすいLLVM IRを定めるための、現存CPUの差異を捨象した仕様こそがLLVMですよ。
これはまあ、結果的にはそうなってはいるんだけども。