Haskell Maven'e benzer yapı ve yapay çevre


20

Eskiden Java geliştiricisiydim ama son zamanlarda Haskell ekibine katıldım. Java dünyasında, üzerinde birkaç ekip çalıştığı büyük bir projeniz varsa, ortak bir yaklaşım, gelişimi kolaylaştırmak ve hızlandırmak için Maven gibi bir yapay sunucu kullanmaktır. Ant, Maven, Gradle gibi çok sayıda oluşturma aracı, projeyi oluşturabilir ve ekibin geri kalanı tarafından ağrısız olarak kullanılabilecek yapay sunucuya bir kavanoz dosyası yükleyebilir. Bu nedenle, projeyi daha küçük alt projelere bölerek inşa süresi de önemli ölçüde azalır.

Haskell tarafında cabalprojeyi inşa etmek için kullanıyoruz . Projemiz optimizasyon olmadan yaklaşık 10-15 dakika sürüyor. Derleyici optimizasyonu açıksa ağrılı olan birkaç saat sürer.

Acaba, burada Java ile aynı şeyi nasıl yapabiliriz. Paketlerin (kitaplıkların) ikili dosyasını derleme ve bir yapay sunucuya yüklemenin ve önceden oluşturulmuş ikili dosyaları oluşturma zamanında kullanmanın kolay bir yolu var mı? Haskell makine kodu oluşturduğundan (Java'da bayt kodu yerine) uyumluluk sorunları olabileceğini biliyorum, ancak muhtemelen yapay sunucuda depolanan farklı mimariler / işletim sistemleri için farklı ikili dosyalar olabilir.


Sorunuzun yanıtı değil, "cabal build / install" komutunu -j seçeneğiyle çağırıyor musunuz?
Daniel Díaz Carrete

Evet, ama fazla hızlanma görmüyorum. CPU kullanımı, bina sırasında% 15-20 arasındadır. Sorunun nerede emin değilim: cabal, GHC, Test.Frameworkveya bağlayıcı.
Oxy

Bu SO cevabına göre stackoverflow.com/questions/27173910/… ana nedeni Haskell yürütülebilir dosyalarının doğal doğasıdır.
Daniel Díaz Carrete

Çoğunlukla gelişimden bahsediyorum. İkili sistemin farklı işletim sistemleri, CPU mimarileri ve hatta derleyici sürümleri nedeniyle uyumsuzluğa neden olabileceği doğrudur. Ancak, her gün aynı makinede, aynı işletim sisteminde ve aynı derleyicide geliştirirken neden bu kadar zaman harcamalıyım?
Oxy

Önbellekli Halcyon yararlı olabilir: halcyon.sh/reference/#private-storage-options
Lubomír Sedlář

Yanıtlar:


2

Sen kullanmayı düşünebilirsiniz Nix Haskell için iyi desteği ile genel amaçlı, çapraz platform paket yöneticisidir.

Nix, paketleri tanımlamak için özel bir programlama diline sahiptir (bu sadece saf, fonksiyonel ve tembel olur). Yeni paketler tanımlamak ve mevcut paketleri genişletmek oldukça kolaydır (örn. Bağımlılıkları değiştirmek, kaynağı farklı bir git repo'dan almak vb.).

Paketler, bağımlılıkları içeren karmalarla tanımlanır. Bu nedenle, birden fazla sürüm veya farklı bağımlılıklara sahip aynı sürüm, çakışma olmadan yan yana yaşayabilir. Nix, bu özel bağımlılıklara sahip belirli bir paketin önceden oluşturulmuş olup olmadığını görmek için "ikili önbellek" sunucusunda istenen karışı arayabilir; öyleyse derleme yerine derleme ürününü indirir.

Şu anda, nixpkgs deposu Hackage'ın çoğunu / tümünü, birkaç GHC sürümünü (7.10.1, 7.8.4 ve bazı JS arka uçları) ve cabal2nix.cabal dosyalarından Nix paketleri oluşturmak için oldukça iyi bir iş yapan bir yardımcı programı içerir. SCM taahhütlerine dayalı derlemeleri tetiklemek için kullanabileceğiniz Nix tabanlı "hydra" CI sunucusu da var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.