質問編集履歴
1
type の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
現在、Linux上 で haskell の学習を始めたところです。普段常用している自作の shell や python のスクリプトを haskell で再実装をしているのですが、ghc でコンパイルされる実行ファイルが、他言語で生成される実行ファイルに比べ、かなり巨大と感じました。(今回の議論の例として、haskell-language-server のバイナリでは136Mバイト)
|
4
4
|
|
5
|
-
巨大となる理由は、様々
|
5
|
+
巨大となる理由は、様々な実行環境での安定稼働を目的として、当該 haskell プログラムが依存するモジュールを、全てスタティックリンクするためであると理解しております。
|
6
6
|
|
7
7
|
しかしながら、趣味の自作環境では些かオーバースペックであると思われるため、ビルド環境に依存する形でも構わないため、実行バイナリをコンパクトにする手法を確認したいと考えております。
|
8
8
|
|
@@ -16,13 +16,13 @@
|
|
16
16
|
### 試したこと
|
17
17
|
|
18
18
|
- 配布バイナリをストリップすることで、約2割サイズが縮減されました。
|
19
|
-
- さらに、upx で圧縮することで、約8割のサイズになりました。
|
19
|
+
- さらに、upx で圧縮することで、約8割のサイズの削減になりました。
|
20
20
|
- スタティックリンクベースでは、ここまでが限界と考え、依存モジュールを全てダイナミックリンクにすることで、約200Kバイトまで圧縮されました。ただし、約200個の依存モジュールは実行時にメモリ上に展開されることになるため、ディスク容量の削減に留まっています。
|
21
21
|
- 理想としては、jhc コンパイラのような、全ての要素を C言語に変換した上で最適化をかけることで、実行バイナリから不要な要素を削除される形が望ましいところです。[jhcのコンパイルパイプライン](http://repetae.net/computer/jhc/big-picture.pdf)
|
22
22
|
|
23
23
|
- ghc の言語拡張にかなり依存したコーディングとなっているため、ghc のコンパイルオプション等で同種の対応ができる等、ご助言をいただければ幸いです。
|
24
24
|
|
25
|
-
### strip &
|
25
|
+
### strip & upx & dynamic link
|
26
26
|
|
27
27
|
```zsh
|
28
28
|
|