10 पॉइंट द्वारा GN⁺ 2024-11-26 | 3 टिप्पणियां | WhatsApp पर शेयर करें
  • बिना किसी dialect वाले एकल C++ का सपना अब बहुत पहले ही खत्म हो चुका लगता है
  • Reddit, वह नारंगी रंग की वेबसाइट (HN), और आधिकारिक C++ standards committee की बैठकों में C++ के भविष्य पर बहुत बहस चल रही है

C++ की वर्तमान स्थिति

  • C++ Evolution Working Group (EWG) ने P3466 R0 को अपनाने पर सहमति दी है।
    • ABI (Application Binary Interface) तोड़े बिना C और पुराने C++ के साथ link compatibility बनाए रखी जाती है।
    • 'viral annotations' का उपयोग नहीं किया जाता।
    • ABI breakage और zero-overhead principle जैसे परस्पर टकराने वाले लक्ष्यों पर कायम रहा जाता है।
  • अमेरिकी सरकार ने C++ का उपयोग बंद करने की सिफारिश की है।
    • CISA, NSA, White House सहित कई संस्थाओं ने memory-unsafe languages के उपयोग पर चेतावनी जारी की है।
  • बड़ी tech कंपनियाँ Rust अपना रही हैं।
    • Microsoft, Google, AWS आदि Rust का उपयोग कर रहे हैं।
    • Google ने C++/Rust interoperability tools तक विकसित किए हैं
  • C++ community के भीतर आंतरिक संघर्ष
    • Herb Sutter के Microsoft छोड़ने और MSVC के C++23 features लागू करने में धीमे होने की खबर है।
    • Google, C++ development process में अपनी भागीदारी घटा रहा है और अपनी खुद की C++ successor language विकसित कर रहा है।
    • मौजूदा C++ standards committee process पर भरोसे की कमी
    • modules feature अब भी अधूरी अवस्था में है
    • 'safety profiles(‘Safety Profiles’)' एक अजीब स्थिति में हैं

C++ की दो संस्कृतियाँ

  • आधुनिक और automated tools का उपयोग करने वाला समूह
    • Google जैसी बड़ी tech कंपनियाँ इसके प्रमुख उदाहरण हैं
    • यह नवीनतम C++ standards (C++17 और आगे) का उपयोग करता है, और automated build तथा test tools का support रखता है
    • code quality बनाए रखने में निवेश करता है और codebase को लगातार modernize करता है
  • legacy C++ समूह
    • ऐसे codebase जो पुराने environments और tools पर चलते हैं
    • source code के बिना चलते हैं या जिनके build systems पुराने हैं
    • maintenance cost अधिक है और modernization की बाधाएँ बड़ी हैं
  • मुख्य अंतर tools और process का है
    • आधुनिक C++ समूह integrated build systems, static analyzers, formatters, linters जैसे tools पर निर्भर करता है
    • legacy समूह, इन tools और processes की कमी के कारण, कम operational efficiency के साथ काम करता है

परिणाम और प्रभाव

  • safety profiles
    • उद्देश्य यह है कि मौजूदा legacy code में बदलाव किए बिना सुरक्षा को मजबूत किया जाए
    • आधुनिक C++ की जरूरतों की तुलना में मौजूदा code को बनाए रखने पर अधिक फोकस
  • modules
    • इस तरह डिज़ाइन किए गए हैं कि header files को आसानी से modules के रूप में import किया जा सके
    • legacy code के साथ compatibility को ध्यान में रखकर डिज़ाइन किए गए हैं
  • C++ community का विभाजन
    • आधुनिक और legacy समूहों की requirements में असंगति के कारण community के भीतर टकराव गहरा रहा है
    • C++ standards committee का conservative approach इन टकरावों को कम करने की कोशिश जैसा दिखता है

वैकल्पिक दृष्टिकोण

  • Safe C++ जैसे वैकल्पिक विचारों का community के भीतर स्वागत नहीं हो रहा है
  • यह आलोचना भी मौजूद है कि standards committee के कुछ सदस्य अपने व्यक्तिगत aesthetic मानदंडों पर अड़े रहते हैं और बदलाव का विरोध करते हैं

3 टिप्पणियां

 
aer0700 2024-11-27

Rust के लिए GUI development का ecosystem अभी नहीं है, इसलिए इसे अपनाया नहीं जा पा रहा है.
उम्मीद है कि Rust इस्तेमाल करने वाला कोई अच्छा GUI framework सामने आए...

 
ndrgrd 2024-11-26

