gpt4 book ai didi

haskell - 是否可以像NPM(NodeJS)一样设计Stack(Haskell)?

转载 作者:行者123 更新时间:2023-12-02 14:21:36 24 4
gpt4 key购买 nike

Haskell Tool Stack是目前最流行的 Haskell 包管理器,它的主要目标是使构建 haskell 包具有可重复性。

但是堆栈实现其目标的方式是找到一个巨大的无冲突包修订集,并将其称为快照。这样,包维护者就会被推送更新其包的依赖项,这样就不会与最近的快照发生冲突。

我不得不说,这个设计太理想化了,无法在现实世界中使用。

相比之下,NPM(NodeJS 的包管理器)通过一种更实用的方式来实现这一目标:它允许冗余。在依赖钻石的情况下,例如 a -> b, c; b -> d(v1); c -> d(v2),NPM 只需为 bc 分别安装两个不同版本的 d 即可。这样,使用包的用户就可以像黑盒一样依赖一个包,无需考虑其依赖之间是否存在深度依赖冲突。

我想知道 Stack 的设计不允许对包进行冗余修订,是否有一些实际原因。 Haskell 是否可以实现这样的包管理器?实现过程中最困难的部分是什么?

最佳答案

是的,这是可能的。事实上,cabal过去默认就是这样工作的。它在转向 nix 风格构建的过程中被放弃,但据我所知,没有技术问题阻碍再次这样做。

也就是说,我对 nix 风格构建的经验是,很少发现将依赖关系树中的每个包强制为特定版本会阻止您构建构建计划。我不确定 stack 是否也是如此 - 我对此没有太多经验 - 但至少对于 cabal 目前看来这样做没有什么好处,因此具有更简单故障模式的简单设计似乎更可取。

关于haskell - 是否可以像NPM(NodeJS)一样设计Stack(Haskell)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56595516/

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