あどけない話

Internet technologies

GHC と gold

GHCコンパイル速度は、お世辞にも速いとは言えないのだが、一番イライラするのはリンクが遅いこと。これは GNU ld が遅いからである。という訳で、速いと言われる gold を使うためのメモ。

GHC 7.6.3 までは gold が使えない。なぜなら、GNU ld 固有のオプションである --hash-size と --reduce-memory-overheads がハードコードされており、これらを gold がサポートしてないからだ。

GHC 7.8 以降からは、リンカーに応じてオプションを変えるようになる。僕は GHC head で試した。以下のいずれかをやると、gold が使える。

  • ld のシンボリックリンクを ld.gold に向ける (Linuxbinutils-gold をインストールするとこうなる。)
  • cabal に --with-ld=ld.gold を指定する
  • GHC に -pgml=ld.gold を指定してもできそうだが、今のところできない。報告したので、その内直るだろう。

GHC 7.6.3 で gold を使うには @notogawa さんが書いたgoldのラッパーを挟むといいだろう。

なお、gold は ELF にしか対応していないので、Mac では使えない。

いろいろ教えて頂いた @shelarcy さんに感謝。