मुझे नहीं पता कि Rust, C++ की जगह ले सकता है या नहीं,
लेकिन यह सच है कि नए C++ प्रोजेक्ट लगभग दिखाई ही नहीं देते...
लगता है कि C++ समिति ने रूपांतरण की बजाय उसके मूल मूल्य को अधिक महत्व देने वाली दिशा को सही माना है।

 
GN⁺ 2024-11-26
Hacker News राय
  • Google का C++ कोड अक्सर नवीनतम versions पर काम नहीं करता, और कई बार developers इसे ठीक करने की इच्छा भी नहीं रखते। इसका कारण यह है कि Google का कोड पुराने और आधुनिक के बीच के एक मध्य बिंदु पर अटका हुआ है

    • Google के C++ कोड में state machines और manual weak pointers की वजह से memory corruption हो सकता है
    • Google के C++ ecosystem से बाहर जाने को सकारात्मक रूप से देखता है
    • मानता है कि Rust ecosystem में Google की दिलचस्पी सकारात्मक नहीं होगी
  • C++ standard पर काम करने वालों को मौजूदा C++ दिशा का समर्थन करने और C++ के भविष्य को लेकर ऑनलाइन शोर को नज़रअंदाज़ करने की सलाह देता है

    • जो लोग Rust का उपयोग करके static lifetime checking चाहते हैं, उन्हें Rust इस्तेमाल करने की सिफारिश करता है
    • अगर आप government contractor हैं, तो Rust इस्तेमाल करने का सुझाव देता है
    • दावा करता है कि मौजूदा C++ development process अच्छी तरह काम कर रही है
  • दावा करता है कि C++ इस्तेमाल करने वाला एकमात्र समूह वही बचेगा जिसके पास इतना बड़ा legacy codebase है कि उसे refactor करना संभव नहीं है

    • WG21 पर भरोसा खो चुके दूसरे समूह नई languages की ओर जा रहे हैं
    • Herb Sutter ने कहा कि C++ में lifetime annotations जोड़ना दूसरी languages की ओर एक "exit ramp" बना देगा
  • Rust के edition system को बहुत अच्छी तरह काम करने वाला मानता है

    • सुझाव देता है कि अगर C++ में भी ऐसा system लाया जाए, तो module boundaries पर कुछ सीमाएँ हो सकती हैं, लेकिन यह दोनों गुटों को संतुष्ट करने का तरीका बन सकता है
  • चिंता जताता है कि Herb Sutter के Microsoft छोड़ने की खबर का Microsoft पर अच्छा असर नहीं पड़ेगा

    • मानता है कि Herb ने C++ standard adoption को आगे बढ़ाया और बेहतर भविष्य की vision के लिए काम किया
    • Microsoft के प्रस्ताव std::span का range checking को छोड़कर अपनाया जाना उल्लेख करता है, और दावा करता है कि Herb की मेहनत ज़रूरी थी
  • ज़ोर देता है कि automated testing ही दोनों गुटों को अलग करने वाला मुख्य तत्व है

    • समझाता है कि legacy C++ apps में अगर automated testing नहीं है, तो code changes से app के टूटने का जोखिम रहता है
    • चेतावनी देता है that C++ की प्रकृति के कारण देखने में हानिरहित code changes भी समस्याएँ पैदा कर सकते हैं
  • दावा करता है कि C++ की आकर्षण-शक्ति घटाने वाला मुख्य कारण modules की अनुपस्थिति थी

    • मानता है कि अगर modules होते, तो C++ community बन सकती थी
  • तुलना करता है कि Herb Sutter समझौता कराने में कुशल थे, जबकि Google ने अपना agenda आगे बढ़ाया

  • उल्लेख करता है कि बड़े codebases वाले ग्राहक कड़े नियमों को पूरा करने के लिए अपने code का 1% भी बदलना नहीं चाहते

    • दावा करता है कि कई कंपनियाँ नए standards पर upgrade करने में समय लगा रही हैं
  • समझाता है कि Python और Javascript/Node/Typescript में भी कई गुट मौजूद हैं

    • मानता है कि Rust ने ऐसे गुटों से बचने की कोशिश की, लेकिन इससे learning curve बढ़ गया
    • उल्लेख करता है कि Go ने गुटबाज़ी रोकने और व्यापक adoption पाने की कोशिश की, लेकिन उसे generics लाने पड़े