Penglihatan Bazel

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

Setiap developer software dapat mem-build, menguji, dan memaketkan project apa pun, dengan ukuran atau kompleksitas apa pun, secara efisien dengan alat yang mudah diterapkan dan diperluas.

  • Engineer dapat menganggap remeh dasar-dasar build. 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 ekstensi yang unik untuk kasus penggunaan mereka, tanpa harus membuat ulang plumbing dasar.

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

  • Project dapat diskalakan ke codebase berukuran berapa pun, dengan tim berukuran berapa pun. Pengujian inkremental yang cepat memungkinkan tim memvalidasi setiap perubahan sepenuhnya sebelum di-commit. Hal ini tetap berlaku meskipun repo berkembang, project mencakup beberapa repo, dan beberapa bahasa diperkenalkan. Infrastruktur tidak memaksa developer untuk menukar cakupan pengujian dengan kecepatan build.

Kami yakin Bazel memiliki potensi untuk memenuhi visi ini.

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

Karakteristik ini mendukung inkrementalitas yang aman (mem-build ulang hanya input yang diubah 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 melakukan paralelisasi 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 ekstensi sederhana — memungkinkannya diterapkan dengan mudah ke konteks apa pun.

Kompetensi inti Bazel

  1. Bazel mendukung build dan pengujian multibahasa, multiplatform. Anda dapat menjalankan satu perintah untuk mem-build dan menguji seluruh hierarki sumber, apa pun kombinasi bahasa dan platform yang Anda targetkan.
  2. Build Bazel cepat dan akurat. Setiap build dan pengujian dijalankan secara inkremental, di komputer developer dan di CI.
  3. Bazel menyediakan bahasa yang seragam dan dapat diperluas untuk menentukan build untuk bahasa atau platform apa pun.
  4. Bazel memungkinkan build Anda diskalakan dengan terhubung ke layanan cache dan eksekusi jarak jauh.
  5. Bazel berfungsi di semua platform pengembangan utama (Linux, MacOS, dan Windows).
  6. Kami memahami bahwa mengadopsi Bazel memerlukan upaya, tetapi adopsi bertahap mungkin dilakukan. Bazel memiliki antarmuka dengan alat standar de facto untuk bahasa/platform tertentu.

Melayani komunitas bahasa

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

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

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

Persyaratan kumpulan aturan yang baik

  1. Aturan harus mendukung pembuatan dan pengujian yang efisien untuk bahasa, termasuk cakupan kode.
  2. Aturan harus 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 dapat dioperasikan secara interoperabilitas, dengan mengikuti prinsip "Bazel sandwich".
  4. Aturan harus siap dieksekusi jarak jauh. Dalam praktiknya, ini berarti dapat dikonfigurasi menggunakan mekanisme toolchain.
  5. Aturan (dan Bazel) harus berinteraksi dengan IDE yang banyak digunakan untuk bahasa, jika ada.
  6. Aturan harus memiliki dokumentasi yang menyeluruh dan dapat digunakan, dengan materi pengantar untuk pengguna baru, dokumen komprehensif untuk pengguna ahli.

Setiap item ini penting dan hanya bersama-sama mereka dapat memberikan kompetensi Bazel untuk ekosistem tertentu.

Secara umum, hal ini juga memadai - setelah semuanya terpenuhi, Bazel sepenuhnya memberikan nilainya kepada anggota komunitas bahasa tersebut.