为什么 Haskell-Stack 和 GHC 的全新安装如此 large/big?
Why is a fresh install of Haskell-Stack and GHC so large/big?
在全新安装 Haskell 时通过 here 中的安装脚本堆栈:
wget -qO- https://get.haskellstack.org/ | sh
其次是:
stack setup
您最终会得到一个 $HOME/.stack/
大小为 1.5 GB 的目录(来自 120+ MB 的下载)。此外,如果您 运行:
stack update
大小增加到 2.5 GB。
我习惯了 Java,它通常被认为是 large/big(涵盖了几乎所有内容,并且为了向后兼容而弃用了替代方案),但作为比较:IDE 包括JDK,一个独立的 JDK,JDK 源文件的大小可能约为 1.5 GB。
另一方面,Haskell 是一种 "small beautiful" 语言(据我所知,这可能主要指的是语法和语义,但仍然如此)是large/big,我觉得很奇怪。
- 为什么这么大(跟这个question有关吗?)
- 这个尺寸是正常的还是我安装了额外的东西?
- 如果每样东西都有好几种(4 种?、5 种?)口味,那么我可以去掉除一种以外的所有口味吗?
- 是否有一些数据cache/temporary可以删除?
- 最大的目录是:
.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 信息)?
正如您可能通过检查看到的那样,它是以下各项的组合:
- GHC 的三种风格(静态、动态和分析)运行time(总共约 400 兆)和核心 GHC 库(总共 700 兆)加上 100 兆接口文件和另外 200 megs 的文档和 120 megs 的压缩源(总共 1.5 gig,都在
programs/x86_64-linux/ghc-8.2.2*
或类似的范围内)
- 未压缩的 Hackage 索引
00-index.tar
和 01-index.tar
的两个相同副本,每个副本包含 .cabal
文件,用于 Hackage 数据库中曾经发布的每个包的每个版本,每个大约 457 megs,再加上一些其他文件,使总数达到 1.0 gigs
当您 运行 stack setup
时安装第一个;第二个当你 运行 stack update
.
回答您的问题:
- 它之所以如此之大,是因为显然没有人做出任何努力使其变小,整个
00-index.tar
、00-index.tar.gz
和 01-index.tar
情况都证明了这一点。
- 这是最小安装的正常大小。
- 如果您不想使用分析来编译程序,您可以删除分析版本(
*_p.a
文件)。我没有对此进行过广泛的测试,但它似乎有效。我想这将为您节省大约 800 兆。如果您 仅 想要动态 link 程序(即使用 ghc -dynamic
),您也可以删除静态版本(所有 *.a
文件)。同样,我还没有对此进行广泛的测试,但它似乎有效。删除动态版本将非常困难——您必须找到一种方法来仅删除 GHC 本身不需要的那些 *.so
文件,并且您删除的任何内容都将无法再在解释器中加载。
- 有几项已缓存,您可以将其删除。例如,您可以删除
00-index.tar
和 00-index.tar.gz
(节省大约 0.5 GB),Stack 似乎 运行 没问题。不过,它会在您下次 运行 stack update
时重新创建它们。我认为这在任何地方都没有记录,所以要确定可以安全删除的内容需要大量的试验和错误。
- 我想这个问题上面已经讲过了。
一个没什么的建议,前几天,我看到一些 3 TB 的驱动器很划算,我兴奋地订购了两个,然后才意识到我真的没有有什么可以穿的。它有点像几千兆字节,不是吗?
我想我不会花费很多精力尝试 trim 进入您的 .stack
目录,至少在功能强大的台式机上是这样。如果您使用的笔记本电脑的 SSD 相对较小,请考虑将 .stack
目录放在支持透明压缩的文件系统(例如 Btrfs)上,如果您认为它可能会失控的话。
在全新安装 Haskell 时通过 here 中的安装脚本堆栈:
wget -qO- https://get.haskellstack.org/ | sh
其次是:
stack setup
您最终会得到一个 $HOME/.stack/
大小为 1.5 GB 的目录(来自 120+ MB 的下载)。此外,如果您 运行:
stack update
大小增加到 2.5 GB。
我习惯了 Java,它通常被认为是 large/big(涵盖了几乎所有内容,并且为了向后兼容而弃用了替代方案),但作为比较:IDE 包括JDK,一个独立的 JDK,JDK 源文件的大小可能约为 1.5 GB。
另一方面,Haskell 是一种 "small beautiful" 语言(据我所知,这可能主要指的是语法和语义,但仍然如此)是large/big,我觉得很奇怪。
- 为什么这么大(跟这个question有关吗?)
- 这个尺寸是正常的还是我安装了额外的东西?
- 如果每样东西都有好几种(4 种?、5 种?)口味,那么我可以去掉除一种以外的所有口味吗?
- 是否有一些数据cache/temporary可以删除?
- 最大的目录是:
.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 信息)?
正如您可能通过检查看到的那样,它是以下各项的组合:
- GHC 的三种风格(静态、动态和分析)运行time(总共约 400 兆)和核心 GHC 库(总共 700 兆)加上 100 兆接口文件和另外 200 megs 的文档和 120 megs 的压缩源(总共 1.5 gig,都在
programs/x86_64-linux/ghc-8.2.2*
或类似的范围内) - 未压缩的 Hackage 索引
00-index.tar
和01-index.tar
的两个相同副本,每个副本包含.cabal
文件,用于 Hackage 数据库中曾经发布的每个包的每个版本,每个大约 457 megs,再加上一些其他文件,使总数达到 1.0 gigs
当您 运行 stack setup
时安装第一个;第二个当你 运行 stack update
.
回答您的问题:
- 它之所以如此之大,是因为显然没有人做出任何努力使其变小,整个
00-index.tar
、00-index.tar.gz
和01-index.tar
情况都证明了这一点。 - 这是最小安装的正常大小。
- 如果您不想使用分析来编译程序,您可以删除分析版本(
*_p.a
文件)。我没有对此进行过广泛的测试,但它似乎有效。我想这将为您节省大约 800 兆。如果您 仅 想要动态 link 程序(即使用ghc -dynamic
),您也可以删除静态版本(所有*.a
文件)。同样,我还没有对此进行广泛的测试,但它似乎有效。删除动态版本将非常困难——您必须找到一种方法来仅删除 GHC 本身不需要的那些*.so
文件,并且您删除的任何内容都将无法再在解释器中加载。 - 有几项已缓存,您可以将其删除。例如,您可以删除
00-index.tar
和00-index.tar.gz
(节省大约 0.5 GB),Stack 似乎 运行 没问题。不过,它会在您下次 运行stack update
时重新创建它们。我认为这在任何地方都没有记录,所以要确定可以安全删除的内容需要大量的试验和错误。 - 我想这个问题上面已经讲过了。
一个没什么的建议,前几天,我看到一些 3 TB 的驱动器很划算,我兴奋地订购了两个,然后才意识到我真的没有有什么可以穿的。它有点像几千兆字节,不是吗?
我想我不会花费很多精力尝试 trim 进入您的 .stack
目录,至少在功能强大的台式机上是这样。如果您使用的笔记本电脑的 SSD 相对较小,请考虑将 .stack
目录放在支持透明压缩的文件系统(例如 Btrfs)上,如果您认为它可能会失控的话。