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

时间:2018-02-12 21:49:56

标签: haskell ghc haskell-stack

通过here的安装脚本完成Haskell Stack的全新安装时:

wget -qO- https://get.haskellstack.org/ | sh

其次是:

stack setup

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

stack update

大小增加到2.5 GB。

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

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

  1. 为什么这么大(与question有关系?)?
  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 或在线获取所需的黑客信息)?

1 个答案:

答案 0 :(得分:9)

正如你可以通过检查看到的那样,它是:

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

运行stack setup时会安装第一个;第二次运行stack update

回答你的问题:

  1. 这是如此之大,因为显然没有人做出任何努力使其变小,正如整个00-index.tar00-index.tar.gz01-index.tar情况所证明的那样。
  2. 这是最小安装的正常尺寸。
  3. 如果您不想编译带有性能分析的程序,则可以删除配置文件版本(*_p.a文件)。我没有对此进行过广泛的测试,但似乎有效。我想这将为你节省大约800兆。如果想要动态链接程序(例如,使用*.a),您还可以删除静态版本(所有ghc -dynamic文件)。我再次没有对此进行过广泛的测试,但似乎有效。删除动态版本将非常困难 - 您必须找到一种方法只删除那些GHC本身不需要的*.so文件,并且您删除的任何内容都不再可以在解释器中加载。
  4. 缓存了一些内容,您可以删除它们。例如,您可以删除00-index.tar00-index.tar.gz(节省大约半千兆字节),而堆栈似乎运行正常。但是,下次运行stack update时,它会重新创建它们。我不认为这是在任何地方记录的,因此确定可以安全删除的内容将是大量的试验和错误。
  5. 我认为上面已经讨论了这个问题。
  6. 没有任何提议,前几天,我在一些3TB的驱动器上看到了很多优惠,我兴奋地命令两个,然后才意识到我没有任何东西可以穿上他们。它有点几个千兆字节,不是吗?

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