ภาพรวม
เนื่องจากโปรเจ็กต์ Bazel พัฒนาอย่างต่อเนื่องเพื่อตอบสนองความต้องการของคุณ เราจึงอยากแชร์ข้อมูลอัปเดตสำหรับปี 2024
แผนกลยุทธ์นี้อธิบายถึงโครงการริเริ่มในปัจจุบันและการคาดการณ์สำหรับอนาคตของการพัฒนา Bazel ซึ่งจะช่วยให้คุณเห็นลำดับความสำคัญในปัจจุบันและโปรเจ็กต์ที่กำลังดำเนินอยู่
รุ่น Bazel 8.0
เราวางแผนที่จะมอบการสนับสนุนระยะยาว (LTS) สำหรับ Bazel 8.0 ให้คุณในช่วงปลายปี 2024 เรามีแผนที่จะติดตั้งใช้งานฟีเจอร์ต่อไปนี้
Bzlmod: ระบบการจัดการทรัพยากร Dependency ภายนอก
Bzlmod จะแก้ไขข้อกําหนดเบื้องต้นแบบเปลี่ยนผ่านโดยอัตโนมัติ ซึ่งช่วยให้โครงการปรับขนาดได้อย่างรวดเร็วและประหยัดทรัพยากร
ใน Bazel 8 เราจะปิดใช้การรองรับ WORKSPACE โดยค่าเริ่มต้น (คุณจะยังเปิดใช้โดยใช้ --enable_workspace
ได้อยู่) ส่วนใน Bazel 9 เราจะนำการรองรับ WORKSPACE ออก ตั้งแต่ Bazel 7.1 เป็นต้นไป คุณสามารถตั้งค่า --noenable_workspace
เพื่อเลือกใช้ลักษณะการทำงานใหม่
Bazel 8.0 จะมีการปรับปรุงฟังก์ชันการจัดการทรัพยากรภายนอกของ Bazel หลายอย่าง ซึ่งรวมถึง
- คุณสามารถตั้งค่า Flag ใหม่
--enable_workspace
เป็นfalse
เพื่อปิดใช้ฟังก์ชันการทำงาน WORKSPACE โดยสมบูรณ์ - API การเฝ้าดูไดเรกทอรีใหม่ (ดู #21435 ซึ่งมาพร้อมกับ Bazel 7.1)
- ปรับปรุงรูปแบบการสร้างชื่อที่ถูกต้องของที่เก็บเพื่อให้แคชการดำเนินการต่างๆ ในการอัปเดตเวอร์ชันของข้อกำหนดได้ดีขึ้น (#21316, จัดส่งใน Bazel 7.1)
- แคชที่เก็บข้อมูลที่แชร์ที่ได้รับการปรับปรุง (ดู #12227)
- การรองรับผู้ให้บริการและโหมดออฟไลน์ - อนุญาตให้ผู้ใช้เรียกใช้บิลด์ที่มีข้อกําหนดเบื้องต้นที่ดาวน์โหลดไว้ล่วงหน้า (ดู#19563)
- ลดความขัดแย้งในการผสานในไฟล์ล็อก (#20396)
- MODULE.bazel ที่แบ่งกลุ่ม (#17880)
- อนุญาตให้ลบล้างที่เก็บข้อมูลที่สร้างขึ้นจากส่วนขยายของโมดูล (#19301)
- เอกสารประกอบที่ปรับปรุงใหม่ (เช่น #18030, #15821) รวมถึงคำแนะนำในการย้ายข้อมูลและเครื่องมือย้ายข้อมูล
การปรับปรุงการดำเนินการจากระยะไกล
- เพิ่มการรองรับการดำเนินการแบบอะซิงโครนัส ซึ่งจะเร่งการดำเนินการระยะไกลด้วยการเพิ่มการทำงานแบบขนานด้วย Flag
--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 จะมี Flag ย้ายข้อมูลชั่วคราวที่จะใช้ชุดกฎซึ่งก่อนหน้านี้เป็นส่วนหนึ่งของไบนารีจากที่เก็บข้อมูลโดยอัตโนมัติ ผู้ใช้ชุดกฎทั้งหมดคาดว่าจะใช้ที่เก็บข้อมูลของตนและโหลดชุดกฎเหล่านั้นในท้ายที่สุดในลักษณะเดียวกับชุดกฎอื่นๆ ที่ไม่ได้เป็นส่วนหนึ่งของ Bazel
Bazel 8 จะปรับปรุงกฎการขยายและ API ของกฎย่อยที่มีอยู่ รวมถึงทำเครื่องหมายว่าไม่ใช่เวอร์ชันทดลอง
การปรับปรุง Starlark
- มาโครเชิงสัญลักษณ์เป็นวิธีใหม่ในการเขียนมาโครที่เหมาะกับผู้ใช้ ผู้เขียนมาโคร และเครื่องมือต่างๆ มากกว่า
BUILD
เมื่อเทียบกับมาโครเดิมซึ่ง Bazel มีข้อมูลเชิงลึกเพียงเล็กน้อย มาโครสัญลักษณ์ช่วยให้ผู้ใช้หลีกเลี่ยงข้อผิดพลาดที่พบได้ทั่วไปและบังคับใช้แนวทางปฏิบัติแนะนำ - ตัวดำเนินการขั้นสุดท้ายของแพ็กเกจเป็นฟีเจอร์ที่เสนอเพื่อเพิ่มการรองรับระดับเฟิร์สคลาสสำหรับตรรกะการตรวจสอบแพ็กเกจที่กำหนดเอง ข้อมูลเหล่านี้มีไว้เพื่อช่วยเราเลิกใช้งาน
native.existing_rules()
ความสามารถในการกําหนดค่า
- การแมปเส้นทางเอาต์พุตยังคงมีเสถียรภาพมากขึ้นเรื่อยๆ ซึ่งจะเพิ่มประสิทธิภาพแคชระยะไกลและความเร็วในการสร้างให้กับนักออกแบบกฎที่ใช้ทรานซิชัน
- ตั้งค่า Flag การสร้างที่เหมาะสมกับ
--platforms
หนึ่งๆ โดยอัตโนมัติ - กำหนดชุดค่าผสมของ Flag ที่โปรเจ็กต์รองรับและสร้างเป้าหมายโดยอัตโนมัติด้วย Flag เริ่มต้นโดยไม่ต้องตั้งค่า bazelrc
- อย่าทำการวิเคราะห์บิลด์ซ้ำทุกครั้งที่การแจ้งว่าบิลด์ไม่ถูกต้องมีการเปลี่ยนแปลง
Project Skyfocus - minimize retained data structures
Bazel จะเก็บสถานะจำนวนมากไว้ใน RAM เพื่อสร้างแบบเพิ่มได้อย่างรวดเร็ว อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์มักจะเปลี่ยนแปลงไฟล์ต้นฉบับเพียงส่วนเล็กๆ (เช่น แทบไม่เคยเปลี่ยนแปลงไฟล์ใดไฟล์หนึ่งซึ่งต้องอาศัยภายนอก) เมื่อใช้ Skyfocus ทาง Bazel จะเสนอวิธีทดลองในการทิ้งสถานะการเพิ่มที่ไม่จำเป็นและลดพื้นที่หน่วยความจำของ Bazel ขณะเดียวกันก็ยังคงมอบประสบการณ์การสร้างแบบเพิ่มที่รวดเร็วเหมือนเดิม
ขอบเขตเริ่มต้นมีเป้าหมายเพื่อปรับปรุงเมตริกกองข้อมูลที่เก็บไว้เท่านั้น การลดกองขยะสูงสุดอาจเป็นไปได้ แต่ไม่ได้อยู่ในขอบเขตเริ่มต้น
อื่นๆ
- การติดตั้งบนอุปกรณ์เคลื่อนที่ v3 ซึ่งเป็นแนวทางที่ง่ายและดูแลรักษาได้ดีกว่าในการทยอยทำให้แอปพลิเคชัน Android ใช้งานได้
- การเก็บขยะสำหรับแคชของที่เก็บและ
install_base
ของ Bazel - ค่าใช้จ่ายเพิ่มเติมในการใช้แซนด์บ็อกซ์ลดลง
การรองรับ Bazel-JetBrains* IntelliJ IDEA
การอัปเดตปลั๊กอิน IntelliJ แบบค่อยเป็นค่อยไปเพื่อรองรับรุ่นล่าสุดของปลั๊กอิน JetBrains
แผนภาพนี้แสดงภาพเป้าหมายโดยสังเขป และไม่ควรถือเป็นการรับประกัน ลำดับความสำคัญอาจเปลี่ยนแปลงตามความคิดเห็นของนักพัฒนาแอปและลูกค้า หรือโอกาสใหม่ๆ ในตลาด
หากต้องการรับการแจ้งเตือนเกี่ยวกับฟีเจอร์ใหม่ๆ รวมถึงข้อมูลอัปเดตเกี่ยวกับแผนงานนี้ โปรดเข้าร่วมชุมชน Google Group
*ลิขสิทธิ์ © 2022 JetBrains s.r.o. JetBrains และ IntelliJ เป็นเครื่องหมายการค้าจดทะเบียนของ JetBrains s.r.o