-
Ninja'nın başarıları ve başarısızlıkları
- Yaklaşık 9 yıl önce yazar, Make'e benzer bir build sistemi olan Ninja'yı duyurdu. İlk başta utanç verici gelse de bugün yaygın biçimde kullanılıyor.
- Ninja'yı kullanan başlıca projeler arasında Chrome, Android ve Meson projesi bulunuyor.
- Ninja, yazarın en başarılı açık kaynak projesi oldu; 2011'de duyuruldu, 2014'te sahipliği devredildi ve bugün üçüncü bakımcıya aktarılmış durumda.
- Yazar, programlamada kod yazmaktan mimarinin, mimariden de sosyal meselelerin daha önemli olduğunu öğrendi.
-
Teknik ayrıntılar
- Ninja, verilen gereksinimlere göre komutları çalıştıran basit bir sistemdir.
- Ninja,
ninja.build dosyasını alır, dosyaların değiştirilme zamanlarını kontrol eder ve gerekli komutları paralel olarak çalıştırır.
- Make ile karşılaştırıldığında Ninja, girdi build dilinde daha az özelliğe sahiptir ve hızlı çalışmaya odaklanır.
- Ninja, yol karşılaştırmalarını optimize etmek için girdi dosya yollarını bellek nesnelerine eşler.
-
Mimari notlar
- Ninja'nın grafik temsili, build yapısını daha iyi yakalamak için dosyalar ve komutlar arasında iki parçalı bir grafik kullanır.
- C header bağımlılıklarını işlemek için ek bağımlılık verileri kullanır.
- Ninja kalıcı bir daemon süreci değildir; her çalıştırmada işe baştan başlar.
- Dosya durumu zaten çekirdek tarafından önbelleğe alındığından, kullanıcı alanında bunu yeniden önbelleğe almanın neredeyse gereği yoktur.
- Ninja, Chrome'un build'i temel alınarak tasarlandı ve büyük ölçekli projelerde ölçeklenebilirlik sorunları yaşıyor.
-
'Assembler' mecazı
- Ninja, çeşitli build sistemlerinin özelliklerini uygulamak yerine yalnızca eylem grafiğini uygular; böylece kullanıcıların başka üreteç programları seçmesine imkân tanır.
- Bu tasarım Ninja'yı hızlı ve esnek kılar.
-
Varsayılanların önemi
- Ninja, komutları varsayılan olarak paralel çalıştırır; bu da Make'e kıyasla paralel build'leri daha güvenli hâle getirir.
-
Hız
- Ninja, büyük kod tabanlarında artımlı build performansına odaklandı ve bu kullanıcı memnuniyeti üzerinde büyük etki yarattı.
- Ninja daha az CPU kullanır; bu da genel build performansını iyileştirir.
-
CMake
- Ninja, CMake ile iyi entegre oldu ve bu entegrasyon sayesinde LLVM çalışmalarında kullanıldı.
-
Windows desteği
- Ninja, Windows'ta da çalışır ve ilk kullanıcılarının çoğu Windows kullanıcısıydı.
-
İlgili çalışmalar
- Ninja'nın tasarımı, Google'ın build sistemi blaze/bazel'den ilham aldı.
-
Açık kaynak bakımı
- Açık kaynak bakımı keyifli değildir; kullanıcılardan çok sayıda talep ve eleştiri geldi.
- Yazar, yazılım aracılığıyla hacker meslektaşlarını etkilemek istediğini söylüyor.
-
Son teşekkür
- Yazar, Ninja'nın bakımcılarına ve katkıda bulunanlara teşekkür ediyor.
1 yorum
Hacker News görüşü
Programlamada kod yazmaktan çok mimarinin, mimariden de çok sosyal meselelerin daha önemli olduğu yönünde bir görüş var
Android'in build sisteminde Ninja'nın rolü büyük
soongadlı özel bir deklaratif build sistemiyle işler daha karmaşık hale geldikatiyi geliştirdiGoogle'ın latency üzerine araştırma yürüttüğü ve bu araştırmanın yayımlanmasını umdukları yönünde bir görüş var
CMake kullanırken C++20 modülleri için Ninja gerektiğinden, bir süre daha kullanılacağı yönünde bir görüş var
Ninja yerine Samurai'ye geçtiklerini ve her açıdan daha iyi olduğunu söylüyorlar
Doğruluk, kullanım kolaylığı ve performans arasında bir ödünleşim gerektiği ve bunun bilinçli olarak seçilmesi gerektiği yönünde bir görüş var
Build sistemleri konusunda deneyimleri olduğunu ve Ninja'nın, sevdikleri programlama dilinde yeniden yazabilecek kadar küçük olduğunu söylüyorlar
Ninja'nın adını beğendiklerini ve onu daha hızlı yapmanın yolları olduğunu söylüyorlar