Roadmap Bazel

Ringkasan

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

Roadmap ini menjelaskan inisiatif saat ini dan prediksi untuk masa depan pengembangan Bazel, sehingga Anda dapat melihat prioritas saat ini dan proyek 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 menyelesaikan dependensi transitif, sehingga project dapat diskalakan sekaligus tetap cepat dan efisien dalam penggunaan 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 Bazel 7.1, Anda dapat menetapkan --noenable_workspace untuk memilih ikut serta dalam 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 menonaktifkan fungsi WORKSPACE sepenuhnya.
  • API pemantauan direktori baru (lihat #21435, dikirimkan di Bazel 7.1).
  • Skema yang ditingkatkan untuk membuat nama repositori kanonis agar tindakan dapat di-cache dengan lebih baik di seluruh update versi dependensi. (#21316, dikirim di Bazel 7.1)
  • Cache repositori bersama yang ditingkatkan (lihat #12227).
  • Dukungan mode offline dan vendor — memungkinkan pengguna menjalankan build dengan dependensi yang telah didownload sebelumnya (lihat #19563).
  • Mengurangi konflik penggabungan dalam file kunci (#20396).
  • MODULE.bazel yang tersegmentasi (#17880)
  • Mengizinkan penggantian repositori yang dibuat ekstensi modul (#19301)
  • Peningkatan dokumentasi (misalnya, #18030, #15821) serta panduan migrasi dan alat migrasi.

Peningkatan eksekusi jarak jauh

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

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

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

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

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

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

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

Peningkatan Starlark

  • Makro Simbolik adalah cara baru untuk menulis makro yang lebih mudah digunakan oleh pengguna BUILD, penulis makro, dan alat. Dibandingkan dengan makro lama, yang hanya memiliki insight terbatas di Bazel, makro simbolis membantu pengguna menghindari kesalahan umum dan menerapkan praktik terbaik.
  • Finalizer paket adalah fitur yang diusulkan untuk menambahkan dukungan kelas satu bagi logika validasi paket kustom. Tindakan ini dimaksudkan untuk membantu kami 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 yang sesuai untuk --platforms tertentu secara otomatis.
  • Tentukan kombinasi flag yang didukung project dan buat target secara otomatis dengan flag default tanpa harus menyetel bazelrc.
  • Jangan ulangi analisis build setiap kali tanda build berubah.

Project Skyfocus - meminimalkan struktur data yang dipertahankan

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 menghilangkan 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 mungkin terjadi, tetapi tidak termasuk dalam cakupan awal.

Lain-lain

  • Penginstalan seluler v3, pendekatan yang lebih sederhana dan lebih terpelihara untuk men-deploy aplikasi Android secara bertahap.
  • Pengumpulan sampah untuk cache repositori dan install_base Bazel.
  • Mengurangi overhead sandbox.

Dukungan IntelliJ IDEA untuk Bazel-JetBrains*

Update plugin IntelliJ inkremental untuk mendukung rilis plugin JetBrains terbaru.

Peta jalan ini menampilkan target, 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 peta jalan ini — bergabunglah dengan komunitas Grup Google.

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