2013-02-05 21 views
14

Bazı Haskell projeleri oluşturmak için CircleCI'yi kullanmaya çalışıyorum. Circle, her derlemeden sonra otomatik olarak /home/ubuntu/.cabal dizinini önbelleğe alır ve bu, yapıları hızlandıracağını düşünmüştüm, ancak daha önce olduğu kadar uzun sürüyorlar --- atlanan tüm dosyalar indirme adımıdır. Neden cabal paketleri yeniden yükleyin .cabal/lib

kullanıyorum desek

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

ve ben install --only-dependencies adım önbellek görmek ve daha hızlı bir şekilde aday olacağını tahmin.

Neler ters gidebilir?

cevap

4

Birkaç ay önce bir excellent Reddit discussion kabal sorunu yaşandı. Hatırlamam, Haskell'in belirtilen herhangi bir uygulama ikili arayüzüne sahip olması ve ghc derleyicisinin derleme sırasında çok sayıda agresif kütüphaneler arası grafik azalması yapmasıdır. Sonuç olarak, Haskell uygulamasında sabit bir kütüphane kurulumu diye bir şey yoktur - herhangi bir kütüphane, yüklenen kütüphanelerin tam setine karşı sürüklenmeye ve yeniden derlenmeye karşı sorumludur.

Buradaki en alt satır, .cabal/lib dizininin önbelleğe alınmasının yükleme işlemini hızlandırmak için hiçbir şey yapmadığıdır. Bağımlılıkların yeniden derlenmesi her zaman olur. En iyi yaklaşımınız, hsenv kullanarak kum havuzundan çıkmadan, cabal install numaralı telefonu aradığınızda tüm bağımlı kitaplıklarınızı belirtmektir. Bu şekilde, bağımlılıklar zamanın ötesine hesaplanabilir ve derleme sadece bir kez gerçekleşmelidir.

Haskell gurular, burada söylediğim bir şey yanlışsa lütfen beni düzeltin. Birkaç aydır Haskell döngüsünden çıktım ve son zamanlarda cabal/kütüphane konularının çok fazla ilgi gördüğünün farkındayım.