9

Cでは、コードを「ヘッダーファイル」と実装に分割し、実装をコンパイルしてから、コンパイルされたバージョンとヘッダーのみ(完全なソースではない)を配布できます。

これはHaskellで可能ですか?

4

2 に答える 2

8

GHC ではそれが可能ですが、もちろんコードは特定のバイナリ プラットフォームに結び付けられます。

ここをチェックしてください:

http://www.haskell.org/ghc/docs/2.10/users_guide/user_174.html

またはより更新された説明については:

http://www.haskell.org/ghc/docs/7.0.3/html/users_guide/separate-compilation.html

特に、.hi ファイルを探します。

于 2012-11-12T07:41:43.213 に答える
1

これを行うことは十分に可能です。GHC が Haskell モジュール (つまり、ファイル) をコンパイルすると、オブジェクト ファイルと「インターフェース ファイル」*.hsに実行可能コードが生成されます。コンパイルされたコードを使用するには、オブジェクト ファイルとインターフェイス ファイルのみが必要です。*.o*.hi

ただし、C とは異なり、Haskell の実行時の詳細は公式には標準化されていません。したがって、異なる Haskell コンパイラでコンパイルされたコードを一緒にリンクすることはできません。結果はうまくいきません。実際、異なるバージョンの GHC でコンパイルされたコードをリンクすることさえできないことがよくあります。これを行うことが「不可能」であるというわけではありません。これは、誰もまだ標準化していないため、現在は機能していません。

最近では、Haskell コードを「動的ライブラリ」(Windows では DLL、*.soUnix ではファイル) にコンパイルすることも可能になりました。繰り返しますが、*.hiこれらに対してコンパイルするためのファイルが必要ですが、実行時に必要なのはライブラリ ファイル自体だけです。

GHC は多くのクロスモジュール最適化を行う傾向があることに注意してください。これにより、動的リンクの有用性がいくらか低下します。(C++ テンプレート ライブラリを「コンパイル」しようとするのと少し似ています...)

もちろん、あなたのソースコードを見られない人や、エンドユーザーに Haskell コンパイラを提供する必要がないことに関心があるだけなら、これは問題ではありません。

于 2012-11-13T21:42:19.717 に答える