ภาพรวม
เมื่อโปรเจ็กต์ Bazel พัฒนาอย่างต่อเนื่องเพื่อตอบสนองความต้องการของคุณ เราจึงต้องการ แชร์ข้อมูลอัปเดตปี 2024 กัน
แผนงานนี้จะอธิบายถึงโครงการริเริ่มและการคาดการณ์ในอนาคตของ การพัฒนา Bazel ช่วยให้คุณเห็นลำดับความสำคัญในปัจจุบันและที่กำลังเกิดขึ้น โปรเจ็กต์
รุ่น Bazel 8.0
เราวางแผนที่จะให้บริการสนับสนุนในระยะยาวของ Bazel 8.0 (LTS) ให้คุณในช่วงปลายปี 2024 เรามีแผนที่จะนำฟีเจอร์ต่อไปนี้มาใช้
Bzlmod: ระบบการจัดการทรัพยากร Dependency ภายนอก
Bzlmod แก้ทรานซิทีฟโดยอัตโนมัติ ทรัพยากร Dependency ได้ ทำให้โครงการปรับขนาดได้ในขณะที่ยังคงรวดเร็ว การใช้ทรัพยากรอย่างมีประสิทธิภาพ
เมื่อใช้ Bazel 8 เราจะปิดใช้การสนับสนุน WORKSPACE โดยค่าเริ่มต้น
ที่จะเปิดใช้งานโดยใช้ --enable_workspace
) พร้อม Bazel 9 WORKSPACE
ระบบจะนำการสนับสนุนออก เริ่มต้นด้วย Bazel 7.1 คุณสามารถ
--noenable_workspace
เพื่อเลือกใช้ลักษณะการทำงานใหม่
Bazel 8.0 จะมีการปรับปรุงหลายประการสำหรับ การจัดการทรัพยากร Dependency ภายนอกของ Bazel ซึ่งรวมถึง
- สามารถตั้งค่า Flag ใหม่
--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) และการย้ายข้อมูล และเครื่องมือในการย้ายข้อมูล
ปรับปรุงการดำเนินการจากระยะไกล
- เพิ่มการรองรับการดำเนินการแบบไม่พร้อมกันเพื่อให้การดำเนินการระยะไกลเร็วขึ้น
เพิ่มการทำงานพร้อมกันด้วย Flag
--jobs
- ช่วยให้แก้ไขข้อบกพร่องของแคชที่พลาดไปได้ง่ายขึ้นด้วยบันทึกการดำเนินการใหม่แบบกะทัดรัด ลดขนาดลง 100 เท่าและค่าใช้จ่ายในรันไทม์อย่างมาก (โปรดดู #18643)
- ใช้การรวบรวมขยะสำหรับดิสก์แคช (โปรดดู #5139)
- ใช้บริการเอาต์พุตระยะไกลเพื่ออนุญาตการดาวน์โหลดบิลด์ที่กำหนดเองแบบ Lazy Loading (โปรดดู #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 จะระบุ Flag การย้ายข้อมูลชั่วคราวซึ่งจะใช้ ชุดกฎที่ก่อนหน้านี้เป็นส่วนหนึ่งของไบนารีจากที่เก็บ ทั้งหมด ผู้ใช้ชุดกฎเหล่านั้นจะขึ้นอยู่กับ และโหลดที่เก็บในลักษณะเดียวกับชุดกฎอื่นๆ ที่ไม่เคยเป็นส่วนหนึ่งของ Bazel
นอกจากนี้ Bazel 8 จะปรับปรุงกฎการขยายและ API ของกฎย่อยที่มีอยู่และ ให้ทำเครื่องหมายเป็น "ไม่ใช่การทดสอบ"
การปรับปรุง Starlark
- มาโครสัญลักษณ์เป็นวิธีการใหม่ในการเขียนมาโครที่เป็นมิตรกับ
ผู้ใช้
BUILD
ผู้เขียนมาโคร และเครื่องมือ เมื่อเทียบกับมาโครเดิม Bazel มีข้อมูลเชิงลึกเกี่ยวกับมาโครเพียงเล็กน้อยเท่านั้น มาโครสัญลักษณ์ช่วยผู้ใช้หลีกเลี่ยง ข้อผิดพลาดและบังคับใช้แนวทางปฏิบัติแนะนำ - ขั้นสุดท้ายของแพ็กเกจคือฟีเจอร์ที่เสนอสำหรับการเพิ่มการสนับสนุนชั้นหนึ่งสำหรับ
ตรรกะการตรวจสอบแพ็กเกจที่กำหนดเอง ซึ่งมีจุดมุ่งหมายเพื่อช่วยเราในการเลิกใช้งาน
native.existing_rules()
ความสามารถในการกำหนดค่า
- การแมปเส้นทางเอาต์พุตยังคงเสถียร: สัญญาว่าแคชระยะไกลจะดีขึ้น ประสิทธิภาพการทำงาน และสร้างความเร็วสำหรับนักออกแบบกฎที่ใช้การเปลี่ยน
- ตั้งค่าแฟล็กบิลด์ที่เหมาะกับ
--platforms
ที่ระบุโดยอัตโนมัติ - ระบุชุด Flag ที่รองรับโปรเจ็กต์และสร้างเป้าหมายโดยอัตโนมัติ ด้วยแฟล็กเริ่มต้นโดยไม่ต้องตั้งค่า bazelrcs
- อย่าทำการวิเคราะห์บิลด์ซ้ำทุกครั้งที่แฟล็กของบิลด์เปลี่ยนแปลง
Project SkyFocus - ลดโครงสร้างข้อมูลที่เก็บรักษาไว้
Bazel มีหลายสถานะใน RAM สำหรับบิลด์ที่เพิ่มขึ้นอย่างรวดเร็ว อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์มักจะเปลี่ยนแปลงไฟล์ต้นฉบับส่วนย่อยเล็กๆ (เช่น แทบไม่เคยเปลี่ยน ทรัพยากร Dependency ภายนอกรายการใดรายการหนึ่ง) ด้วย SkyFocus ที่ Bazel จะมอบ วิธีทดลองในการทิ้งสถานะที่เพิ่มขึ้นที่ไม่จำเป็นและลดหน่วยความจำของ Bazel ไปพร้อมๆ กับการสร้างประสบการณ์ การใช้งานที่เพิ่มขึ้นอย่างรวดเร็วเหมือนเดิม
ขอบเขตเริ่มต้นมีวัตถุประสงค์เพื่อปรับปรุงเมตริกฮีปที่เก็บรักษาไว้เท่านั้น ฮีปพีค ก็เป็นไปได้ แต่ไม่ได้รวมอยู่ในขอบเขตเริ่มต้น
อื่นๆ
- การติดตั้งบนอุปกรณ์เคลื่อนที่ v3 ซึ่งเป็นวิธีที่ง่ายขึ้นและได้รับการดูแลมากขึ้นโดยค่อยๆ เพิ่มขึ้น ทำให้แอปพลิเคชัน Android ใช้งานได้
- การเก็บรวบรวมขยะสำหรับแคชที่เก็บและ
install_base
ของ Bazel - ลดค่าใช้จ่ายในการดำเนินการแซนด์บ็อกซ์
การสนับสนุน IntelliJ IDEA ของ Bazel-JetBrains*
การอัปเดตปลั๊กอิน IntelliJ ที่เพิ่มขึ้นเพื่อรองรับปลั๊กอิน JetBrains ล่าสุด
สแนปชอตแผนกลยุทธ์นี้จะกำหนดเป้าหมาย และไม่ควรนำมาใช้เป็นการรับประกันแต่อย่างใด ลำดับความสำคัญอาจเปลี่ยนแปลงได้ตามนักพัฒนาและลูกค้า ความคิดเห็น หรือโอกาสใหม่ทางการตลาด
โปรดเข้าร่วม Google Group
*ลิขสิทธิ์ © 2022 JetBrains s.r.o. JetBrains และ IntelliJ เป็นเครื่องหมายการค้าจดทะเบียนของ JetBrains s.r.o