Roadmap Bazel

Laporkan masalah Lihat sumber Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Ringkasan

Seiring dengan terus berkembangnya project Bazel sebagai respons terhadap kebutuhan Anda, kami ingin membagikan info terbaru untuk tahun 2024.

Roadmap ini menjelaskan inisiatif dan prediksi saat ini untuk pengembangan Bazel di masa mendatang, sehingga Anda dapat melihat prioritas saat ini dan project yang sedang berlangsung.

Rilis Bazel 8.0

Kami berencana menghadirkan dukungan jangka panjang (LTS) Bazel 8.0 kepada Anda pada akhir tahun 2024. Fitur berikut direncanakan untuk diterapkan.

Bzlmod: sistem pengelolaan dependensi eksternal

Bzlmod secara otomatis me-resolve dependensi transitif, sehingga project dapat diskalakan sekaligus tetap cepat dan hemat resource.

Dengan Bazel 8, kami akan menonaktifkan dukungan WORKSPACE secara default (Anda masih dapat mengaktifkannya menggunakan --enable_workspace); dengan Bazel 9, dukungan WORKSPACE akan dihapus. Mulai dari Bazel 7.1, Anda dapat menetapkan --noenable_workspace untuk menggunakan perilaku baru.

Bazel 8.0 akan berisi sejumlah peningkatan pada fungsi pengelolaan dependensi eksternal Bazel, termasuk:

  • Flag baru --enable_workspace dapat disetel ke false untuk sepenuhnya menonaktifkan fungsi WORKSPACE.
  • API pemantauan direktori baru (lihat #21435, dikirim di Bazel 7.1).
  • Skema yang ditingkatkan untuk membuat nama repositori kanonis agar tindakan dapat disimpan dalam cache dengan lebih baik di seluruh update versi dependensi. (#21316, dikirim di Bazel 7.1)
  • Cache repositori bersama yang ditingkatkan (lihat #12227).
  • Dukungan vendor dan mode offline — memungkinkan pengguna menjalankan build dengan dependensi yang didownload sebelumnya (lihat #19563).
  • Mengurangi konflik penggabungan dalam file kunci (#20396).
  • MODULE.bazel yang tersegmentasi (#17880)
  • Mengizinkan penggantian repositori yang dihasilkan ekstensi modul (#19301)
  • Dokumentasi yang ditingkatkan (misalnya, #18030, #15821) serta panduan migrasi dan alat migrasi.

Peningkatan eksekusi jarak jauh

  • Menambahkan dukungan untuk eksekusi asinkron, mempercepat eksekusi jarak jauh dengan meningkatkan paralelisme dengan tanda --jobs.
  • Memudahkan proses debug cache yang tidak terpakai dengan log eksekusi ringkas baru, yang mengurangi ukurannya sebesar 100x dan overhead runtime-nya secara signifikan (lihat #18643).
  • Terapkan pembersihan sampah memori untuk cache disk (lihat #5139).
  • Mengimplementasikan layanan output jarak jauh untuk memungkinkan download lambat output build arbitrer (lihat #20933).

Migrasi aturan Android, C++, Java, Python, dan Proto

Menyelesaikan migrasi kumpulan aturan Android, C++, Java, dan Python ke repositori khusus dan memisahkannya dari rilis Bazel. Upaya ini memungkinkan pengguna dan penulis aturan Bazel untuk

  • Memperbarui aturan secara terpisah dari Bazel.
  • Perbarui dan sesuaikan aturan sesuai kebutuhan.

Lokasi baru kumpulan aturan adalah bazelbuild/rules_android, rules_cc, rules_java, rules_python, dan google/protobuf. rules_proto tidak akan digunakan lagi.

Bazel 8 akan memberikan tanda migrasi sementara yang akan otomatis menggunakan kumpulan aturan yang sebelumnya merupakan bagian dari biner dari repositorinya. Semua pengguna kumpulan aturan tersebut diharapkan pada akhirnya bergantung pada repositori mereka dan memuat aturan tersebut dengan cara yang sama seperti kumpulan aturan lain yang tidak pernah menjadi bagian dari Bazel.

Bazel 8 juga akan meningkatkan aturan ekstensi dan API subaturan yang ada serta menandainya sebagai non-eksperimental.

Peningkatan Starlark

  • Makro Simbolik adalah cara baru untuk menulis makro yang lebih mudah bagi pengguna BUILD, penulis makro, dan alat. Dibandingkan dengan makro lama, yang hanya memiliki insight terbatas di Bazel, makro simbolis membantu pengguna menghindari perangkap umum dan menerapkan praktik terbaik.
  • Finalizer paket adalah fitur yang diusulkan untuk menambahkan dukungan kelas satu untuk logika validasi paket kustom. Fungsi ini dimaksudkan untuk membantu kita menghentikan penggunaan native.existing_rules().

Kemampuan Konfigurasi

  • Pemetaan jalur output terus stabil: menjanjikan performa cache jarak jauh dan kecepatan build yang lebih baik bagi desainer aturan yang menggunakan transisi.
  • Menetapkan flag build secara otomatis yang sesuai untuk --platforms tertentu.
  • Tentukan kombinasi flag yang didukung project dan build target secara otomatis dengan flag default tanpa harus menetapkan bazelrc.
  • Jangan ulangi analisis build setiap kali flag build berubah.

Project Skyfocus - minimize retained data structures

Bazel menyimpan banyak status di RAM untuk build inkremental yang cepat. Namun, developer sering mengubah sebagian kecil file sumber (misalnya, hampir tidak pernah salah satu dependensi eksternal). Dengan Skyfocus, Bazel akan menyediakan cara eksperimental untuk menghapus status inkremental yang tidak perlu dan mengurangi jejak memori Bazel, sekaligus tetap memberikan pengalaman build inkremental yang cepat.

Cakupan awal hanya bertujuan untuk meningkatkan metrik heap yang dipertahankan. Pengurangan heap puncak adalah kemungkinan, tetapi tidak disertakan dalam cakupan awal.

Lain-lain

  • Penginstalan seluler v3, pendekatan yang lebih sederhana dan lebih baik dikelola untuk men-deploy aplikasi Android secara bertahap.
  • Pembersihan sampah memori untuk cache repositori dan install_base Bazel.
  • Mengurangi overhead sandboxing.

Dukungan IntelliJ IDEA Bazel-JetBrains*

Update plugin IntelliJ inkremental untuk mendukung rilis plugin JetBrains terbaru.

Ringkasan roadmap ini menargetkan, dan tidak boleh dianggap sebagai jaminan. Prioritas dapat berubah sebagai respons terhadap masukan developer dan pelanggan, atau peluang pasar baru.

Untuk mendapatkan notifikasi tentang fitur baru — termasuk update pada roadmap ini — bergabunglah dengan komunitas Google Grup.

*Hak Cipta © 2022 JetBrains s.r.o. JetBrains dan IntelliJ adalah merek dagang terdaftar dari JetBrains s.r.o