2012-10-29 10 views
13

(Bevor ich: Ich werde Cabal für Alles verwenden, die Cabal in seinem Namen hat und hat etwas mit Haskell zu tun.)Warum wurde Cabal nicht zum kompletten Paketmanager ernannt?

die üblichen „Sie X aktualisieren musste Nachdem zu installieren Y, aber dies wird Abhängigkeits Z“-Ausgabe wieder den anderen Tag brechen, ich dachte, ich würde nur fragen: warum wurde Cabal kein vollständiges Paket-Manager so konzipiert, vor allem mit den folgenden Merkmalen:

  • Versioning: Installieren Sie mehrere Versionen eines Pakets nebeneinander, lassen Sie Pakete das gewünschte auswählen ed Abhängigkeiten. Wenn keine Paketversion angegeben ist, verwenden Sie die neueste Version.
  • Update Pakete - oder besser, auch installieren Sie die neueste Version.
  • entfernen Pakete
  • prüfen Paket Integrität

Sie sehen, wo diese Liste geht. Im Moment fühlt sich Cabal wie ein etwas ausgeklügeltes Build-System an (versuche herauszufinden, welche Version von Base dein Paket benötigt, wenn du es zum ersten Mal benutzen willst), die mit einem halbierten Paketinstallationsprogramm kommt.

So die Frage noch einmal: Warum wurde Cabal nicht ein voll funktionsfähiges Build/Package-System gemacht? Ich bin mir sicher, dass es eine Designentscheidung gab, die zum aktuellen Stand führte.

(Diese Frage etwas von a rant on Reddit inspiriert wurde, aber im Gegensatz zu diesem Kerl bedeuten nicht, dass jemand durch die oben zu beleidigen.) :-)

+3

Diese Frage sollte wahrscheinlich auch auf reddit stehen - zu weit entfernt von der Art von Programmierfragen, die auf SO gehören. –

+4

Aus den FAQ zu * Fragen, die hier gestellt werden können *: "von Programmierern häufig verwendete Software-Tools"? Prüfen. "praktische, beantwortbare Probleme, die für den Programmierberuf einzigartig sind"? Prüfen. – David

+0

Bist du freiwillig, Cabal zu einem kompletten Paketmanager zu machen? –

Antwort

10

mehrere Versionen des gleichen Pakets jetzt installieren funktioniert sehr gut (versuchen Sie cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5), aber die Installation mehrere Instanzen der gleichen Paketversion nicht. Dies ist etwas, das wir sehr gerne unterstützen würden, da es uns ermöglichen würde, hermetic builds zu implementieren und das Problem der "Abhängigkeitshölle" zu lösen, aber es ist nicht ganz trivial. In diesem Jahr gab es ein GSoC-Projekt, um ghc-pkg und Cabal mehrere Instanzen hinzuzufügen, aber die Patches sind noch nicht in der Mainline. Here's a video of the HIW 2012 talk about the project's results und here's the description of the internal design.

Zu Ihren anderen Fragen gab es tatsächlich einen cabal upgrade Befehl für die Installation der neuesten Versionen aller derzeit installierten Pakete, aber es wurde entfernt, da es Ihre Installation unterbrechen könnte (wieder Unterstützung für mehrere Instanzen derselben Paketversion würde dies beheben). Die Deinstallation steht seit einiger Zeit auf der Wunschliste, it's just that no-one had time to implement it yet. Ich denke, das gilt auch für digital signierte Pakete und HTTPS. Wenn Sie daran interessiert sind, einige dieser Funktionen implementiert zu sehen, sind Patches für Cabal immer willkommen, und mit dem Umzug nach GitHub wurde es einfacher als je zuvor, Code beizutragen (das Einreichen von Bargeld ist auch in Ordnung, wenn Sie es sich leisten können.) es - ich denke, Well-Typed wird sehr glücklich sein, mit Ihnen darüber zu sprechen).

Update (September 2016): für ein Update über den aktuellen Stand der Dinge siehe diesen Beitrag von Edward Z. Yang: cabal new-build is a package manager.

+0

Ich habe Schwierigkeiten zu verstehen, wie ich meine Haskell-Konfiguration beibehalten kann (als jemand mit einem PIP/Python-Modell, wie die Dinge "funktionieren" sollen). Angenommen, die Haskel-Plattform ändert sich (z. B. GHC wird aktualisiert). Was muss ich tun, um meine Konfiguration zu aktualisieren, die (a) mehrere zusätzliche Pakete enthält und (b) IHaskell, das (c) in Jupyter installiert ist? Muss ich die Plattform entfernen, neu installieren, meine zusätzlichen Pakete mit Cabal neu installieren, IHaskel neu installieren und 'ihaskell install' erneut ausführen? – orome

Verwandte Themen