• เครื่องมือบิลด์หลายภาษาที่รวดเร็วและขยายต่อได้ รองรับ Java, Scala, Kotlin
  • แม้เครื่องมือบิลด์ JVM มักถูกมองว่าช้าและชวนสับสน แต่ Mill ถูกออกแบบมาเพื่อใช้ประโยชน์จากประสิทธิภาพและการใช้งานของ JVM ได้อย่างเต็มที่
  • สามารถบิลด์โค้ดเบส Java เดียวกันได้เร็วกว่า Maven 5-10 เท่า และเร็วกว่า Gradle 2-4 เท่า
  • ใช้ภาษา Typed Config และกราฟงานแบบ Immutable เพื่อให้การบิลด์สะอาดและเข้าใจได้ง่าย
  • ขยายได้ดีตั้งแต่โปรเจ็กต์โมดูลเดี่ยวขนาดเล็กไปจนถึง monorepo ขนาดใหญ่ที่มีหลายร้อยโมดูล

จุดเด่นของ Mill

  • ประสิทธิภาพ: กราฟการบิลด์ของ Mill จะทำแคชและประมวลผลงานบิลด์แบบขนานโดยอัตโนมัติ ช่วยให้เวิร์กโฟลว์รวดเร็วและตอบสนองได้ดี พร้อมทั้งมีเครื่องมือสำหรับระบุและแก้ปัญหาคอขวดของการบิลด์ โดยเพิ่มโอเวอร์เฮดให้น้อยที่สุดกับตรรกะที่จำเป็นต่อการบิลด์โปรเจ็กต์
  • การดูแลรักษา: เขียนคอนฟิกและตรรกะปรับแต่งด้วยโค้ดที่กระชับและมีการตรวจสอบชนิด แทนการพึ่ง YAML และ Bash พร้อมใช้ต้นไม้โมดูลและกราฟงานแบบไม่เปลี่ยนแปลง สิ่งนี้ช่วยให้พบปัญหาคอนฟิกได้ตั้งแต่เนิ่นๆ และทำให้ IDE (IntelliJ หรือ VSCode) เข้าใจบิลด์ของ Mill ได้ดีกว่าระบบบิลด์อื่น
  • ความยืดหยุ่น: งานและโมดูลของ Mill รองรับได้ตั้งแต่การเพิ่มขั้นตอนบิลด์ง่ายๆ ไปจนถึง toolchain ของภาษาทั้งชุด สามารถดึงไลบรารี JVM ใดๆ มาใช้ในบิลด์ ใช้ระบบนิเวศปลั๊กอิน Mill จากผู้พัฒนาภายนอกที่มีอยู่อย่างหลากหลาย หรือเขียนปลั๊กอินเองแล้วเผยแพร่บน Maven Central เพื่อให้ผู้อื่นใช้งานได้

