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

ภาพรวม

เนื่องจากโปรเจ็กต์ 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 ซึ่งรวมถึง

  • ตั้งค่าแฟล็กใหม่ --enable_workspace เป็น false เพื่อปิดใช้ฟังก์ชันการทำงานของ WORKSPACE โดยสมบูรณ์
  • API การดูไดเรกทอรีใหม่ (ดู #21435 ซึ่งจัดส่งใน Bazel 7.1)
  • ปรับปรุงรูปแบบการสร้างชื่อที่เก็บ Canonical เพื่อให้แคชการดำเนินการได้ดียิ่งขึ้นเมื่อมีการอัปเดตเวอร์ชันการอ้างอิง (#21316, จัดส่งใน Bazel 7.1)
  • แคชที่เก็บข้อมูลที่แชร์ที่ได้รับการปรับปรุง (ดู #12227)
  • การรองรับโหมดผู้ให้บริการและโหมดออฟไลน์ - ช่วยให้ผู้ใช้เรียกใช้บิลด์ที่มี การขึ้นต่อกันที่ดาวน์โหลดไว้ล่วงหน้า (ดู #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
  • ไม่ต้องวิเคราะห์บิลด์ใหม่ทุกครั้งที่เปลี่ยนแฟล็กบิลด์

Project Skyfocus - ลดโครงสร้างข้อมูลที่เก็บไว้

Bazel เก็บสถานะจำนวนมากไว้ใน RAM เพื่อให้บิลด์แบบเพิ่มทำงานได้อย่างรวดเร็ว อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์มักจะเปลี่ยนแปลงชุดย่อยเล็กๆ ของไฟล์ต้นฉบับ (เช่น แทบจะไม่ มีการเปลี่ยนแปลงการอ้างอิงภายนอก) เมื่อใช้ Skyfocus Bazel จะมี วิธีทดลองในการทิ้งสถานะที่เพิ่มขึ้นที่ไม่จำเป็นและลดการใช้หน่วยความจำของ Bazel ในขณะที่ยังคงมอบประสบการณ์การสร้างแบบเพิ่มที่รวดเร็วเช่นเดิม

ขอบเขตเริ่มต้นมีเป้าหมายเพื่อปรับปรุงเมตริกฮีปที่เก็บไว้เท่านั้น การลดฮีปสูงสุดอาจเป็นไปได้ แต่ไม่ได้รวมอยู่ในขอบเขตเริ่มต้น

อื่นๆ

  • การติดตั้งบนอุปกรณ์เคลื่อนที่ v3 ซึ่งเป็นแนวทางที่ง่ายขึ้นและได้รับการดูแลรักษาที่ดีขึ้นในการ ติดตั้งใช้งานแอปพลิเคชัน Android แบบเพิ่มทีละรายการ
  • การเก็บขยะสำหรับแคชที่เก็บข้อมูลและ install_base ของ Bazel
  • ลดค่าใช้จ่ายในการแซนด์บ็อกซ์

การรองรับ Bazel-JetBrains* IntelliJ IDEA

การอัปเดตปลั๊กอิน IntelliJ แบบเพิ่มทีละรายการเพื่อรองรับปลั๊กอิน JetBrains เวอร์ชันล่าสุด

แผนงานนี้แสดงภาพรวมของเป้าหมาย และไม่ควรนำไปใช้เป็นสิ่งรับประกัน ลำดับความสำคัญอาจเปลี่ยนแปลงได้ตามความคิดเห็นของนักพัฒนาแอปและลูกค้า หรือโอกาสใหม่ๆ ในตลาด

หากต้องการรับการแจ้งเตือนเกี่ยวกับฟีเจอร์ใหม่ๆ รวมถึงข้อมูลอัปเดตเกี่ยวกับแผนงานนี้ โปรดเข้าร่วมชุมชน Google Group

*Copyright © 2022 JetBrains s.r.o. JetBrains และ IntelliJ เป็นเครื่องหมายการค้าจดทะเบียนของ JetBrains s.r.o