あどけない話

インターネットに関する技術的な話など

[Haskell] GHC 7.8 と静的/動的ライブラリ

これまで Twitter でさんざん間違った情報を流してきましたので、反省して正しい情報を書いておきます。おそらく、これで間違いないです。

GHC 7.8 自体

  • GHC 7.8 自体は動的リンクされます
    • ちなみに、GHC 7.8 から、GHC 自体が -O2 でコンパイルされます。(これまでは -O。) このため、GHC 7.8 には最適化に起因したバグが潜んでいる可能性があります
  • GHC 7.8 は、以下のライブラリを提供します
    • 静的ライブラリ
    • 動的ライブラリ (GHCi 用)
    • プロファイル用の静的ライブラリ

GHCi

GHCi は、動的ライブラリを使います。

Cabal

cabal でビルドすると、以下のようになります。

  • プログラムは、静的リンクされます
  • ライブラリは、静的ライブラリと動的ライブラリの両方が作られます
    • 動的ライブラリは、GHCi 用です

という訳で、ビルドが2倍遅くなります。^^;

プロファイル

プロファイル用のプログラムを作成するには、以下のようにするといいでしょう。

% cabal install -p --enable-executable-profiling --ghc-options="-fprof-auto" -j3

あるいは

% cabal install -p --ghc-options="-fprof-auto" --only-dependencies -j3
% cabal configure --enable-executable-profiling
% cabal build

昔の cabal と違って、--ghc-options は依存ライブラリのビルドにも渡されます。

おまけ

cabal-install 1.18 を入れてない人は、今すぐインストールしましょう。次の Haskell Platform を待ってはいけません。