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