luo*_*990 5 haskell package-managers haskell-stack
该哈斯克尔工具集是目前最流行的Haskell包管理器,现在,它的主要目标是使大厦哈斯凯尔包重复性。
但是堆栈方法的目标是找到一个巨大的无冲突包修订集,并将其称为snapshot. 通过这种方式,包维护者被推送更新他的包的依赖项,这样它就不会与最近的snapshot.
我不得不说,这个设计太理想了,无法在现实世界中工作。
相比之下,NPM(NodeJS 的包管理器)通过一种更实用的方式来实现这个目标:它允许冗余。在钻石依赖的情况下,例如a -> b, c; b -> d(v1); c -> d(v2),NPM 只需d为b和分别安装两个不同的版本c。这样,使用包的用户就可以像黑盒一样依赖包,无需考虑依赖之间是否存在冲突的深度依赖。
我想知道为什么 Stack 的设计不允许对包进行冗余修订是否有一些实际的原因。是否可以为 Haskell 实现这样的包管理器?它的实施中最困难的部分是什么?
对的,这是可能的。事实上,cabal默认情况下过去是这样工作的。它在转向 nix 风格的构建时被放弃了,但据我所知,没有技术问题阻碍再次进行。
也就是说,我对 nix 样式构建的经验是,很少会发现将依赖关系树中的每个包强制为特定版本会阻止您构建构建计划。我不确定这是否也是如此stack——我没有太多的经验——但至少cabal目前这样做似乎没什么好处,所以简单的设计和更简单的故障模式似乎更可取。
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |