2012-10-29 63 views
13

(我開始之前:我將使用驚天動地對於具有驚天動地的名稱中,有事情做哈斯克爾一切。)爲什麼Cabal沒有做出完整的包管理器?

有過慣用的「您需要更新X到安裝Y,但是這一次有一天會打破依賴Z」的問題,我想我只是問:爲什麼沒有驚天動地的設計是一個完整的包管理器,尤其是具有以下特點:

  • 版本:將一個包的多個版本並排安裝,讓包選擇這個願望編輯依賴關係。如果沒有指定軟件包版本,請使用最新版本。
  • 更新包 - 或更好,安裝最新版本。
  • 刪除
  • 檢查包裝的完整性

您看到這個名單是怎麼回事。現在,對我來說,Cabal感覺就像是一個有點複雜的構建系統(嘗試找出當你第一次開始使用它時你的軟件包需要哪個版本),這是一個半軟件包安裝程序。

所以再次提出的問題:爲什麼不是Cabal製造的全功能構建/包系統?我確定有一些設計決定導致了當前狀態。

(這個問題是有點a rant on Reddit啓發,但違背了那傢伙並不意味着通過以上。冒犯任何人):-)

+3

這個問題應該也可以在reddit上進行 - 與屬於SO的編程問題相比,這個問題太遠了。 –

+4

從這裏提問的常見問題*:「程序員常用的軟件工具」?檢查。 「編程專業特有的實用,可回答的問題」?檢查。 – David

+0

您是否願意將Cabal充實爲全包管理員? –

回答

10

安裝同一個包的多個版本工作得很好,現在(嘗試cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5),但安裝多個實例的相同包版本沒有。這是我們非常希望支持的,因爲這將允許我們實現hermetic builds並解決「依賴性地獄」問題,但這並非完全無關緊要。今年有一個GSoC項目爲ghc-pkg和Cabal添加了對多個實例的支持,但這些補丁還沒有在主線上。 Here's a video of the HIW 2012 talk about the project's resultshere's the description of the internal design

至於其他問題,實際上以前是用於安裝所有當前安裝軟件包的最新版本的cabal upgrade命令,但由於它可能會破壞您的安裝,因此它被刪除(再次,支持相同的多個實例包版本會解決這個問題)。卸載支持一直在願望清單中,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

+0

我很努力地理解如何維護我的Haskell配置(作爲一個有pip/Python模型的人應該如何工作)。例如,假設Haskel平臺發生變化(比如GHC更新)。我需要做些什麼來更新我的配置,其中包括(a)幾個額外的軟件包,和(b)IHaskell,(c)安裝在Jupyter中?我是否需要移除平臺,重新安裝平臺,使用Cabal重新安裝我的附加軟件包,重新安裝IHaskel,然後重新運行'ihaskell install'? – orome

相關問題