gpt4 book ai didi

haskell - cabal 为什么要从源代码下载并编译?

转载 作者:行者123 更新时间:2023-12-02 10:55:34 24 4
gpt4 key购买 nike

当我做一个新项目时。比如说,一个使用 Snap 的网络应用程序。我使用 snap init barebones 生成骨架,创建一个新的沙箱,然后安装依赖项。

这需要永远。严重地。如果您曾经使用过几乎任何其他 Web 框架(例如,带有express的node.js),那么该过程几乎相同,但只花费一小部分时间。我知道大多数节点依赖项不需要任何编译,但我发现这并不被认为是一个更大的问题,这真的很奇怪。例如,我永远无法在廉价的 VPS 上运行 Yesod 应用程序,因为 VPS 的功能不足以编译它,而且我无法真正上传 500mb 的预编译库。

问题是,为什么存储库不托管二进制文件而只托管代码?.NET 也被编译(字节码),但我可以使用它的 DLL,无需重新编译。

托管二进制文件当然有缺点,例如需要更多存储空间,每个库有多个二进制文件用于多个操作系统......但所有问题对于您获得的巨大好处来说似乎微不足道,例如

  • 不再出现编译错误
  • 新项目的设置速度更快
  • 所需内存显着减少
  • 在亲自了解之前就知道某个库不支持您的操作系统

我一开始就很难理解为什么 cabal hell 会存在。如果所有库都可用于动态链接,那么是否根本不需要重新编译?

目前,在这些方面,人们必须非常努力地坚持使用 Haskell。似乎系统因为我尝试新事物而惩罚我。如果我想向我的项目添加一个新库,我必须确保我愿意等待 15-45(!!!) 分钟来编译它。更不用说库无法编译的次数超出了我的承受范围。在经历了这个过程之后,只有这样我才能真正弄清楚该库是否是我想要使用的,或者它是否与我项目的其余部分兼容。

最佳答案

简而言之:因为 native 代码很难。

如果您想为任意系统托管二进制文件,则必须将二进制文件与您要运行的每个系统相匹配。这可能意味着编译数十组二进制文件来支持代码将在其上编译的所有系统。

另一方面,您可能会发现有人已经编译了您需要的代码:您的发行版提供商可能会为您需要的 Haskell 库提供软件包。

关于haskell - cabal 为什么要从源代码下载并编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27173910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com