เนื่องจาก Bazel พัฒนาอย่างต่อเนื่องเพื่อตอบสนองความต้องการของคุณ เราจึงอยากแชร์ข้อมูลอัปเดตเกี่ยวกับแผนกลยุทธ์ปี 2025
เราวางแผนที่จะให้บริการการสนับสนุนระยะยาว (LTS) สำหรับ Bazel 9.0 ในช่วงปลายปี 2025
การเปลี่ยนไปใช้ Bzlmod อย่างเต็มรูปแบบ
Bzlmod เป็นระบบการพึ่งพาภายนอกมาตรฐานใน Bazel ตั้งแต่ Bazel 7 ซึ่งมาแทนที่ระบบ WORKSPACE เดิม ในเดือนมีนาคม 2025 Bazel Central Registry ให้บริการโมดูลมากกว่า 650 รายการ
ใน Bazel 9 เราจะนำฟังก์ชันการทำงาน WORKSPACE ออกโดยสมบูรณ์ และ Bzlmod จะเป็นวิธีเดียวในการนําพาพึ่งพาภายนอกมายัง Bazel เราจะมุ่งเน้นที่การปรับปรุงคำแนะนำและเครื่องมือในการย้ายข้อมูลให้ดียิ่งขึ้นต่อไป เพื่อลดต้นทุนในการย้ายข้อมูลสำหรับชุมชน
นอกจากนี้ เรายังมุ่งมั่นที่จะใช้แคชที่เก็บข้อมูลที่แชร์ที่ได้รับการปรับปรุง (ดู #12227) ที่มีการเก็บขยะ และอาจพอร์ตกลับไปยัง Bazel 8 นอกจากนี้ รีจิสทรี Bazel Central จะรองรับการยืนยันการรับรอง SLSA ด้วย
การย้ายข้อมูลกฎ Android, C++, Java, Python และ Proto
ใน Bazel 8 เราได้ย้ายข้อมูลการรองรับกฎ Android, Java, Python และ Proto ออกจากโค้ดเบสของ Bazel ไปยังกฎ Starlark ในที่เก็บข้อมูลที่เกี่ยวข้อง เราได้ติดตั้งใช้งานฟีเจอร์การโหลดอัตโนมัติใน Bazel เพื่อให้การย้ายข้อมูลง่ายขึ้น ซึ่งสามารถควบคุมได้ด้วย Flag --incompatible_autoload_externally และ --incompatible_disable_autoloads_in_main_repo
ใน Bazel 9 เราตั้งใจที่จะปิดใช้การโหลดอัตโนมัติโดยค่าเริ่มต้น และกำหนดให้ทุกโปรเจ็กต์โหลดกฎที่จำเป็นในไฟล์ BUILD อย่างชัดเจน
เราจะเขียนการรองรับภาษา C++ ส่วนใหญ่ใหม่เป็น Starlark, แยกออกจากไบนารีของ Bazel และย้ายไปไว้ในที่เก็บข้อมูล /rules_cc นี่เป็นภาษาหลักสุดท้ายที่ยังคงรองรับและเป็นส่วนหนึ่งของ Bazel
นอกจากนี้ เรายังพอร์ตการทดสอบ 1 หน่วยสำหรับกฎ C++, Java และ Proto ไปยัง Starlark โดยย้ายไปไว้ในที่เก็บข้อมูลข้างการติดตั้งใช้งานเพื่อเพิ่มความเร็วของผู้เขียนกฎ
การปรับปรุง Starlark
Bazel จะประเมินมาโครสัญลักษณ์แบบล่าช้าได้ ซึ่งหมายความว่ามาโครเชิงสัญลักษณ์จะไม่ทํางานหากไม่มีการขอเป้าหมายที่ประกาศไว้ ซึ่งจะปรับปรุงประสิทธิภาพสําหรับแพ็กเกจขนาดใหญ่มาก
Starlark จะมีระบบประเภทเวอร์ชันทดลอง ซึ่งคล้ายกับคำอธิบายประกอบประเภทของ Python เราคาดว่าระบบประเภทจะทำงานได้อย่างเสถียรหลังจากเปิดตัว Bazel 9
ความสามารถในการกําหนดค่า
เป้าหมายหลักของเราคือการลดค่าใช้จ่ายและความสับสนเกี่ยวกับ Flag การสร้าง
เรากําลังทดสอบรูปแบบการกําหนดค่าโปรเจ็กต์แบบใหม่ที่ไม่ต้องให้ผู้ใช้ต้องทราบว่าต้องตั้งค่า Flag การทดสอบและบิลด์ใดที่ใด ดังนั้น $ bazel test //foo
จึงตั้งค่า Flag ที่ถูกต้องโดยอัตโนมัติตามนโยบายของโปรเจ็กต์ foo
ฟีเจอร์นี้น่าจะยังคงอยู่ในขั้นทดลองในเวอร์ชัน 9.0 แต่เรายินดีรับฟังความคิดเห็นที่เป็นประโยชน์
การกำหนดขอบเขต Flag ช่วยให้คุณตัด Flag ของ Starlark ออกได้เมื่อออกจากขอบเขตโปรเจ็กต์ เพื่อไม่ให้ Flag ดังกล่าวทำให้การแคชของ Dependency แบบทรานซิทีฟที่ไม่ต้องใช้ Flag ทำงานผิดปกติ วิธีนี้ทำให้บิลด์ที่ใช้ทรานซิชันมีราคาถูกลงและเร็วขึ้น ตัวอย่าง เรากำลังขยายแนวคิดนี้เพื่อควบคุมว่าต้องส่งต่อ Flag ใดไปยังการกำหนดค่า exec และกำลังพิจารณาการสนับสนุนที่ยืดหยุ่นยิ่งขึ้น เช่น Starlark ที่กําหนดเอง เพื่อระบุขอบความเกี่ยวข้องใดที่ควรส่งต่อ Flag
เรากำลังให้ความสำคัญกับการนำ Flag ภาษาในตัวออกจาก Bazel และย้ายไปยัง Starlark ซึ่ง Flag ดังกล่าวจะอยู่กับคําจํากัดความกฎที่เกี่ยวข้องได้
การปรับปรุงการดำเนินการจากระยะไกล
เราวางแผนที่จะเพิ่มการรองรับการดำเนินการแบบอะซิงโครนัส ซึ่งจะเร่งการดำเนินการระยะไกลด้วยการเพิ่มการทำงานแบบขนาน
หากต้องการติดตามข้อมูลอัปเดตเกี่ยวกับแผนกลยุทธ์และพูดคุยเกี่ยวกับฟีเจอร์ที่วางแผนไว้ โปรดเข้าร่วมเซิร์ฟเวอร์ Slack ของชุมชนที่ slack.bazel.build
แผนภาพนี้จัดทำขึ้นเพื่อแจ้งให้ชุมชนทราบถึงเจตนาของทีมสำหรับ Bazel 9.0 ลำดับความสำคัญอาจเปลี่ยนแปลงตามความคิดเห็นของนักพัฒนาแอปและลูกค้า หรือตามโอกาสใหม่ๆ ในตลาด