2 poin oleh GN⁺ 2024-11-30 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-11-30
Pendapat Hacker News
  • Ada pendapat bahwa dalam pemrograman, arsitektur lebih penting daripada penulisan kode, dan isu sosial lebih penting daripada arsitektur

    • Ini dianggap sebagai ungkapan yang tepat untuk pemikiran yang sudah lama ada di benak
  • Peran Ninja sangat besar dalam build system Android

    • Pada awalnya menggunakan makefiles, tetapi kemudian menjadi lebih kompleks dengan build system deklaratif kustom bernama soong
    • Google mengembangkan kati yang mengonversi Makefiles menjadi file build Ninja
    • Peralihan ke Ninja memerlukan waktu, tetapi setelah beralih, sistem berjalan dengan cepat
  • 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

    • Menurut mereka, build system perlu menghitung hash dari semua input dan memeriksa apakah input tersebut ada di registri
  • Ada pendapat bahwa diperlukan kompromi antara akurasi, kemudahan, dan performa, dan pilihan itu harus dibuat secara sengaja

    • Dikatakan bahwa alat yang mengorbankan akurasi demi kemudahan justru bisa menciptakan ekosistem yang lebih akurat
  • Ada pengalaman dengan build system, dan Ninja dikatakan cukup kecil hingga bisa diimplementasikan dalam bahasa pemrograman favorit siapa pun

    • Mereka penasaran apakah ada tutorial bertahap untuk membuat build system sendiri
  • Nama Ninja dianggap bagus, dan disebutkan bahwa ada cara untuk membuatnya lebih cepat

    • Dijelaskan bahwa alat ini sengaja tidak mempertahankan status dari eksekusi sebelumnya