Haskell ambiente build e artefatto simile a Maven

19

Ero uno sviluppatore Java da molto tempo, ma recentemente mi sono unito a un team Haskell. Nel mondo java, se hai un grande progetto, con diversi team che lavorano su di esso, un approccio comune è quello di utilizzare un server artefatto come Maven per facilitare e velocizzare lo sviluppo. Numerosi strumenti di costruzione, come Ant, Maven, Gradle, possono costruire il progetto e carica un file jar sul server degli artefatti che può essere utilizzato dal resto del team senza dolore Perciò, dividendo il progetto in sottoprogetti più piccoli, anche il tempo di costruzione viene drasticamente ridotto.

Sul lato Haskell, stiamo usando cabal per costruire il progetto. Il nostro progetto richiede circa 10-15 minuti per la realizzazione senza ottimizzazione. Ci vogliono alcune ore se l'ottimizzazione del compilatore è attiva, il che è doloroso.

Mi chiedo, come possiamo fare la stessa cosa che facciamo in Java qui. C'è un modo semplice per compilare e caricare il binario dei pacchetti (librerie) in un server artefatto e utilizzare i binari predefiniti al momento della compilazione? So che dal momento che Haskell genera codice macchina (piuttosto che codice byte in Java) potrebbero esserci problemi di compatibilità, ma probabilmente possiamo avere file binari diversi per architetture / sistemi operativi diversi memorizzati sul server artefatto.

    
posta Oxy 05.03.2015 - 19:43
fonte

1 risposta

1

Potresti prendere in considerazione l'utilizzo di Nix , che è un gestore di pacchetti multipiattaforma generico con un supporto decente per Haskell.

Nix ha un linguaggio di programmazione personalizzato per la definizione dei pacchetti (che per puro caso è puro, funzionale e pigro). Definire nuovi pacchetti ed estendere quelli esistenti è piuttosto semplice (ad esempio per alterare le dipendenze, ottenere l'origine da un diverso repository git, ecc.).

I pacchetti sono identificati da hash, che includono le dipendenze. Quindi più versioni, o la stessa versione con dipendenze diverse, possono vivere fianco a fianco senza conflitti. Nix può cercare l'hash desiderato su un server "cache binaria", per vedere se quel particolare pacchetto con quelle particolari dipendenze è già stato creato; in tal caso, scaricherà il prodotto di build anziché compilare.

Attualmente, il repository nixpkgs include la maggior parte di Hackage, diverse versioni di GHC (7.10.1, 7.8.4 e alcuni backend JS) e un'utilità cabal2nix che fa un ottimo lavoro di generazione dei pacchetti Nix da .cabal File. C'è anche il server CI "hydra" basato su Nix, che puoi utilizzare per attivare build basati su commit SCM.

    
risposta data 14.08.2015 - 19:18
fonte

Leggi altre domande sui tag