Hello world in Haskell is 1.3 mb



我很失望地发现我的Hello World在Haskell中的可执行文件为1.3 MB。这对我来说真的是不可接受的。难道我做错了什么?有什么借口让Hello World可以执行这么大?有没有合理的方法来削减它?C中的同一件事是8 kb。

main = print "Hello, worlds"

您不说哪个平台或哪个版本的GHC,所以我在这里进行一些猜测。

  1. 默认情况下,GHC不会剥离调试符号。在Linux上,您可以运行strip实用程序以删除这些实用程序。在任何平台上,您都可以使用-optl-s编译以在链接过程中自动剥离调试符号。

  2. 确切取决于您使用的是哪个平台以及您拥有的GHC版本,GHC默认为 stat上链接您所调用的所有Haskell库以及Haskell Runtime System本身(即。,垃圾收集器,线程调度程序,事务管理器,I/O Manager ...)如果为您的平台提供了支持,则打开 dynamic 链接可能会导致可执行文件大小显着降低。

另请参见

  • 与GHC编译成巨大二进制的小型Haskell计划
  • 制作小haskell可执行文件?

每个Haskell二进制船只都有运行时系统的副本(https://ghc.haskell.org/trac/ghc/ghc/wiki/commentary/rts)。无论如何,您可以通过 strip ping恢复一些空间。

如果需要小二进制文件,请不要在库中静态链接到二进制文件中:

% cat x.c
#include <stdio.h>
int main()
{
    printf("Hello worldn");
}
% gcc x.c && du -h a.out
 12K    a.out
% cat x.hs
main :: IO ()
main = putStrLn "Hello world"
% ghc -dynamic x.hs && du -h x
[1 of 1] Compiling Main             ( x.hs, x.o ) [flags changed]
Linking x ...
 16K    x

最新更新