【发布时间】:2018-06-19 10:17:02
【问题描述】:
我在阅读《阴谋集团地狱》时有点困惑,因为这个词已经超载了。我猜最初 Cabal Hell 提到了菱形依赖问题,这是通过限制构建计划在每个构建计划中只有一个版本的任何包来解决的(一个包的两个不同版本不能存在于一个构建计划中)如answer 中所述。
但是,该术语也用于各种其他情况。例如破坏性的重新安装、不正确的包依赖边界(低/高版本边界)、不一致的环境……(或 Cabal 报告的任何其他错误)。
尤其是其中,我对 1) 破坏性的重新安装和 2) 不一致的环境感到困惑?它们是什么意思,cabal new-build 如何解决这些问题(它只是像cabal sandbox 这样的沙盒)? ghc-pkg 在这里扮演什么角色?
非常感谢任何可以重现这些问题的参考资料或简单示例。
关于“破坏性重新安装”:如果我没记错的话,GHC 有自己的包管理器 (ghc-pkg),并且这些包被安装为动态可链接库,即:base 依赖于ghc-prim,所以如果ghc-prim 被删除,它会破坏base,对吗?而且由于 GHC 只允许具有相同版本的包的一个实例,cabal install 可能会注册相同(package, version) 的更新版本,这样它就会破坏未注册包的依赖项。如果上述关于“破坏性重新安装”的理解是正确的; cabal new-build 对此有何帮助?
【问题讨论】: