-
Keberhasilan dan kegagalan Ninja
- Sekitar 9 tahun lalu, penulis memperkenalkan Ninja, sebuah sistem build yang mirip dengan Make. Awalnya terasa memalukan, tetapi kini sudah digunakan secara luas.
- Proyek-proyek utama yang menggunakan Ninja antara lain Chrome, Android, dan proyek Meson.
- Ninja adalah proyek open source penulis yang paling sukses; dirilis pada 2011, kepemilikannya diserahkan pada 2014, dan kini telah diteruskan kepada pemelihara ketiga.
- Penulis belajar bahwa dalam pemrograman, arsitektur lebih penting daripada menulis kode, dan persoalan sosial lebih penting daripada arsitektur.
-
Detail teknis
- Ninja adalah sistem sederhana yang menjalankan perintah sesuai persyaratan yang diberikan.
- Ninja menerima berkas
ninja.build, memeriksa waktu modifikasi berkas, lalu menjalankan perintah yang diperlukan secara paralel.
- Dibandingkan dengan Make, Ninja memiliki lebih sedikit fitur pada bahasa build inputnya dan berfokus pada eksekusi yang cepat.
- Ninja mengoptimalkan perbandingan path dengan memetakan path berkas input ke objek di memori.
-
Catatan arsitektur
- Representasi graf Ninja menggunakan graf bipartit antara berkas dan perintah untuk menangkap struktur build dengan lebih baik.
- Untuk menangani dependensi header C, digunakan data dependensi tambahan.
- Ninja bukan proses daemon yang persisten, dan pada setiap eksekusi bekerja dari awal.
- Status berkas pada dasarnya sudah di-cache oleh kernel, sehingga hampir tidak perlu di-cache ulang di ruang pengguna.
- Ninja dirancang berdasarkan build Chrome, dan mengalami masalah skalabilitas pada proyek berskala besar.
-
Metafora 'assembler'
- Ninja tidak mengimplementasikan fitur dari berbagai sistem build, melainkan hanya mengimplementasikan graf aksi sehingga pengguna dapat memilih program generator lain.
- Desain ini membuat Ninja cepat dan fleksibel.
-
Pentingnya default
- Secara default, Ninja menjalankan perintah secara paralel, sehingga dapat melakukan build paralel dengan lebih aman daripada Make.
-
Kecepatan
- Ninja berfokus pada performa incremental build untuk codebase besar, dan ini sangat memengaruhi kepuasan pengguna.
- Ninja menggunakan CPU lebih sedikit sehingga performa build secara keseluruhan juga meningkat.
-
CMake
- Ninja terintegrasi dengan baik dengan CMake, dan integrasi ini membuatnya digunakan untuk pekerjaan LLVM.
-
Dukungan Windows
- Ninja juga berjalan di Windows, dan banyak pengguna awalnya adalah pengguna Windows.
-
Pekerjaan terkait
- Desain Ninja terinspirasi oleh blaze/bazel, sistem build milik Google.
-
Pemeliharaan open source
- Memelihara open source bukanlah hal yang menyenangkan, dan ada banyak tuntutan serta kritik dari para pengguna.
- Penulis ingin membuat rekan-rekan hacker terkesan melalui perangkat lunak yang dibuatnya.
-
Ucapan terima kasih penutup
- Penulis menyampaikan terima kasih kepada para pemelihara dan kontributor Ninja.
1 komentar
Pendapat Hacker News
Ada pendapat bahwa dalam pemrograman, arsitektur lebih penting daripada penulisan kode, dan isu sosial lebih penting daripada arsitektur
Peran Ninja sangat besar dalam build system Android
Ada pendapat yang berharap Google merilis penelitian yang mereka lakukan tentang latensi
Ada pendapat bahwa saat menggunakan CMake, Ninja akan tetap dipakai untuk sementara waktu karena dibutuhkan untuk modul C++20
Beralih dari Ninja ke Samurai, dan dikatakan bahwa ini merupakan peningkatan dalam segala hal
Ada pendapat bahwa diperlukan kompromi antara akurasi, kemudahan, dan performa, dan pilihan itu harus dibuat secara sengaja
Ada pengalaman dengan build system, dan Ninja dikatakan cukup kecil hingga bisa diimplementasikan dalam bahasa pemrograman favorit siapa pun
Nama Ninja dianggap bagus, dan disebutkan bahwa ada cara untuk membuatnya lebih cepat