2012-10-29 3 views
13

(Prima di iniziare: ho intenzione di utilizzare Cabal per tutto ciò che ha Cabal in suo nome e ha qualcosa a che fare con Haskell.)Perché Cabal non ha creato un gestore di pacchetti completo?

Avendo avuto il solito "è necessario aggiornare X installare Y, ma questo si romperà dipendenza problema Z" ancora una volta l'altro giorno, ho pensato appena chiedo: perché è stato Cabal non progettato per essere un gestore di pacchetto completo, in particolare con le seguenti caratteristiche:

  • Versioning: installa più versioni di un pacchetto una accanto all'altra, lascia che i pacchetti scelgano il desiderio dipendenze. Se non è stata specificata alcuna versione del pacchetto, utilizzare l'ultima disponibile.
  • Aggiornamento pacchetti - o meglio, anche installare la versione più recente.
  • Rimuovere pacchetti
  • check di integrità del pacchetto

Vedete dove questa lista sta andando. In questo momento, per me Cabal si sente come un sistema di compilazione un po 'sofisticato (prova a scoprire quale versione di Base richiede il tuo pacchetto quando vuoi iniziare ad usarlo per la prima volta), che viene fornito con un programma di installazione del pacchetto semi-cotto.

Quindi la domanda ancora: Perché Cabal non ha creato un sistema di compilazione/pacchetto completo? Sono sicuro che ci sia stata una decisione di progettazione che ha portato allo stato attuale.

(La domanda è stata in qualche modo ispirato da a rant on Reddit, ma contrariamente a quel ragazzo non significa offendere nessuno da quanto sopra.) :-)

+3

Questa domanda dovrebbe probabilmente essere anche redditiva - troppo lontana dal tipo di domande di programmazione che appartengono a SO. –

+4

Dalle domande frequenti su * domande da porre qui *: "strumenti software comunemente usati dai programmatori"? Dai un'occhiata. "problemi pratici e risolvibili che sono unici per la professione di programmatore"? Dai un'occhiata. – David

+0

Ti stai offrendo volontario per arricchire Cabal in un gestore di pacchetti completo? –

risposta

10

L'installazione di più versioni dello stesso pacchetto funziona perfettamente bene in questo momento (prova cabal install ansi-terminal-0.5.4 && cabal install ansi-terminal-0.5.5), ma l'installazione di istanze multiple della stessa versione del pacchetto non corrisponde a. Questo è qualcosa a cui vorremmo molto supportare, poiché ciò ci consentirebbe di implementare lo hermetic builds e risolvere il problema del "problema dell'inferno di dipendenza", ma non è del tutto banale. Quest'anno c'è stato un progetto GSoC per aggiungere il supporto per più istanze a ghc-pkg e Cabal, ma le patch non sono ancora nella linea principale. Here's a video of the HIW 2012 talk about the project's results e here's the description of the internal design.

Come per le altre domande, in realtà c'era un comando cabal upgrade per l'installazione delle ultime versioni di tutti i pacchetti attualmente installati, ma era stato rimosso poiché poteva interrompere l'installazione (ancora, avendo il supporto per più istanze dello stesso la versione del pacchetto risolverebbe questo). Il supporto per la disinstallazione è da tempo presente nell'elenco dei desideri, it's just that no-one had time to implement it yet. Immagino che lo stesso valga per i pacchetti firmati digitalmente e HTTPS.

Inoltre, se siete interessati a vedere alcune di queste funzionalità implementate, patch per Cabal sono sempre i benvenuti, e con il passaggio a GitHub è diventato più facile che mai per contribuire al codice (contributo in denaro è anche bene se si può permettere it - Penso che lo Well-Typed sarà molto felice di parlarti di questo).

aggiornamento (settembre 2016): per un aggiornamento sullo stato attuale delle cose vedi questo post da Edward Z. Yang: cabal new-build is a package manager.

+0

Non riesco a capire come mantenere la mia configurazione Haskell (come qualcuno con un modello pip/Python di come "dovrebbe" funzionare). Ad esempio, supponiamo che la piattaforma Haskel cambi (diciamo che GHC è aggiornato). Cosa devo fare per aggiornare la mia configurazione, che include (a) diversi pacchetti aggiuntivi e (b) IHaskell, che è (c) installato in Jupyter? Devo rimuovere la piattaforma, reinstallarla, reinstallare i miei pacchetti aggiuntivi con Cabal, reinstallare IHaskel ed eseguire di nuovo 'ihaskell install'? – orome