Penglihatan Bazel

Laporkan masalah Lihat sumber Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Setiap developer software dapat membangun, menguji, dan mengemas project apa pun, dengan ukuran atau kompleksitas apa pun, secara efisien dengan alat yang mudah diadopsi dan diperluas.

  • Engineer dapat menganggap remeh dasar-dasar pembangunan. Developer software berfokus pada proses kreatif penulisan kode karena proses mekanis build dan pengujian telah diselesaikan. Saat menyesuaikan sistem build untuk mendukung bahasa baru atau kebutuhan organisasi yang unik, pengguna berfokus pada aspek ekstensibilitas yang unik untuk kasus penggunaan mereka, tanpa harus menciptakan kembali infrastruktur dasar.

  • Engineer dapat dengan mudah berkontribusi pada proyek apa pun. Developer yang ingin mulai mengerjakan project baru cukup meng-clone project dan menjalankan build. Tidak perlu konfigurasi lokal - semuanya beres begitu saja. Dengan eksekusi jarak jauh lintas platform, mereka dapat bekerja di mesin mana pun di mana saja dan menguji sepenuhnya perubahan mereka terhadap semua platform yang ditargetkan project. Engineer dapat dengan cepat mengonfigurasi build untuk project baru atau memigrasikan build yang ada secara inkremental.

  • Project dapat diskalakan ke codebase berukuran berapa pun, tim berukuran berapa pun. Pengujian inkremental yang cepat memungkinkan tim memvalidasi sepenuhnya setiap perubahan sebelum dilakukan. Hal ini tetap berlaku meskipun repositori bertambah besar, proyek mencakup beberapa repositori, dan beberapa bahasa diperkenalkan. Infrastruktur tidak memaksa developer untuk mengorbankan cakupan pengujian demi kecepatan build.

Kami yakin Bazel berpotensi untuk mewujudkan visi ini.

Bazel dibangun dari awal untuk memungkinkan build yang dapat direproduksi (serangkaian input tertentu akan selalu menghasilkan output yang sama) dan portabel (build dapat dijalankan di perangkat mana pun tanpa memengaruhi output).

Karakteristik ini mendukung inkrementalitas yang aman (membangun ulang hanya input yang berubah tidak menimbulkan risiko kerusakan) dan kemampuan distribusi (tindakan build diisolasi dan dapat di-offload). Dengan meminimalkan pekerjaan yang diperlukan untuk melakukan build yang benar dan memparalelkan pekerjaan tersebut di beberapa core dan sistem jarak jauh, Bazel dapat mempercepat build apa pun.

Lapisan abstraksi Bazel — petunjuk khusus untuk bahasa, platform, dan toolchain yang diterapkan dalam bahasa ekstensibilitas sederhana — memungkinkan Bazel diterapkan dengan mudah ke konteks apa pun.

Kompetensi inti Bazel

  1. Bazel mendukung build dan pengujian multi-bahasa, multi-platform. Anda dapat menjalankan satu perintah untuk membangun dan menguji seluruh struktur sumber, terlepas dari kombinasi bahasa dan platform yang Anda targetkan.
  2. Build Bazel cepat dan benar. Setiap build dan pengujian berjalan secara inkremental, di komputer developer Anda dan di CI.
  3. Bazel menyediakan bahasa yang seragam dan dapat diperluas untuk menentukan build bagi bahasa atau platform apa pun.
  4. Bazel memungkinkan build Anda diskala dengan terhubung ke layanan eksekusi jarak jauh dan caching.
  5. Bazel berfungsi di semua platform pengembangan utama (Linux, MacOS, dan Windows).
  6. Kami memahami bahwa mengadopsi Bazel memerlukan upaya, tetapi adopsi bertahap dapat dilakukan. Bazel berinteraksi dengan alat standar de facto untuk bahasa/platform tertentu.

Melayani komunitas bahasa

Rekayasa software berkembang dalam konteks komunitas bahasa — biasanya, kelompok orang yang mengatur diri sendiri yang menggunakan alat dan praktik umum.

Agar bermanfaat bagi anggota komunitas bahasa, aturan Bazel berkualitas tinggi yang terintegrasi dengan alur kerja dan konvensi komunitas tersebut harus tersedia.

Bazel berkomitmen untuk dapat diperluas dan terbuka, serta mendukung kumpulan aturan yang baik untuk bahasa apa pun.

Persyaratan set aturan yang baik

  1. Aturan harus mendukung pembuatan dan pengujian yang efisien untuk bahasa, termasuk cakupan kode.
  2. Aturan perlu berinteraksi dengan "pengelola paket" yang banyak digunakan untuk bahasa (seperti Maven untuk Java), dan mendukung jalur migrasi inkremental dari sistem build lain yang banyak digunakan.
  3. Aturan harus dapat diperluas dan beroperasi, dengan mengikuti prinsip "sandwich Bazel".
  4. Aturan harus siap untuk eksekusi jarak jauh. Dalam praktiknya, ini berarti dapat dikonfigurasi menggunakan mekanisme toolchain.
  5. Aturan (dan Bazel) perlu berinteraksi dengan IDE yang banyak digunakan untuk bahasa tersebut, jika ada.
  6. Aturan harus memiliki dokumentasi yang menyeluruh dan dapat digunakan, dengan materi pengantar untuk pengguna baru, dan dokumentasi komprehensif untuk pengguna ahli.

Setiap item ini sangat penting dan hanya jika digabungkan, item-item ini akan memenuhi kompetensi Bazel untuk ekosistem tertentu.

Secara umum, persyaratan ini juga sudah cukup. Setelah semua persyaratan terpenuhi, Bazel akan memberikan nilai sepenuhnya kepada anggota komunitas bahasa tersebut.