แผนกลยุทธ์ของ 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 จะมีการปรับปรุงฟังก์ชันการทำงานต่างๆ สำหรับการจัดการทรัพยากร Dependency ภายนอกของ Bazel ซึ่งได้แก่

  • คุณสามารถตั้งค่าแฟล็ก --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)
  • ใช้บริการเอาต์พุตระยะไกลเพื่ออนุญาตให้ดาวน์โหลดเอาต์พุตบิลด์ที่กำหนดเองได้ (ดู #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 8 จะปรับปรุงกฎที่ขยายและ API กฎย่อยที่มีอยู่ แล้วทำเครื่องหมายว่าไม่ใช่การทดสอบ

การปรับปรุง Starlark

  • มาโครสัญลักษณ์เป็นวิธีใหม่ในการเขียนมาโครที่เป็นมิตรต่อผู้ใช้ BUILD ผู้เขียนมาโคร และเครื่องมือ เมื่อเปรียบเทียบกับมาโครแบบเดิมที่บาเซลมีข้อมูลเชิงลึกที่จำกัด มาโครสัญลักษณ์จะช่วยให้ผู้ใช้หลีกเลี่ยงหลุมพรางที่พบได้บ่อยและบังคับใช้แนวทางปฏิบัติแนะนำ
  • การสรุปแพ็กเกจเป็นฟีเจอร์ที่เสนอเพื่อเพิ่มการรองรับชั้นหนึ่งสำหรับตรรกะการตรวจสอบแพ็กเกจที่กำหนดเอง ซึ่งมีจุดประสงค์เพื่อช่วยเราเลิกใช้งาน native.existing_rules()

การกำหนดค่า

  • การแมปเส้นทางเอาต์พุตจะยังคงเสถียรต่อไป โดยให้สัญญาว่าจะได้รับประสิทธิภาพการทำงานของแคชระยะไกลที่ดีขึ้นและความเร็วที่ดีขึ้นสำหรับผู้ออกแบบกฎที่ใช้การเปลี่ยน
  • ตั้งค่าแฟล็กบิลด์ที่เหมาะสมสำหรับ --platforms ที่ระบุโดยอัตโนมัติ
  • กำหนดชุดค่าผสมแฟล็กที่โปรเจ็กต์สนับสนุนและสร้างเป้าหมายโดยอัตโนมัติด้วยแฟล็กเริ่มต้นโดยไม่ต้องตั้งค่า bazelrcs
  • อย่าทำซ้ำการวิเคราะห์บิลด์ทุกครั้งที่แฟล็กบิลด์มีการเปลี่ยนแปลง

Project SkyFocus - ลดโครงสร้างข้อมูลที่เก็บรักษาให้เหลือน้อยที่สุด

Bazel เก็บสถานะจำนวนมากใน RAM สำหรับบิลด์ที่เพิ่มขึ้นอย่างรวดเร็ว อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์มักจะเปลี่ยนชุดย่อยของไฟล์ต้นฉบับ (เช่น แทบไม่มีทรัพยากร Dependency ภายนอกเลย) 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