gpt4 book ai didi

haskell - 为什么 "cabal build"与 "make"相比这么慢?

转载 作者:行者123 更新时间:2023-12-02 16:45:45 25 4
gpt4 key购买 nike

如果我有一个包含多个可执行文件的包,我最初使用 cabal build 构建该包。现在我更改一个仅影响一个可执行文件的文件,cabal 似乎需要大约一两秒的时间来检查每个可执行文件以查看它是否受到影响。另一方面,在给定相同数量的可执行文件和源文件的情况下,make 将在不到一秒的时间内确定需要重新编译的内容。为何差异如此巨大?有没有理由,cabal 不能只构建自己版本的 makefile 并从那里开始?

最佳答案

免责声明:我对 Haskell 或 make 内部结构不够熟悉,无法提供技术细节,但一些网络搜索确实提供了一些与我的建议相符的见解(试图通过提供引用)。另外,我假设您的 makefile 正在调用 ghc,正如 cabal 显然会调用的那样。

建议:我认为可能有几个关键原因,但最主要的原因是 make 是用 C 编写的,而 cabal 是用 Haskell 编写的。这将与 make 的高级依赖性检查相结合(尽管我不确定如何在不查看源代码的情况下证明这一点)。其他支持理由,可在网上找到:

  • cabal 尝试做的不仅仅是简单的编译,例如似乎在包装方面采取了措施 ( https://www.haskell.org/cabal/ )
  • cabal 是用 Haskell 编写的,尽管运行时是用 C 编写的 ( https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler )
  • 同样,由于不太熟悉 make 内部结构,make 可能只是拥有更快的依赖项检查机制,从而更好地跟踪这些更改。我指出这一点是因为从 OP 来看, cabal 可能对所有依赖项进行全面检查的地方似乎存在足够显着的差异。如果属实,我怀疑这将是速度差异的主要原因。

无论如何,这些都是开源的,可以从各自的网站(haskell.org/cabal/和 savannah.gnu.org/projects/make/)下载,允许任何人检查实现的细节。

根据传递给正在使用的编译器的开关,人们也可能会看到速度上的很大差异。

HTH 至少为您指明了正确的方向。

关于haskell - 为什么 "cabal build"与 "make"相比这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212980/

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