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

รายงานปัญหา ดูซอร์สโค้ด รุ่น Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

ภาพรวม

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