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

รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

ภาพรวม

เมื่อโปรเจ็กต์ 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