-
Ninja की सफलताएँ और विफलताएँ
- लगभग 9 साल पहले, लेखक ने Make जैसे build system Ninja की घोषणा की थी। शुरुआत में यह थोड़ा शर्मनाक लगा, लेकिन अब इसका व्यापक उपयोग हो रहा है.
- Ninja का उपयोग करने वाले प्रमुख प्रोजेक्ट्स में Chrome, Android और Meson प्रोजेक्ट शामिल हैं.
- Ninja लेखक का सबसे सफल open source प्रोजेक्ट है; इसे 2011 में जारी किया गया, 2014 में इसकी मालिकाना जिम्मेदारी सौंपी गई, और अब यह तीसरे maintainer तक पहुँच चुका है.
- लेखक ने सीखा कि programming में code लिखने से architecture अधिक महत्वपूर्ण है, और architecture से भी social issues अधिक महत्वपूर्ण हैं.
-
तकनीकी विवरण
- Ninja एक सरल system है जो दिए गए requirements के अनुसार commands चलाता है.
- Ninja
ninja.build फ़ाइल लेता है, फ़ाइलों के modification time की जाँच करता है, और ज़रूरी commands को parallel में चलाता है.
- Make की तुलना में Ninja की input build language में कम features हैं, और इसका फोकस तेज़ execution पर है.
- Ninja input file paths को memory objects से map करता है ताकि path comparison को optimize किया जा सके.
-
आर्किटेक्चर नोट्स
- Ninja का graph representation files और commands के बीच bipartite graph का उपयोग करता है, जिससे build structure को बेहतर ढंग से कैप्चर किया जाता है.
- C header dependencies को संभालने के लिए अतिरिक्त dependency data का उपयोग किया जाता है.
- Ninja कोई persistent daemon process नहीं है, बल्कि हर execution में शुरुआत से काम करता है.
- फ़ाइल state kernel पहले से cache करता है, इसलिए user space में उसे फिर से cache करने की लगभग ज़रूरत नहीं होती.
- Ninja को Chrome के build के आधार पर डिज़ाइन किया गया था, और यह बड़े प्रोजेक्ट्स में scalability समस्याओं का सामना कर रहा है.
-
'assembler' रूपक
- Ninja विभिन्न build systems की सुविधाएँ लागू करने के बजाय केवल action graph लागू करता है, ताकि उपयोगकर्ता किसी दूसरे generator program को चुन सकें.
- यह डिज़ाइन Ninja को तेज़ और flexible बनाता है.
-
defaults का महत्व
- Ninja डिफ़ॉल्ट रूप से commands को parallel में चलाता है, जिससे Make की तुलना में parallel build अधिक सुरक्षित ढंग से किया जा सकता है.
-
गति
- Ninja का फोकस बड़े codebase की incremental build performance पर था, और इसका उपयोगकर्ता संतुष्टि पर बड़ा प्रभाव पड़ा.
- Ninja कम CPU उपयोग करता है, जिससे overall build performance भी बेहतर होती है.
-
CMake
- Ninja, CMake के साथ अच्छी तरह integrate हुआ, और इसी integration के माध्यम से इसका उपयोग LLVM कार्य में हुआ.
-
Windows समर्थन
- Ninja Windows पर भी काम करता है, और इसके कई शुरुआती उपयोगकर्ता Windows उपयोगकर्ता थे.
-
संबंधित कार्य
- Ninja का डिज़ाइन Google के build system blaze/bazel से प्रेरित था.
-
open source रखरखाव
- Open source maintenance सुखद नहीं था, और उपयोगकर्ताओं की माँगें तथा आलोचनाएँ बहुत थीं.
- लेखक सॉफ़्टवेयर के माध्यम से अपने साथी hackers को प्रभावित करना चाहता था.
-
अंतिम धन्यवाद
- Ninja के maintainers और contributors को धन्यवाद दिया गया है.
1 टिप्पणियां
Hacker News टिप्पणियाँ
एक राय है कि प्रोग्रामिंग में कोड लिखने से ज़्यादा architecture महत्वपूर्ण है, और architecture से भी ज़्यादा social issues महत्वपूर्ण हैं
Android के build system में Ninja की भूमिका बड़ी है
एक राय है कि Google ने latency पर research की थी, और उम्मीद है कि यह research सार्वजनिक हो
एक राय है कि CMake इस्तेमाल करते समय C++20 modules के लिए Ninja चाहिए, इसलिए कुछ समय तक इसका इस्तेमाल होता रहेगा
Ninja की जगह Samurai पर स्विच किया गया, और कहा गया कि हर तरह से सुधार हुआ
एक राय है कि correctness, convenience, और performance के बीच समझौता ज़रूरी है, और इसे जानबूझकर चुना जाना चाहिए
build systems का अनुभव होने की बात कही गई, और कहा गया कि Ninja इतना छोटा है कि इसे अपनी पसंदीदा programming language में implement किया जा सकता है
कहा गया कि Ninja का नाम अच्छा है, और इसे और तेज़ बनाने के तरीके हो सकते हैं