เฟสบุ๊คแนะนำ เพิ่งเปิดตัวระบบสร้างใหม่ที่เรียกว่า "Buck2" ซึ่งสังเกตว่าเป็น เน้นการสร้างโครงการจากพื้นที่เก็บข้อมูล มาก ขนาดใหญ่ที่มีรหัสในภาษาต่างๆ การเขียนโปรแกรม
ความแตกต่าง ระหว่างการใช้งานใหม่กับระบบ บัคที่ใช้ก่อนหน้านี้ โดย facebook กำลังใช้ภาษา Rust แทน Java และการเพิ่มประสิทธิภาพและสมรรถนะของกระบวนการประกอบเพิ่มขึ้นอย่างมาก (ในการทดสอบภายในบนโครงสร้างพื้นฐานเดียวกัน Buck2 ปฏิบัติงานประกอบได้เร็วกว่า Buck ถึงสองเท่า)
สร้างระบบระหว่างนักพัฒนาและรหัสของพวกเขาทำงาน ดังนั้นทุกสิ่งที่เราสามารถทำได้เพื่อทำให้ประสบการณ์เร็วขึ้นหรือมีประสิทธิผลมากขึ้นจะส่งผลโดยตรงต่อประสิทธิภาพของนักพัฒนา เป้าหมายของ Buck2 คือการรักษาสิ่งที่เราชอบเกี่ยวกับ Buck1 (พื้นฐานและเวิร์กโฟลว์) รับแรงบันดาลใจจากนวัตกรรมหลัง Buck1 (รวมถึง Bazel, Adapton และ Shake) และมุ่งเน้นไปที่ความเร็วและการเปิดใช้ประสบการณ์ใหม่
เกี่ยวกับบัคทู
เน้นว่า ระบบไม่ได้เชื่อมโยงกับการสร้างรหัสในภาษาใดภาษาหนึ่ง และสนับสนุนโครงการตัวสร้างที่เขียนด้วย C++, Python, Rust, Kotlin, Erlang, Swift, Objective-C, Haskell และ OCaml ที่ Facebook ใช้
ภาษา Starlark ซึ่งใช้ Python (เช่นเดียวกับ Bazel) นั้นใช้ในการออกแบบปลั๊กอิน สร้างสคริปต์และกฎต่างๆ Starlark ช่วยให้คุณสามารถขยายความสามารถของระบบการสร้างและบทคัดย่อจากภาษาเฉพาะที่ใช้ในโครงการที่กำลังสร้าง
เป็นที่กล่าวขวัญกันว่า ประสิทธิภาพสูงทำได้โดยการแคชผลลัพธ์, การทำให้งานเป็นแบบขนานและรองรับการเรียกใช้งานจากระยะไกล (Remote Build Execution)
สภาพแวดล้อมการสร้าง ใช้แนวคิดของ "ความลึกลับ": โค้ดที่คอมไพล์แยกออกจากโลกภายนอก ไม่มีการโหลดอะไรจากภายนอกในระหว่างกระบวนการสร้าง และการดำเนินการซ้ำของงานบนระบบต่างๆ นำไปสู่ผลลัพธ์เดียวกัน (บิลด์ซ้ำๆ เช่น ผลลัพธ์ของการคอมไพล์โปรเจ็กต์บน เครื่องจากผู้พัฒนาจะเหมือนกันทุกประการกับการสร้างบนเซิร์ฟเวอร์การผสานรวมอย่างต่อเนื่อง) สถานการณ์การขาดการพึ่งพานั้นถูกมองว่าเป็นข้อผิดพลาดใน Buck2
ในส่วนของ คุณสมบัติหลักของ Buck2สิ่งต่อไปนี้โดดเด่น:
- กฎสำหรับการรองรับภาษาโปรแกรมและระบบการสร้างคอร์แยกจากกันโดยสิ้นเชิง กฎเขียนด้วยภาษา Starlark ส่วนชุดเครื่องมือและการใช้งานของ Starlark เขียนด้วยภาษา Rust
- ระบบการสร้างใช้กราฟการพึ่งพาที่เพิ่มขึ้นเพียงครั้งเดียว (ไม่มีการจัดเตรียม) ซึ่งช่วยให้คุณเพิ่มความลึกของการขนานของงานเมื่อเทียบกับ Buck และ Bazel และหลีกเลี่ยงข้อบกพร่องหลายประเภท
- โค้ดของ Buck2 ที่โพสต์บน GitHub และกฎการสนับสนุนภาษาการเขียนโปรแกรมเกือบจะเหมือนกับเวอร์ชันภายในที่ใช้ในโครงสร้างพื้นฐานของ Facebook (ข้อแตกต่างเพียงอย่างเดียวคือในลิงก์ไปยังเวอร์ชันคอมไพเลอร์และบิลด์เซิร์ฟเวอร์ที่ Facebook ใช้)
- ระบบบิลด์ได้รับการออกแบบให้รวมเข้ากับระบบสั่งงานระยะไกล ซึ่งช่วยให้คุณสามารถเรียกใช้งานบนเซิร์ฟเวอร์ระยะไกลได้ API การดำเนินการระยะไกลเข้ากันได้กับ Bazel และได้รับการทดสอบความเข้ากันได้กับ Buildbarn และ EngFlow
- มีการรวมเข้ากับระบบไฟล์เสมือนซึ่งนำเสนอเนื้อหาของที่เก็บทั้งหมด แต่ในความเป็นจริงงานจะดำเนินการกับส่วนโลคัลจริงของส่วนหนึ่งของที่เก็บ (ผู้พัฒนาเห็นที่เก็บทั้งหมด แต่เฉพาะสิ่งที่ จำเป็น) ไฟล์ที่เข้าถึงจะถูกดึงมาจากที่เก็บ) รองรับ VFS และ Git LFS ที่ใช้ EdenFS ซึ่งใช้โดย Sapling
สุดท้ายสำหรับผู้ที่สนใจสามารถเรียนรู้เพิ่มเติมเกี่ยวกับมัน พวกเขาควรทราบว่ารหัสนั้นเผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0 และพวกเขาสามารถดูรายละเอียดได้ ในลิงค์ต่อไปนี้.