1. ホーム
  2. haskell

[解決済み] GHCはなぜこんなに大きいのか/大きいのか?

2022-05-02 13:06:25

質問

簡単な答えはありますか?GHCはなぜそんなに大きいのですか?

  • OCaml 2MB
  • Python 15MB
  • SBCL: 9MB
  • OpenJRE - 26MB
  • GHC:113MB

Haskellが正しいツールであるならば、なぜサイズを気にする必要がないのか」というエバンジェリズムには興味がありません。

どのように解決するのですか?

実にくだらない話です。 GHCに付属するすべてのライブラリは、少なくとも以下のような形で提供されています。 4つのフレーバー :

  • スタティック
  • ダイナミック
  • プロファイド
  • GHCi

GHCi版は、静的版を1つにまとめたものです。 .o ファイルを作成します。 他の3つのバージョンは、すべて独自のインターフェイスファイルのセット( .hi ファイル)もあります。 プロファイルされたバージョンは、プロファイルされていないバージョンの約2倍のサイズになるようです(これは少し疑わしいので、なぜそうなるのか調べてみる必要があります)。

次のことを忘れないでください。 GHCそのものはライブラリです。 ということは、4つのGHCのコピーを手に入れることになります。 それだけでなく、GHCのバイナリ自体も静的にリンクされているので、GHCのコピーが5個になります。

私たちは最近、GHCi が静的な .a ファイルです。 これによって、これらのフレーバーを一つ取り除くことができます。 長期的には、GHC を動的にリンクすべきですが、それはより大きな変更で、動的リンクをデフォルトにする必要があるからです - C と違って、GHC では動的にリンクするかどうかを前もって決める必要があります。 そして、これが本当に実用的になるまでには、もっと多くの変更(たとえば、Cabalやパッケージシステムなど)が必要です。