Mill เทียบกับเครื่องมือบิลด์อื่น

  • Mill ยืมแนวคิดจากเครื่องมืออื่นอย่าง Maven, Gradle และ Bazel แต่พยายามเรียนรู้จากจุดแข็งของแต่ละตัวและปรับปรุงจุดอ่อนของมัน
  • Mill vs Maven
    • Mill สานต่อแนวคิดนวัตกรรมของ Maven ในการให้ค่าเริ่มต้นที่ดี
      • JavaModule ที่มีมาในตัวของ Mill ใช้แนวทาง "convention over configuration" แบบเดียวกับ Maven ดังนั้นโปรเจ็กต์ Mill ขนาดเล็กจึงเริ่มต้นได้ด้วยความพยายามน้อยมาก และโปรเจ็กต์ Mill ขนาดใหญ่ก็มีโครงสร้างที่สม่ำเสมอบนพื้นฐานค่าเริ่มต้นเหล่านี้
    • Mill ทำแคชและประมวลผลบิลด์แบบขนานโดยอัตโนมัติ จึงเพิ่มความเร็วได้ 3-10 เท่า
      • ไม่ใช่แค่กับงานในตัวที่มากับ Mill แต่รวมถึงงานหรือโมดูลที่ผู้ใช้กำหนดเองด้วย สิ่งนี้ช่วยเพิ่มความคล่องตัวของเวิร์กโฟลว์การบิลด์บนบรรทัดคำสั่งให้สูงสุดเพื่อรักษาประสิทธิภาพการทำงาน โดยเฉพาะในโค้ดเบสขนาดใหญ่ที่มักทำให้การบิลด์ช้าลง เมื่อเทียบกับเวิร์กโฟลว์ "clean install" ของ Maven ที่อาจใช้เวลามากกว่า 1 นาที ใน Mill อาจใช้เวลาเพียงไม่กี่วินาที
    • Mill ทำให้การปรับแต่งเครื่องมือบิลด์ง่ายกว่า Maven มาก
      • ปกติโปรเจ็กต์จะเติบโตเกินกว่าการคอมไพล์ภาษาเดียว มักต้องมีการสร้างโค้ดแบบกำหนดเอง เวิร์กโฟลว์ linting การผสานเครื่องมือ อาร์ติแฟกต์ผลลัพธ์ หรือการรองรับภาษาเพิ่มเติม ความสามารถในการขยายและประสบการณ์ใช้งาน IDE ของ Mill ทำให้ทำสิ่งเหล่านี้ได้โดยตรงอย่างง่ายดายและปลอดภัยด้วยโค้ดที่ผ่านการตรวจสอบชนิดและงานแบบ sandbox
  • Mill vs Gradle
    • Mill ยึดตามความกระชับและความสามารถในการขยายของ Gradle
      • แทนที่จะเป็น XML ยาวหลายหน้า ทุกบรรทัดในบิลด์ของ Mill มีความหมาย ตัวอย่างเช่น การเพิ่ม dependency ใช้เพียง 1 บรรทัดใน Mill เช่นเดียวกับ Gradle ต่างจากการประกาศ <dependency> 5 บรรทัดที่พบใน Maven และเช่นเดียวกับ Gradle ผู้ใช้ปลายทางสามารถปรับแต่งบิลด์ให้ตรงความต้องการได้ง่าย โดยไม่ต้องผ่านกระบวนการเขียนปลั๊กอินก่อน
    • Mill อาจเร็วกว่า Gradle 2-3 เท่า
      • แม้ทั้ง Mill และ Gradle จะทำแคชและประมวลผลบิลด์แบบขนานโดยอัตโนมัติ แต่ Mill ทำสิ่งนี้ด้วยโอเวอร์เฮดคงที่ที่น้อยกว่ามาก ซึ่งหมายถึงเวลาที่เสียไปรอเครื่องมือบิลด์น้อยลง และมีเวลามากขึ้นสำหรับสิ่งที่สำคัญจริงๆ ในโปรเจ็กต์
    • Mill ใช้แนวปฏิบัติที่ดีที่สุดเป็นค่าเริ่มต้น
      • ทุกส่วนของบิลด์ใน Mill ถูกทำแคชและรองรับ incremental โดยปริยาย งานทุกอย่างของ Mill เขียนเอาต์พุตไปยังตำแหน่งมาตรฐาน และการพึ่งพาระหว่างงานทั้งหมดจะถูกจับโดยอัตโนมัติโดยไม่ต้องใส่หมายเหตุประกอบด้วยตนเอง ขณะที่ Gradle ต้องใช้ความพยายามและความเชี่ยวชาญมากพอสมควรในการทำความเข้าใจบิลด์และตั้งค่าให้ถูกต้อง ประสบการณ์ IDE ที่ยอดเยี่ยมของ Mill ช่วยให้เข้าใจบิลด์ได้ง่ายขึ้น และโมเดลการขยายของมันช่วยป้องกันความผิดพลาดในการตั้งค่าบิลด์ ดังนั้นใน Mill สิ่งที่ทำได้ง่ายที่สุดก็มักเป็นสิ่งที่ถูกต้อง

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น