gpt4 book ai didi

haskell - 为什么 Cabal 没有成为一个完整的包管理器?

转载 作者:行者123 更新时间:2023-12-03 23:51:07 26 4
gpt4 key购买 nike

关闭。这个问题是off-topic .它目前不接受答案。












想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。


9年前关闭。







Improve this question




(在我开始之前:我将把 Cabal 用于名称中包含 Cabal 并且与 Haskell 相关的所有内容。)

前几天又遇到了通常的“你需要更新 X 来安装 Y,但这会破坏依赖 Z”的问题,我想我只想问:为什么 Cabal 不是设计成一个完整的包管理器,尤其是以下特点:

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

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

    那么问题又来了: 为什么 Cabal 没有制作一个功能齐全的构建/打包系统? 我确信有一些设计决定导致了当前状态。

    (这个问题有点受到 a rant on Reddit 的启发,但与那个人相反,并不是要冒犯任何人。):-)

    最佳答案

    安装同一个包的多个版本现在效果很好(试试 cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5 ),但是安装同一个包版本的多个实例却不行。这是我们非常愿意支持的东西,因为这将使我们能够实现 hermetic builds并解决“依赖 hell ”问题,但这并非微不足道。今年有一个 GSoC 项目为 ghc-pkg 和 Cabal 添加对多个实例的支持,但这些补丁还没有进入主线。 Here's a video of the HIW 2012 talk about the project's results , 和 here's the description of the internal design .

    至于你的其他问题,实际上曾经有一个 cabal upgrade用于安装所有当前安装的软件包的最新版本的命令,但它已被删除,因为它可能会破坏您的安装(同样,支持同一软件包版本的多个实例可以解决此问题)。卸载支持已经在愿望 list 上一段时间了,it's just that no-one had time to implement it yet .我猜数字签名包和 HTTPS 也是如此。

    此外,如果您有兴趣看到其中一些功能的实现,Cabal 的补丁总是受欢迎的,并且随着移动到 GitHub贡献代码变得比以往任何时候都容易(如果你负担得起,贡献现金也可以 - 我认为 Well-Typed 将非常乐意与您讨论这个问题)。

    更新(2016 年 9 月):有关当前事态的更新,请参阅 Edward Z. Yang 的这篇文章: cabal new-build is a package manager .

    关于haskell - 为什么 Cabal 没有成为一个完整的包管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130178/

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