gpt4 book ai didi

haskell - Cabal 和 Stack 有什么区别?

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

昨天我了解了一个新的 Haskell 工具,名为 Stack 。乍一看,它的作用与 Cabal 非常相似。那么,它们之间有什么区别呢? stack 可以替代 Cabal 吗?在什么情况下我应该使用 Stack 而不是 Cabal? Stack 可以做哪些 Cabal 做不到的事情?

最佳答案

Is stack a replacement for Cabal?

是和否。

In which cases should I use Stack instead of Cabal? What can Stack do that Cabal can't?

Stack 默认使用精选的堆栈包。因此,任何依赖项都可以一起构建,从而避免版本冲突问题(当它们在 Haskell 体验中很常见时,通常被称为“阴谋 hell ”)。 Cabal 的最新版本还采取了防止冲突的措施。尽管如此,使用 Stack 设置可重复的构建配置(让您确切知道将从存储库中提取什么内容)会更加简单。请注意,还提供了使用非堆栈包的规定,因此即使堆栈快照中不存在包,您也可以继续使用。

就我个人而言,我喜欢 Stack,并推荐每个 Haskell 开发人员使用它。他们的发展很快。而且它具有更好更好的用户体验。有些事情 Stack 可以做,而 Cabal 却没有提供:

  • Stack 甚至会为您下载 GHC 并将其保存在一个独立的位置。
  • Docker 支持(这对于部署 Haskell 应用程序非常方便)
  • Reproducible Haskell script :您可以查明软件包的版本,并保证它始终执行而不会出现任何问题。 ( Cabal also has a script feature ,但完全确保其可重复性并不那么简单。)
  • 能够执行stack build --fast --file-watch。如果您更改现有的本地文件,这将自动重建。将它与 --pedantic 选项一起使用对我来说是一个破坏性的事情。
  • Stack 支持使用 templates 创建项目。它还支持您自己的自定义模板。
  • 堆栈内置 hpack支持其中。它提供了一种使用 yaml 文件编写 cabal 文件的替代方法(在我看来,是一种更好的方法),这种方法在业界得到了更广泛的应用。
  • Intero 体验流畅 when working with Stack .

有一篇很好的博客文章解释了差异:Why is Stack not Cabal?虽然 Cabal 在该职位发表后的几年里不断发展,以克服其中讨论的一些问题,但对 Stack 背后的设计目标和理念的讨论仍然具有相关性。

关于haskell - Cabal 和 Stack 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913145/

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