2012-02-08 7 views
16

は、GHC(栄光グラスゴーHaskellのコンパイラは)に「コア」はHaskellをコンパイルし、そのコアのマシンにコードをコンパイルします。あたかもバイトコードであるかのように、HaskellプログラムをGHCコアとして配布することは実用的であろうか?そのような流通に利益があるだろうか?なぜ、なぜそうではないのですか?"バイトコード"としてのGHCコア?私はそれを理解したよう

答えて

20

これは実用的ではありません。 GHCコアは移植性がありません。たとえば、32ビットマシンでは、64ビット算術はコアの外部関数呼び出しにコンパイルされますが、64ビットマシンではネイティブの機械語算術が使用されます。さらに重要なこと

は、GHCは実際にコアを読み取ることができません。それはいくつかの形式でそれをプリントアウトすることができますが、中にこれらの形式のいずれかをリードバックする実際のコードはありません。私はそうすることへの大きな障害が存在することになるかどうかわからないんだけど、それは長年にわたって文書化の状況をされています私はすぐにサポートが出るとは思っていません。

コアは、一般的にはHaskellのにかなり近いです。あなたはその形式でコードを配布することから何を購入するのかは明らかではありません。それはコアにHaskellのを回すのにかかる時間は、通常、それがリンク最終的なプログラムのようなものを行うために要する時間未満であることを行っているので、通常はすべてのコンパイル時間に多くを保存しないでしょう。

また、Haskellのソースコードよりもチェックが少なくなっています(私は-dcore-lintがこれを軽減するとは思いますが)、それを効果的にサンドボックス化するのは難しいでしょう(Safe HaskellはありますがSafe Coreはありません)。もちろん、これらの欠点は、バイトコードのソースが信頼できる場合には当てはまりません。

基本的に、GHCコアは、PythonのバイトコードとJVMのような目的のために設計された移植可能なバイトコード形式とは対照的に、コンパイラの中間言語です。

GHCiで使用されているように、GHC にバイトコードインタープリタを持っています。そこで使われているバイトコードも移植性がないので、通常の操作でGHCが生成するマシンコードと比較して、私が考えることができる利点はありません。

関連する問題