ภาพรวม
เนื่องจากโปรเจ็กต์ Bazel มีการพัฒนาอย่างต่อเนื่องเพื่อตอบสนองความต้องการของคุณ เราจึงอยากแชร์ข้อมูลอัปเดตปี 2024
โรดแมปนี้อธิบายความคิดริเริ่มปัจจุบันและการคาดการณ์เกี่ยวกับการพัฒนา Bazel ในอนาคต ซึ่งจะช่วยให้คุณเห็นภาพลำดับความสำคัญปัจจุบันและโปรเจ็กต์ที่กำลังดำเนินการอยู่
การเผยแพร่ Bazel 8.0
เราวางแผนที่จะเปิดตัวการสนับสนุนระยะยาว long term support (LTS) ของ Bazel 8.0 ในช่วงปลายปี 2024 โดยมีแผนที่จะนำฟีเจอร์ต่อไปนี้มาใช้งาน
Bzlmod: ระบบการจัดการทรัพยากร Dependency ภายนอก
Bzlmod จะแก้ปัญหาทรัพยากร Dependency แบบทรานซิทีฟโดยอัตโนมัติ ซึ่งช่วยให้โปรเจ็กต์ขยายขนาดได้โดยยังคงความเร็วและ ประสิทธิภาพในการใช้ทรัพยากรไว้
ใน Bazel 8 เราจะปิดใช้การสนับสนุน WORKSPACE โดยค่าเริ่มต้น (แต่จะยังเปิดใช้ได้โดยใช้ --enable_workspace) และจะนำการสนับสนุน WORKSPACE ออกใน Bazel 9 โดยคุณสามารถตั้งค่า --noenable_workspace เพื่อเลือกใช้ลักษณะการทำงานใหม่ได้ตั้งแต่ Bazel 7.1 เป็นต้นไป
Bazel 8.0 จะมีการปรับปรุงฟังก์ชันการจัดการทรัพยากร Dependency ภายนอกของ Bazel หลายอย่าง ซึ่งรวมถึง
- ตั้งค่าแฟล็กใหม่
--enable_workspaceเป็นfalseเพื่อปิดใช้ฟังก์ชัน WORKSPACE โดยสมบูรณ์ - API การตรวจสอบไดเรกทอรีใหม่ (ดู #21435 ซึ่งเปิดตัวใน Bazel 7.1)
- ปรับปรุงสคีมาสำหรับการสร้างชื่อที่เก็บข้อมูล Canonical เพื่อให้แคชการดำเนินการได้ดียิ่งขึ้นเมื่อมีการอัปเดตเวอร์ชันทรัพยากร Dependency (#21316 ซึ่งเปิดตัวใน Bazel 7.1)
- แคชที่เก็บข้อมูลที่ใช้ร่วมกันที่ปรับปรุงแล้ว (ดู #12227)
- การสนับสนุนโหมดผู้ให้บริการและโหมดออฟไลน์ ซึ่งช่วยให้ผู้ใช้เรียกใช้บิลด์ด้วย ทรัพยากร Dependency ที่ดาวน์โหลดไว้ล่วงหน้าได้ (ดู #19563)
- ลดความขัดแย้งในการผสานในไฟล์ล็อก (#20396)
- MODULE.bazel แบบแบ่งส่วน (#17880)
- อนุญาตให้ลบล้างที่เก็บข้อมูลที่สร้างโดยส่วนขยายของโมดูล (#19301)
- ปรับปรุงเอกสารประกอบ (เช่น #18030, #15821) รวมถึงคู่มือและเครื่องมือการย้ายข้อมูล
การปรับปรุงการดำเนินการระยะไกล
- เพิ่มการสนับสนุนการดำเนินการแบบไม่พร้อมกัน ซึ่งจะช่วยเพิ่มความเร็วในการดำเนินการระยะไกลด้วยการเพิ่มการทำงานแบบขนานด้วยแฟล็ก
--jobs - ทำให้การแก้ไขข้อบกพร่องของแคชที่พลาดง่ายขึ้นด้วยบันทึกการดำเนินการแบบย่อ ซึ่งจะลดขนาดลง 100 เท่าและลดค่าใช้จ่ายในการดำเนินการได้อย่างมาก (ดู #18643)
- ใช้การเก็บรวบรวมขยะสำหรับแคชดิสก์ (ดู #5139)
- ใช้บริการเอาต์พุตระยะไกลเพื่ออนุญาตให้ดาวน์โหลดเอาต์พุตบิลด์ที่กำหนดเองแบบเลซี่ (ดู #20933)
การย้ายข้อมูลกฎ Android, C++, Java, Python และ Proto
ดำเนินการย้ายข้อมูลชุดกฎ Android, C++, Java และ Python ไปยังที่เก็บข้อมูลเฉพาะและแยกชุดกฎออกจากรุ่น Bazel ให้เสร็จสมบูรณ์ ซึ่งจะช่วยให้ผู้ใช้ Bazel และผู้เขียนกฎสามารถทำสิ่งต่อไปนี้ได้
- อัปเดตกฎแยกต่างหากจาก Bazel
- อัปเดตและปรับแต่งกฎตามต้องการ
ตำแหน่งใหม่ของชุดกฎจะเป็น bazelbuild/rules_android, rules_cc, rules_java, rules_python และ google/protobuf rules_proto จะถูกเลิกใช้งาน
Bazel 8 จะมีแฟล็กการย้ายข้อมูลชั่วคราวที่จะใช้ชุดกฎที่เคยเป็นส่วนหนึ่งของไบนารีจากที่เก็บข้อมูลโดยอัตโนมัติ ผู้ใช้ชุดกฎเหล่านั้นทั้งหมดจะต้องใช้ที่เก็บข้อมูลและโหลดชุดกฎในลักษณะเดียวกับชุดกฎอื่นๆ ที่ไม่เคยเป็นส่วนหนึ่งของ Bazel
นอกจากนี้ Bazel 8 จะปรับปรุงกฎการขยายและ API กฎย่อยที่มีอยู่ รวมถึงทำเครื่องหมายกฎเหล่านั้นว่าไม่ใช่กฎทดลอง
การปรับปรุง Starlark
- มาโครเชิงสัญลักษณ์เป็นวิธีใหม่ในการเขียนมาโครที่ใช้งานง่ายสำหรับผู้ใช้
BUILDผู้เขียนมาโคร และเครื่องมือ มาโครเชิงสัญลักษณ์จะช่วยให้ผู้ใช้หลีกเลี่ยงข้อผิดพลาดที่พบบ่อยและบังคับใช้แนวทางปฏิบัติแนะนำได้ดีกว่ามาโครเดิมที่ Bazel มีข้อมูลเชิงลึกที่จำกัด - ตัวสรุปแพ็กเกจเป็นฟีเจอร์ที่เสนอให้เพิ่มการสนับสนุนระดับเฟิร์สคลาสสำหรับตรรกะการตรวจสอบแพ็กเกจที่กำหนดเอง โดยมีจุดประสงค์เพื่อช่วยให้เราเลิกใช้งาน
native.existing_rules()
ความสามารถในการกำหนดค่า
- การแมปเส้นทางเอาต์พุตยังคงมีเสถียรภาพ ซึ่งจะช่วยปรับปรุงประสิทธิภาพของแคชระยะไกลและความเร็วในการบิลด์สำหรับผู้ออกแบบกฎที่ใช้การเปลี่ยนสถานะ
- ตั้งค่าแฟล็กบิลด์ที่เหมาะกับ
--platformsที่ระบุโดยอัตโนมัติ - กำหนดชุดค่าผสมของแฟล็กที่โปรเจ็กต์รองรับและสร้างเป้าหมายโดยอัตโนมัติด้วยแฟล็กเริ่มต้นโดยไม่ต้องตั้งค่า bazelrc
- ไม่ต้องวิเคราะห์บิลด์ใหม่ทุกครั้งที่แฟล็กบิลด์มีการเปลี่ยนแปลง
โปรเจ็กต์ Skyfocus - ลดโครงสร้างข้อมูลที่เก็บไว้
Bazel เก็บสถานะจำนวนมากไว้ใน RAM เพื่อให้บิลด์แบบเพิ่มทำงานได้รวดเร็ว อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์มักจะเปลี่ยนไฟล์ต้นฉบับเพียงส่วนเล็กๆ (เช่น แทบจะไม่เปลี่ยนทรัพยากร Dependency ภายนอกเลย) Skyfocus จะช่วยให้ Bazel มีวิธีทดลองในการทิ้งสถานะแบบเพิ่มที่ไม่จำเป็นและลดการใช้หน่วยความจำของ Bazel โดยที่ยังคงมอบประสบการณ์การใช้งานบิลด์แบบเพิ่มที่รวดเร็วเหมือนเดิม
ขอบเขตเริ่มต้นมีจุดมุ่งหมายเพื่อปรับปรุงเมตริกฮีปที่เก็บไว้เท่านั้น การลดฮีปสูงสุดเป็นสิ่งที่อาจเกิดขึ้นได้ แต่ไม่ได้รวมอยู่ในขอบเขตเริ่มต้น
อื่นๆ
- การติดตั้งแอปบนอุปกรณ์เคลื่อนที่ v3 ซึ่งเป็นแนวทางที่ง่ายกว่าและมีการดูแลรักษาที่ดีกว่าในการติดตั้งใช้งานแอปพลิเคชัน Android แบบเพิ่ม
- การเก็บรวบรวมขยะสำหรับแคชที่เก็บข้อมูลและ
install_baseของ Bazel - ลดค่าใช้จ่ายในการดำเนินการแซนด์บ็อกซ์
การสนับสนุน Bazel-JetBrains* IntelliJ IDEA
การอัปเดตปลั๊กอิน IntelliJ แบบเพิ่มเพื่อรองรับปลั๊กอิน JetBrains เวอร์ชันล่าสุด
โรดแมปนี้แสดงเป้าหมายแบบคร่าวๆ และไม่ควรนำไปใช้รับประกันผลลัพธ์ ลำดับความสำคัญอาจมีการเปลี่ยนแปลงเพื่อตอบสนองความคิดเห็นของนักพัฒนาซอฟต์แวร์และลูกค้า หรือโอกาสทางการตลาดใหม่ๆ
หากต้องการรับการแจ้งเตือนเกี่ยวกับฟีเจอร์ใหม่ๆ รวมถึงการอัปเดตโรดแมปนี้ ให้เข้าร่วมชุมชน Google Groups
*Copyright © 2022 JetBrains s.r.o. JetBrains และ IntelliJ เป็นเครื่องหมายการค้าจดทะเบียนของ JetBrains s.r.o