2 पॉइंट द्वारा GN⁺ 2024-11-30 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2024-11-30
Hacker News टिप्पणियाँ
  • एक राय है कि प्रोग्रामिंग में कोड लिखने से ज़्यादा architecture महत्वपूर्ण है, और architecture से भी ज़्यादा social issues महत्वपूर्ण हैं

    • कहा गया कि यह लंबे समय से मन में रही सोच को बहुत अच्छे से व्यक्त करता है
  • Android के build system में Ninja की भूमिका बड़ी है

    • शुरुआत में makefiles का इस्तेमाल किया गया था, लेकिन soong नाम के एक custom declarative build system के कारण यह जटिल हो गया
    • Google ने Makefiles को Ninja build files में बदलने के लिए kati विकसित किया
    • Ninja में बदलाव करने में समय लगता है, लेकिन बदलाव के बाद यह तेज़ी से काम करता है
  • एक राय है कि Google ने latency पर research की थी, और उम्मीद है कि यह research सार्वजनिक हो

  • एक राय है कि CMake इस्तेमाल करते समय C++20 modules के लिए Ninja चाहिए, इसलिए कुछ समय तक इसका इस्तेमाल होता रहेगा

  • Ninja की जगह Samurai पर स्विच किया गया, और कहा गया कि हर तरह से सुधार हुआ

    • माना गया कि build system को सभी inputs का hash निकालना चाहिए और यह जाँचना चाहिए कि वे registry में मौजूद हैं या नहीं
  • एक राय है कि correctness, convenience, और performance के बीच समझौता ज़रूरी है, और इसे जानबूझकर चुना जाना चाहिए

    • कहा गया कि convenience के लिए correctness छोड़ने वाले tools भी अधिक सही ecosystem बना सकते हैं
  • build systems का अनुभव होने की बात कही गई, और कहा गया कि Ninja इतना छोटा है कि इसे अपनी पसंदीदा programming language में implement किया जा सकता है

    • पूछा गया कि क्या अपना build system बनाने के लिए कोई step-by-step tutorial है
  • कहा गया कि Ninja का नाम अच्छा है, और इसे और तेज़ बनाने के तरीके हो सकते हैं

    • समझाया गया कि यह tool जानबूझकर पिछले run की state को बनाए नहीं रखता