แผนกลยุทธ์ของ Bazel

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

เนื่องจาก 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 ลำดับความสำคัญอาจเปลี่ยนแปลงได้ตามความคิดเห็นของนักพัฒนาแอปและลูกค้า หรือโอกาสใหม่ๆ ในตลาด