अगर आपने एक मौजूदा C++ codebase विरासत में पाया है, तो क्या करना चाहिए?
- नई नौकरी शुरू करने, टीम बदलने, या अनुभवी सहकर्मी के जाने के बाद, आपको जटिल और अनोखी संरचना वाले बड़े C++ codebase की ज़िम्मेदारी मिल सकती है.
- बग फिक्स करने और नई features जोड़ने की ज़रूरत होती है, लेकिन codebase को नज़रअंदाज़ करना या हटा देना संभव नहीं होता. यह उस व्यक्ति के लिए महत्वपूर्ण है जो आपका वेतन देता है, इसलिए यह आपके लिए भी महत्वपूर्ण है.
पहला कदम: कोड को लोकल में चलाना
- कोड और build system में जितने कम बदलाव संभव हों, उतने ही करके उसे लोकल में चलाएँ. अभी बड़े पैमाने पर refactoring न करें.
गैर-ज़रूरी चीज़ें हटाना
- कंपनी या open source project जिन features का प्रचार और बिक्री करता है, उन्हें देने के लिए जो बिल्कुल आवश्यक नहीं है, उसे हटा दें.
प्रोजेक्ट को 21वीं सदी में लाना
- CI (continuous integration), linter, fuzzing, automatic formatting आदि जोड़ें.
क्रमिक code improvement
- कोड में छोटे और क्रमिक बदलाव करें. इसे बार-बार दोहराएँ ताकि application सुरक्षा, developer experience, correctness और performance के लिहाज़ से स्वीकार्य स्थिति में आ जाए.
memory-safe भाषा में आंशिक rewrite पर विचार
- अगर संभव हो, तो कोड के कुछ हिस्सों को memory-safe भाषा में फिर से लिखने पर विचार करें.
supported platforms को स्पष्ट करना
- README में आधिकारिक रूप से समर्थित <architecture>-<operating system> जोड़े लिखें. उदाहरण के लिए x86_64-linux या aarch64-darwin.
मशीनों पर build को काम करने लायक बनाना
- यह सुनिश्चित करें कि सभी supported platforms पर build भरोसेमंद और एकसमान तरीके से हो सके.
मशीनों पर tests पास कराना
- अगर tests नहीं हैं, तो कोड में बदलाव करने से पहले tests लिखें, उन्हें पास कराएँ, फिर वापस आएँ.
README में application को build और test करने का तरीका लिखना
- build और test के commands को इतना सरल बनाएँ कि गैर-विशेषज्ञ भी उन्हें आसानी से follow कर सकें.
build और test की गति बढ़ाने के लिए low-hanging fruit ढूँढना
- build system बदले बिना build और test की गति बढ़ाने के सरल तरीके खोजें.
गैर-ज़रूरी कोड हटाना
- compiler warnings और linter का उपयोग करके unused code खोजें और हटाएँ.
linter
- linter rules को लेकर अत्यधिक आसक्त हुए बिना, कुछ बुनियादी नियम जोड़ें और उन्हें development cycle में शामिल करें.
code formatting
- सही समय पर पूरे codebase पर एक बार में code style लागू करें और configuration को commit करें.
sanitizers
- sanitizers का उपयोग करके वास्तविक bugs और memory leaks का पता लगाएँ और उन्हें ठीक करें.
CI pipeline जोड़ना
- जो भी अच्छी चीज़ें सेट की गई हैं (linter, code formatting, tests आदि), उन्हें automate करें, और हर बदलाव पर production environment में binaries बनाएँ.
क्रमिक code improvement
- security, correctness, performance जैसे ठोस लक्ष्यों पर ध्यान दें, और 'clean code' जैसे व्यक्तिपरक मानकों से दूर रहें.
memory-safe भाषा में rewrite?
- यह अभी भी चल रहा काम है और इसमें कई सावधानियाँ हैं. इसे तभी करें जब उसके लिए स्पष्ट कारण हो.
निष्कर्ष
- जटिल legacy C++ codebase से बाहर निकलने के लिए एक ठोस, चरण-दर-चरण योजना प्रस्तुत करता है.
परिशिष्ट: dependency management
- C++ में dependency management वास्तव में नहीं होता, और अधिकांश लोग system package manager का उपयोग करते हैं. लेकिन यह अच्छा विचार नहीं है.
- dependency management पर लेखक की राय है कि git submodule और source compilation approach का उपयोग किया जाए.
GN⁺ की राय
- यह लेख C++ codebase विरासत में पाने वाले शुरुआती software engineers के लिए उपयोगी step-by-step guide देता है.
- legacy code को संभालना कई developers के लिए एक आम चुनौती है, और यह लेख ऐसी स्थिति में व्यावहारिक सलाह देता है.
- codebase सुधारने की प्रक्रिया में tests के महत्व पर ज़ोर देना अच्छी software development practices को दर्शाता है.
- dependency management पर लेखक की राय विवादास्पद हो सकती है, और वास्तविक projects में Conan या vcpkg जैसे आधुनिक package managers का सफलतापूर्वक उपयोग भी किया जाता है.
- तकनीक अपनाते समय project की प्रकृति और टीम के skill level को ध्यान में रखना चाहिए, और यह लेख ऐसे फैसले लेने के लिए एक अच्छा शुरुआती बिंदु दे सकता है.
1 टिप्पणियां
Hacker News राय
कुछ Hacker News टिप्पणियों में C++ प्रोजेक्ट विरासत में मिलने पर यह सलाह दी गई है:
-Wallविकल्प के साथ clean build करना: warnings को ठीक करके code की समस्याओं को सुधारें, और कभी-कभी उन्हें समझने के बाद warning को ignore करना भी संभव है.दूसरी टिप्पणियों में यह तर्क दिया गया है कि पहले CI, linting, auto-formatting आदि लागू करना महत्वपूर्ण है:
एक उपयोगकर्ता ने नई टीम या कंपनी में जाने का सुझाव दिया.
कुछ टिप्पणियों में code understanding tools और तकनीकों के महत्व का भी ज़िक्र है:
एक टिप्पणी में project को modernize करने के लिए CI, linters, fuzzing, auto-formatting आदि जोड़ने पर सलाह दी गई है:
एक अन्य टिप्पणी में memory-safe language में कुछ हिस्से दोबारा लिखने की सलाह की आलोचना की गई है:
कुछ टिप्पणियों में यह दावा भी किया गया है कि git submodules और source compilation का तरीका package manager से बेहतर है:
ये टिप्पणियाँ C++ प्रोजेक्ट विरासत में मिलने पर अलग-अलग approaches और सलाह देती हैं, और project management, code understanding, refactoring, तथा modernization strategy पर विभिन्न दृष्टिकोण दिखाती हैं.