Haskell สร้างและสร้างสภาพแวดล้อมที่คล้ายคลึงกับ Maven


20

ฉันเคยเป็นนักพัฒนา Java มานาน แต่เมื่อเร็ว ๆ นี้ฉันเข้าร่วมทีม Haskell ในโลกของจาวาถ้าคุณมีโครงการขนาดใหญ่โดยมีหลายทีมที่ทำงานอยู่วิธีการทั่วไปคือการใช้เซิร์ฟเวอร์สิ่งประดิษฐ์เช่น Maven เพื่อความสะดวกและรวดเร็วในการพัฒนา เครื่องมือสร้างจำนวนมากเช่น Ant, Maven, Gradle สามารถสร้างโครงการและอัปโหลดไฟล์ jar ไปยังเซิร์ฟเวอร์สิ่งประดิษฐ์ที่สามารถใช้งานโดยส่วนที่เหลือของทีมโดยไม่มีความเจ็บปวด ดังนั้นโดยการแยกโครงการออกเป็นโครงการย่อยขนาดเล็กเวลาสร้างจะลดลงอย่างมาก

ในด้านของ Haskell เราใช้cabalเพื่อสร้างโครงการ โครงการของเราใช้เวลาในการสร้างประมาณ 10-15 นาทีโดยไม่มีการเพิ่มประสิทธิภาพ ใช้เวลาสองสามชั่วโมงหากเปิดการปรับแต่งคอมไพเลอร์ซึ่งเป็นเรื่องเจ็บปวด

ฉันสงสัยว่าเราจะทำสิ่งเดียวกันกับที่เราทำใน Java ที่นี่ได้อย่างไร มีวิธีง่าย ๆ ในการรวบรวมและอัปโหลดไบนารีของแพ็คเกจ (ไลบรารี) ไปยังเซิร์ฟเวอร์สิ่งประดิษฐ์และใช้ไบนารีที่สร้างไว้ล่วงหน้าในเวลาบิลด์หรือไม่ ฉันรู้ว่าเนื่องจาก Haskell สร้างรหัสเครื่อง (แทนที่จะเป็นรหัสไบต์ใน Java) อาจมีปัญหาความเข้ากันได้ แต่เราอาจมีไบนารีต่างกันสำหรับสถาปัตยกรรม / ระบบปฏิบัติการต่าง ๆ ที่เก็บไว้ในเซิร์ฟเวอร์ส่วน


ไม่ใช่คำตอบสำหรับคำถามของคุณ แต่คุณเรียกใช้ "cabal build / install" ด้วยตัวเลือก -j หรือไม่?
Daniel Díaz Carrete

ใช่ แต่ฉันไม่เห็นการเร่งความเร็วมากนัก การใช้ CPU ประมาณ 15% -20% เมื่อสร้าง ผมไม่แน่ใจว่าปัญหาคือcabal, GHC, Test.Frameworkหรือลิงเกอร์
Oxy

ตามคำตอบดังนั้นนี้stackoverflow.com/questions/27173910/...เหตุผลหลักที่เป็นธรรมชาติพื้นเมืองของ executables Haskell
Daniel Díaz Carrete

ฉันพูดถึงการพัฒนาเป็นส่วนใหญ่ มันเป็นความจริงที่ไบนารีอาจทำให้เกิดความไม่เข้ากันเนื่องจากระบบปฏิบัติการที่แตกต่างกัน, สถาปัตยกรรมของ CPU และแม้แต่คอมไพเลอร์เวอร์ชัน แต่ทำไมฉันต้องเสียเวลามากเมื่อฉันพัฒนาบนเครื่องเดียวกันระบบปฏิบัติการเดียวกันและคอมไพเลอร์เดียวกันทุกวัน?
Oxy

ดูเหมือนว่า Halcyon ที่มีแคชอาจมีประโยชน์: halcyon.sh/reference/#private-storage-options
LubomírSedlář

คำตอบ:


2

คุณอาจพิจารณาใช้Nixซึ่งเป็นผู้จัดการแพคเกจข้ามแพลตฟอร์มที่มีวัตถุประสงค์ทั่วไปพร้อมการสนับสนุนที่ดีสำหรับ Haskell

ระวังมีภาษาการเขียนโปรแกรมที่กำหนดเองสำหรับการกำหนดแพคเกจ (ซึ่งเกิดขึ้นเพื่อจะบริสุทธิ์การทำงานและขี้เกียจ) การกำหนดแพ็กเกจใหม่และการขยายแพ็กเกจที่มีอยู่นั้นค่อนข้างง่าย (เช่นเพื่อเปลี่ยนการพึ่งพา, รับซอร์สจาก repo git อื่น ๆ )

แพ็คเกจถูกระบุโดยแฮชซึ่งรวมถึงการขึ้นต่อกัน ดังนั้นหลายรุ่นหรือรุ่นเดียวกันที่มีการพึ่งพาต่างกันสามารถอยู่เคียงข้างกันได้โดยไม่มีข้อขัดแย้ง ระวังสามารถค้นหาแฮชที่ต้องการบนเซิร์ฟเวอร์ "ไบนารีแคช" เพื่อดูว่าแพคเกจเฉพาะที่มีการอ้างอิงเหล่านั้นถูกสร้างขึ้นแล้ว; ถ้าเป็นเช่นนั้นมันจะดาวน์โหลดผลิตภัณฑ์บิลด์แทนที่จะรวบรวม

ขณะนี้ที่เก็บ nixpkgs นั้นรวมถึงแฮ็กเกจเกือบทั้งหมด / ทั้งหมด, GHC หลายเวอร์ชัน (7.10.1, 7.8.4 และแบ็กเอนด์ JS บางส่วน) และcabal2nixยูทิลิตี้ที่ทำงานได้ค่อนข้างดีในการสร้างแพ็คเกจ Nix จากไฟล์. cabal นอกจากนี้ยังมีเซิร์ฟเวอร์ CI "ไฮดรา" ที่ใช้ Nix ซึ่งคุณสามารถใช้เพื่อทริกเกอร์บิลด์ที่สร้างจากการคอมมิท SCM

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.