为什么Cabal没有成为一名完整的包裹经理?

Dav*_*vid 13 haskell cabal cabal-install

(在我开始之前:我将使用Cabal for Everything,其名称中包含Cabal并与Haskell有关.)

有了通常的"你需要更新X来安装Y,但这会打破依赖性Z"问题,前几天,我想我只是问:为什么Cabal不是设计成一个完整的包管理器,特别是以下功能:

  • 版本控制:将软件包的多个版本并排安装,让软件包选择所需的依赖项.如果未指定包版本,请使用最新版本.
  • 更新软件包 - 或更好,安装最新版本.
  • 删除
  • 检查包装完整性

你会看到这个列表的去向.现在,对我来说,Cabal感觉就像一个有点复杂的构建系统(当你想第一次开始使用它时,试着找出你的软件包所需的Base版本),这是一个半生不熟的软件包安装程序.

所以问题再次出现:为什么Cabal没有制作全功能的构建/包装系统?我确信有一些设计决定导致当前状态.

(这个问题在某种程度上受到了对Reddit的咆哮的启发,但与那个人相反并不意味着冒犯任何人.):-)

Mik*_*kov 10

安装相同软件包的多个版本现在可以很好地工作(尝试cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5),但是安装同一软件包版本的多个实例却没有.这是我们非常希望支持的,因为这将允许我们实现密封构建并解决"依赖地狱"问题,但这并非完全无足轻重.今年有一个GSoC项目为ghc-pkg和Cabal增加了对多个实例的支持,但补丁还没有在主线上.这是HIW 2012关于项目结果的讨论视频,这里是内部设计的描述.

至于你的其他问题,实际上曾经有一个cabal upgrade命令用于安装所有当前安装的软件包的最新版本,但它已被删除,因为它可能会破坏您的安装(同样,支持相同软件包版本的多个实例将修复此问题) ).卸载支持已经在愿望清单上暂时搁置了一段时间,只是没有人有时间实现它.我想数字签名包和HTTPS也是如此.

此外,如果您有兴趣看到实现这些功能的一部分,那么Cabal的补丁总是受欢迎的,随着转移到GitHub,您可以比以往更轻松地贡献代码(如果您负担得起,贡献现金也很好 - 我认为Well-Typed很乐意和你谈谈这件事.

更新(2016年9月):有关当前事态的更新,请参阅Edward Z. Yang的这篇文章:cabal new-build是一名包管理员.