Saya pernah menjadi pengembang Java untuk waktu yang lama, tetapi baru-baru ini, saya bergabung dengan tim Haskell. Di dunia java, jika Anda memiliki proyek besar, dengan beberapa tim mengerjakannya, pendekatan yang umum adalah dengan menggunakan server artefak seperti Maven untuk mempermudah dan mempercepat pengembangan. Banyak alat pembuatan, seperti Ant, Maven, Gradle, dapat membangun proyek dan mengunggah file jar ke server artefak yang dapat digunakan oleh anggota tim lainnya tanpa rasa sakit. Oleh karena itu, dengan memecah proyek menjadi sub-proyek yang lebih kecil, waktu pembangunan juga berkurang secara drastis.
Di sisi Haskell, kami menggunakan cabal
untuk membangun proyek. Proyek kami membutuhkan waktu sekitar 10-15 menit untuk membangun tanpa optimasi. Butuh beberapa jam jika optimisasi kompiler dihidupkan, yang menyakitkan.
Saya bertanya-tanya, bagaimana kita dapat melakukan hal yang sama seperti yang kita lakukan di Jawa di sini. Apakah ada cara mudah untuk mengkompilasi dan mengunggah biner paket (pustaka) ke server artefak dan menggunakan binari prebuilt pada waktu build? Saya tahu bahwa karena Haskell menghasilkan kode mesin (daripada kode byte di Jawa) mungkin ada masalah kompatibilitas, tetapi kita mungkin dapat memiliki binari yang berbeda untuk arsitektur / OS yang berbeda yang disimpan di server artefak.
cabal
,GHC
,Test.Framework
atau linker.Jawaban:
Anda dapat mempertimbangkan untuk menggunakan Nix , yang merupakan manajer paket lintas platform untuk tujuan umum dengan dukungan yang layak untuk Haskell.
Nix memiliki bahasa pemrograman khusus untuk mendefinisikan paket (yang kebetulan murni, fungsional dan malas). Mendefinisikan paket baru dan memperluas yang sudah ada cukup mudah (mis. Untuk mengubah dependensi, dapatkan source dari git repo yang berbeda, dll.).
Paket diidentifikasi oleh hash, yang termasuk dependensi. Karenanya banyak versi, atau versi yang sama dengan dependensi berbeda, dapat hidup berdampingan tanpa konflik. Nix dapat mencari hash yang diinginkan pada server "binary cache", untuk melihat apakah paket tertentu dengan dependensi tertentu telah dibangun; jika demikian, itu akan mengunduh produk build daripada kompilasi.
Saat ini, repositori nixpkgs mencakup sebagian besar / semua Hackage, beberapa versi GHC (7.10.1, 7.8.4 dan beberapa backends JS) dan sebuah
cabal2nix
utilitas yang melakukan pekerjaan yang cukup baik dalam menghasilkan paket Nix dari file .cabal. Ada juga server CI "hydra" berbasis Nix, yang dapat Anda gunakan untuk memicu build berdasarkan komitmen SCM.sumber