2013-02-05 11 views
14

Próbuję użyć CircleCI do zbudowania niektórych projektów Haskell. Circle automatycznie buforuje katalog /home/ubuntu/.cabal po każdym kompilacji i myślałem, że przyspieszy to kompilacje, ale wydaje się, że trwają tak długo, jak przedtem - wszystko, co jest pomijane, jest krokiem pobierania.Dlaczego cabal instaluje ponownie pakiety w .cabal/lib

Instrukcje kompilacji używam są

cabal update 
cabal install --only-dependencies --enable-tests 
cabal configure --enable-tests 
cabal build 
cabal test 

i przewiduje się, że install --only-dependencies krokiem byłoby zobaczyć cache i biegać szybciej.

Co może być nie tak?

Odpowiedz

4

Po kilku miesiącach pojawiły się problemy z kabałą excellent Reddit discussion. Przypominam, że Haskell nie ma określonego interfejsu binarnego aplikacji, a kompilator ghc wykonuje wiele agresywnych redukcji między bibliotekami podczas kompilacji. W rezultacie nie ma czegoś takiego jak stabilna instalacja biblioteki w aplikacji Haskell - każda biblioteka może zostać przeciągnięta i skompilowana z pełnym zestawem już zainstalowanych bibliotek.

Najważniejsze jest to, że buforowanie katalogu .cabal/lib nie powoduje przyspieszenia instalacji. Ponowna kompilacja zależności zawsze nastąpi. Twoje najlepsze podejście, poza piaskownicą przy użyciu hsenv, polega na określeniu pełnego zestawu bibliotek zależnych, gdy zadzwonisz pod numer cabal install. W ten sposób zależności można obliczyć z wyprzedzeniem, a kompilacja powinna wystąpić tylko raz.

Guru Haskella, proszę, pomóż mi, jeśli cokolwiek, o czym tu mówiłem, jest w błędzie. Byłem poza pętlą Haskell przez kilka miesięcy i zdaję sobie sprawę, że problemy z kabałą/biblioteką zyskały ostatnio wiele uwagi.

Powiązane problemy