-
Erfolge und Misserfolge von Ninja
- Vor etwa 9 Jahren veröffentlichte der Autor Ninja, ein Make ähnliches Build-System. Anfangs war ihm das peinlich, heute wird es jedoch weit verbreitet genutzt.
- Zu den wichtigsten Projekten, die Ninja verwenden, gehören Chrome, Android und das Meson-Projekt.
- Ninja ist das erfolgreichste Open-Source-Projekt des Autors: Es wurde 2011 veröffentlicht, 2014 übergab er die Eigentümerschaft, und inzwischen wurde es an den dritten Maintainer weitergereicht.
- Er lernte, dass in der Programmierung Architektur wichtiger ist als das Schreiben von Code und dass soziale Fragen noch wichtiger sind als Architektur.
-
Technische Details
- Ninja ist ein einfaches System, das gemäß den vorgegebenen Anforderungen Befehle ausführt.
- Ninja verarbeitet eine
ninja.build-Datei, prüft die Änderungszeiten von Dateien und führt die nötigen Befehle parallel aus.
- Im Vergleich zu Make hat Ninja weniger Funktionen in der Eingabe-Build-Sprache und konzentriert sich auf schnelle Ausführung.
- Ninja optimiert Pfadvergleiche, indem Eingabedateipfade auf Objekte im Speicher abgebildet werden.
-
Architektur-Notizen
- Die Graphdarstellung von Ninja verwendet einen bipartiten Graphen zwischen Dateien und Befehlen, um die Build-Struktur besser abzubilden.
- Zur Verarbeitung von C-Header-Abhängigkeiten werden zusätzliche Abhängigkeitsdaten verwendet.
- Ninja ist kein persistenter Daemon-Prozess, sondern beginnt bei jedem Lauf wieder von vorn.
- Da der Kernel den Dateistatus bereits zwischenspeichert, ist es im User Space kaum nötig, ihn noch einmal zu cachen.
- Ninja wurde auf Basis des Chrome-Builds entworfen und stößt in sehr großen Projekten auf Skalierungsprobleme.
-
Die Metapher des „Assemblers“
- Ninja implementiert nicht die Funktionen verschiedener Build-Systeme, sondern nur den Aktionsgraphen, sodass Nutzer andere Generatorprogramme wählen können.
- Dieses Design macht Ninja schnell und flexibel.
-
Die Bedeutung von Standardwerten
- Ninja führt Befehle standardmäßig parallel aus und ermöglicht dadurch sicherere parallele Builds als Make.
-
Geschwindigkeit
- Ninja konzentriert sich auf die Performance inkrementeller Builds in großen Codebasen, was die Zufriedenheit der Nutzer stark beeinflusst.
- Ninja verbraucht wenig CPU und verbessert dadurch auch die Gesamtleistung von Builds.
-
CMake
- Ninja ist gut in CMake integriert und wird dank dieser Integration für die Arbeit an LLVM verwendet.
-
Windows-Unterstützung
- Ninja funktioniert auch unter Windows, und viele frühe Nutzer waren Windows-Anwender.
-
Verwandte Arbeiten
- Das Design von Ninja wurde von Googles Build-System blaze/bazel inspiriert.
-
Open-Source-Wartung
- Open-Source-Wartung macht keinen Spaß, und es gab viele Forderungen und viel Kritik von Nutzern.
- Der Autor wollte mit Software Eindruck auf andere Hacker-Kollegen machen.
-
Abschließender Dank
- Er spricht den Maintainern und Beitragenden von Ninja seinen Dank aus.
1 Kommentare
Hacker-News-Kommentare
Es gibt die Ansicht, dass bei der Programmierung die Architektur wichtiger ist als das Schreiben von Code und dass soziale Fragen noch wichtiger sind als die Architektur.
Im Build-System von Android spielt Ninja eine große Rolle.
makefilesverwendet, später wurde es mit einem benutzerdefinierten deklarativen Build-System namenssoongkomplexer.kati, das Makefiles in Ninja-Build-Dateien umwandelt.Es gibt die Meinung, dass Google Forschung zu Latenz durchgeführt habe, und den Wunsch, dass diese Forschung veröffentlicht wird.
Bei der Verwendung von CMake werde Ninja wegen der C++20-Module weiterhin noch eine Zeit lang gebraucht.
Man sei von Ninja auf Samurai umgestiegen, und es habe sich in jeder Hinsicht verbessert.
Es gibt die Ansicht, dass zwischen Korrektheit, Komfort und Performance Kompromisse nötig sind und diese bewusst gewählt werden sollten.
Man habe Erfahrung mit Build-Systemen, und Ninja sei klein genug, um es in einer bevorzugten Programmiersprache implementieren zu können.
Man finde den Namen Ninja gut und meine, dass es Möglichkeiten gebe, es noch schneller zu machen.