为什么全新安装的Haskell-Stack和GHC如此大/大?

Klo*_*rax 13 haskell ghc haskell-stack

这里通过安装脚本重新安装Haskell Stack时:

wget -qO- https://get.haskellstack.org/ | sh
Run Code Online (Sandbox Code Playgroud)

其次是:

stack setup
Run Code Online (Sandbox Code Playgroud)

你将得到一个$HOME/.stack/1.5 GB大小的目录(从120多MB下载).如果你运行:

stack update
Run Code Online (Sandbox Code Playgroud)

大小增加到2.5 GB.

我习惯于Java,它通常被认为是大/大(几乎涵盖所有内容并且已经弃用了后向兼容性的替代方案),但作为比较:包括JDK,独立JDK和JDK源的IDE可能大约为1.5 GB的大小.

另一方面,Haskell是一种"小美"语言(从我所听到和读过的,这可能主要是指语法和语义,但仍然),是大/大,对我来说似乎很奇怪.

  1. 它为什么这么大(它与这个问题有关吗?)?
  2. 这个尺码是正常还是我安装了额外的东西?
  3. 如果有几种(4?,5?)口味的东西,那么除了一个之外我可以删除吗?
  4. 是否有一些数据缓存/临时可以删除?
  5. 最大的目录是:.stack/programs/x86_64-linux/ghc-tinfo6-nopie-8.2.2/lib/ghc-8.2.2(1.3 GB)和.stack/indices/Hackage(980 MB).我假设第一个是安装包(和相关的stack setup),后者是Hackage包存档(和相关stack update)的一些索引?这些可以减少(如上所述3或在线获取所需的Hackage信息)?

K. *_*uhr 12

您可以通过检查看到,它是以下组合:

  • GHC运行时的三种风格(静态,动态和分析)(总共大约400兆)和核心GHC库(总共700兆)加上100兆的接口文件和另外200兆的文档和120兆的压缩源(总共1.5演出,全部在programs/x86_64-linux/ghc-8.2.2*或类似)
  • 未压缩Hackage指数的两个相同的副本00-index.tar01-index.tar,每个包含.cabal每一个曾经发表在Hackage数据库包的每一个版本的文件,每次约457兆,加上其他一些文件,使总量达到1.0演出

第一个是在你跑步时安装的stack setup; 你跑的第二个stack update.

回答你的问题:

  1. 它是如此之大,因为显然没有人作出任何努力来使其变小,通过全所证明00-index.tar,00-index.tar.gz01-index.tar情况.
  2. 这是最小安装的正常大小.
  3. *_p.a如果您不想编译带有性能分析的程序,则可以删除配置文件版本(文件).我没有对此进行过广泛的测试,但似乎有效.我想这将为你节省大约800兆.您还可以删除静态版本(所有*.a文件),如果你只是想动态链接程序(即使用ghc -dynamic).我再次没有对此进行过广泛的测试,但似乎有效.删除动态版本将非常困难 - 您必须找到一种方法来仅删除那些*.soGHC本身不需要的文件,并且您删除的任何内容都不再可以在解释器中加载.
  4. 缓存了几个东西,你可以删除它们.例如,你可以删除00-index.tar00-index.tar.gz(节省大约半千兆字节),Stack似乎运行正常.不过,它会在你下次跑的时候重新创建它们stack update.我不认为这在任何地方都有记录,因此确定可以安全删除的内容将是大量的试验和错误.
  5. 我认为上面已经讨论过这个问题了.

一propos的什么都没有,有一天,我看到了一些3 TB的硬盘一个很好的协议,并在我的兴奋我意识到我真的没有什么可以把他们之前订购了两架.它有点几个千兆字节,不是吗?

我想我不会花费很多精力来减少你的.stack目录,至少在一台强大的台式机上.如果您正在使用具有相对较小SSD的笔记本电脑,请考虑将您的.stack目录放在支持透明压缩的文件系统上(例如,Btrfs),如果您认为它可能会失控.