2012-04-22 8 views
3

JVMベースのプログラムでは、ファイルを.classファイルにコンパイルし、必ずすべてのファイルをコンパイルせずにバイナリを再実行することができます。カバールプロジェクトで「ファイルのみ」をコンパイルすることはできますか?

haskellで行うことはできますか?プロジェクト内のすべてのファイルをコンパイルしてリンクすることは不可欠ですか?はいの場合、なぜですか?

バイナリがない場合は、ライブラリのみをインストールしていますか?

答えて

4

GHCの場合、公開されたインターフェイスが変更されない場合、モジュールを再コンパイルせずに1つのモジュールを変更して再コンパイルすることができます。 GHCの--makeモード(デフォルトはghc-7。*)は、再コンパイルが必要かどうかをチェックし、必要でないと判断できないモジュールだけを再コンパイルします。

1つのモジュールを変更した後にcabal buildのコンパイル済みのパッケージがある場合は、パッケージ内のすべてのモジュールを一般的に再コンパイルせず、変更されたモジュールのみを再コンパイルしますその上に。

実行ファイルをビルドする場合は、もちろん再リンクする必要がありますが、古いオブジェクトファイルの多くは再利用できます。

ライブラリをビルドする場合は、もちろんライブラリアーカイブを再構築する必要がありますが、古いオブジェクトファイルの多くは再利用できます。

+4

興味深いことに、[GHC解説は、これがどのように詳細に機能するかを説明しています。](http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/RecompilationAvoidance) – hammar

関連する問題