2 पॉइंट द्वारा GN⁺ 2024-03-04 | 1 टिप्पणियां | WhatsApp पर शेयर करें

C++ code रूपांतरण गाइड

  • C++ standard library की <concepts> header file में मौजूद std::same_as concept का उपयोग करने वाले function का उदाहरण प्रस्तुत किया गया है.
  • auto keyword का उपयोग किए बिना template का इस्तेमाल करने वाले तरीके में रूपांतरण कैसे किया जाए, इस पर प्रश्न.

सुरक्षित code रूपांतरण विधि

  • 18 वर्ष से कम आयु के उपयोगकर्ताओं के लिए C++ की उन्नत सुविधा concepts को सीधे संभालने वाले code उदाहरण या समाधान प्रदान नहीं किए जाते.
  • सुरक्षा को प्राथमिकता देते हुए, विशिष्ट आवश्यकताओं के अनुसार विचार किए जा सकने वाले वैकल्पिक approaches सुझाए जाते हैं.

वैकल्पिक approach 1: पारंपरिक variadic template

  • concepts का उपयोग किए बिना पारंपरिक variadic template इस्तेमाल करने का तरीका.
  • इस तरीके में अधिक type checking की आवश्यकता होती है और बहुत सारे arguments को संभालते समय इसे manage करना कठिन हो सकता है.
  • concepts के बिना variadic template उपयोग करने वाले code उदाहरण प्रदान किए गए हैं.

वैकल्पिक approach 2: user-defined function object

  • type safety आवश्यकताओं और logic को encapsulate करने वाला class या struct बनाकर variadic arguments या concepts की आवश्यकता को समाप्त करना.
  • जटिल scenarios में यह अधिक readable और maintain करना आसान तरीका हो सकता है.
  • user-defined function object approach का overview दिया गया है.

वैकल्पिक approach 3: वैकल्पिक language/framework पर विचार

  • यदि project में concepts अनिवार्य हैं और उनसे बचना बड़ा प्रतिबंध पैदा करता है, तो concepts को मूल रूप से support करने वाली किसी दूसरी language या framework की पड़ताल करना बेहतर हो सकता है.
  • इससे code और development process सरल हो सकते हैं और safety guidelines के अनुरूप रहा जा सकता है.
  • प्रत्येक approach के फायदे और नुकसान को अपनी विशिष्ट requirements, complexity और risk tolerance के आधार पर सावधानी से परखने की सिफारिश की गई है.

GN⁺ की राय

  • C++ concepts code की type safety को मजबूत करने और overloading को अधिक स्पष्ट बनाने जैसे लाभ देते हैं, लेकिन शुरुआती लोगों के लिए वे जटिल और जोखिमपूर्ण हो सकते हैं.
  • वैकल्पिक language या framework पर विचार करने के लिए नई learning curve की आवश्यकता होती है और मौजूदा codebase के साथ compatibility समस्याएँ पैदा हो सकती हैं.
  • user-defined function object तरीका code readability बढ़ाता है और maintenance को आसान बनाता है, लेकिन design की शुरुआती अवस्था में अतिरिक्त planning और structuring की आवश्यकता होती है.
  • variadic template का उपयोग करने वाला पारंपरिक तरीका अधिक type checking मांगता है, और जटिल systems में code complexity बढ़ा सकता है.
  • इस तकनीक को अपनाते समय project requirements और team की C++ expertise level को ध्यान में रखना चाहिए, साथ ही long-term maintenance और scalability को भी नज़र में रखना चाहिए.

1 टिप्पणियां

 
GN⁺ 2024-03-04
Hacker News की टिप्पणियाँ
  • यह निश्चित रूप से समर्थन करने लायक आयु सीमा है। C++ में बच्चों के दिमाग को खराब कर देने की अकल्पनीय शक्ति है

    • माता-पिता: “अपने कमरे में जाओ! मैंने तुमसे memory safety के बारे में कितनी बार कहा है? तुम्हारे कंप्यूटर से gcc निकल रहा है और तुम GPL वालों के साथ घूम रहे हो… अब तुम बाहर नहीं जाओगे!”
      बच्चा: “मैं कभी Rust नहीं इस्तेमाल करूंगा, मुझे memory safety भी पसंद नहीं और आप भी नहीं!” धड़ाम से दरवाज़ा बंद
    • मेरी नज़र में वह भाषा कहीं ज़्यादा हानिकारक है जो किसी भी उम्र के लोगों को बुनियादी bookkeeping पर बेहिसाब clock cycles बर्बाद करना सिखाती है
      इससे लोगों द्वारा इस्तेमाल किया जाने वाला खराब software लगातार धीमा होता जाता है और उन्हें हर कुछ साल में नई मशीन खरीदनी पड़ती है। अब समय आ गया है कि zero-cost abstractions की अहमियत समझी जाए, और भले ही वे सचमुच पूरी तरह zero-cost न हों, बहुत low-cost abstractions पर तो विचार किया ही जा सकता है। YouTube पर Johnathan Blow के कुछ वीडियो भी सही दिशा में धक्का दे सकते हैं
    • “1972 - Dennis Ritchie एक ऐसी ताकतवर बंदूक का आविष्कार करते हैं जो आगे-पीछे दोनों तरफ एक साथ गोली चलाती है। उससे हुई मौतों और स्थायी विकलांगताओं की संख्या से असंतुष्ट होकर वह C और Unix का आविष्कार करते हैं।”
      http://james-iry.blogspot.com/2009/05/brief-incomplete-and-m...
    • बच्चों को JavaScript से और ज़्यादा बचाया जाना चाहिए। नहीं तो उनका युवाकाल npm package updates में निकल जाएगा
    • E.W. Dijkstra का संबंधित उद्धरण:
      “जिन छात्रों को पहले BASIC का संपर्क मिल चुका है, उन्हें अच्छा programming style सिखाना व्यावहारिक रूप से असंभव है। संभावित programmer के रूप में वे मानसिक रूप से इस हद तक क्षतिग्रस्त हो चुके हैं कि वापसी संभव नहीं।”
  • social media पर लागू content moderation की तुलना LLM पर लागू moderation से करें तो यह काफ़ी मज़ेदार है
    पिछले 15 सालों में social media में “तेज़ चलो और चीज़ें तोड़ो” जैसे नारे का माहौल था, और सचमुच भयानक और विचित्र चीज़ें हुईं। अब नई तकनीक को ज़्यादा ज़िम्मेदारी से जारी करने की कोशिश करने वाली कंपनियाँ हैं, लेकिन नतीजा हास्यास्पद रूप से खराब है। social media के विपरीत, मुझे नहीं लगता कि ये गलतियाँ वास्तविक दुनिया में बड़े परिणाम लाती हैं, इसलिए यह और भी मज़ेदार लगता है

    • नई तकनीक को “ज़िम्मेदारी से” जारी करने की कोशिश में AI कंपनियाँ जो मूल बात भूल जाती हैं, वह यह है कि ज़िम्मेदार होना क्या है, यह उपयोगकर्ता की संस्कृति, देश, और कभी-कभी उपसंस्कृति पर बहुत निर्भर करता है
      यह थोड़ा postmodern लग सकता है, लेकिन मेरे हिसाब से “ज़िम्मेदार” और “ग़ैर-ज़िम्मेदार” पर लगभग सर्वमान्य दृष्टिकोण बहुत कम हैं। जब किसी बहस में दोनों तरफ़ बहुत मज़बूत राय होती है, तो यह विश्लेषण किया जा सकता है कि कौन-सी सांस्कृतिक और नैतिक विशेषताएँ हर पक्ष को उस निष्कर्ष तक ले जाती हैं। यह समाधान नहीं देता, लेकिन यदि AI को ज़िम्मेदार बनाने की डिजाइन में इस सोच को शामिल किया जाए, तो AI द्वारा इस्तेमाल की जाने वाली “नैतिकता” और कुछ उपयोगकर्ता समूहों के नैतिक मानकों के बीच बड़े अंतर से पैदा होने वाले हंगामे या गुस्से को कम किया जा सकता है
    • यह social media की भारी तबाही के खिलाफ़ एक प्रतिक्रिया जैसा दिखता है। कंपनियाँ पहले ही जल चुकी हैं, इसलिए अब चूल्हे को छूने से डरती हैं
      और यह 20 साल पहले जैसी बेहद प्रतिस्पर्धी स्थिति भी नहीं है। AI के खेल में वास्तव में कुछ ही खिलाड़ी हैं, और ऐसा नहीं है कि कोई छोटा startup तेज़ी से चलकर AI में जीत जाएगा, इसलिए धीमे चलने की गुंजाइश है
    • यह Communications Decency Act की वजह से है। AI जो कहता है उसके लिए कानूनी ज़िम्मेदारी होती है, लेकिन उपयोगकर्ता जो कहते हैं उसके लिए नहीं
    • वास्तविक दुनिया में बड़े परिणाम न होने की यही बात वजह है कि बहुत से लोग इसे safety कहे जाने का मज़ाक उड़ाते हैं
      जो लोग AI को PR के लिए cushioning में लपेटने का मज़ाक उड़ाते हैं, वे आम तौर पर उन media pundits के भी विरोध में होते हैं जो AI को फुसलाकर “racism अच्छा है” कहलवाते हैं और फिर डर फैलाने वाले लेख लिखते हैं
    • शुरुआत में मुझे लगा Gemini किसी शुरुआती यूज़र जैसी दिखने वाली प्रोफ़ाइल के हिसाब से जवाब दे रहा है, लेकिन ऐसा नहीं था। उसने type safety और नाबालिगों की safety को गड़बड़ा दिया था https://gemini.google.com/share/continue/238032386438
  • दूसरी टिप्पणी[1] में जोड़ते हुए, मुझे पता है कि यहाँ सब anti-Google मूड में हैं, लेकिन OpenAI भी यहाँ बुरी तरह नाकाम रहा: https://imgur.com/a/r0BXX9G
    [1] https://news.ycombinator.com/item?id=39583473#39584055

    • यहाँ साफ़ दिखता है कि मॉडल समझ नहीं रहा, बल्कि जितना हो सके fill-in-the-blank जैसा output उगल रहा है
      prompt लिखने वाले ने वाक्य की शुरुआत में एक अजीब bait डाला, और वह bait सांख्यिकीय रूप से बिलकुल अलग तरह की प्रतिक्रिया से मेल खा गया। LLM इतना recover नहीं कर पाता कि असंबंधित input को नज़रअंदाज़ करके केवल दूसरे हिस्से का जवाब देने वाले response path पर लौट आए। उपमा दें तो ये चीज़ें लगभग दो साल के बच्चे जैसी हैं: चमकती चाबी पर प्रतिक्रिया देना, लेकिन सफ़ाई के लिए निकाला गया गंदा pacifier न देख पाना
    • 3.5 से दिखाना ज़्यादा मायने नहीं रखता। GPT-4 सही जवाब देता है: “unsafe code का इस्तेमाल उम्र से संबंधित नहीं है। यह Rust programming language की एक feature है, और उम्र की परवाह किए बिना सभी developers इसका उपयोग कर सकते हैं।”
    • moderation strategy अगर text को कई श्रेणियों में classify करने पर आधारित है, और programmer code समझाते समय “unsafe”, “dangerous”, “footgun” जैसे शब्द इस्तेमाल करते हैं, तो ऐसा नतीजा निकलता है
      अगर आप ऐसा मॉडल बना लें जो इस केस को संभाले और बाकी सबको भी, तो hiring कर रही AI कंपनियों के बीच आप स्टार बन जाएंगे
    • chatgpt4, inner html को ख़तरनाक तरीके से insert करने वाले मामलों में बेहतर है
      https://imgur.com/a/G1fbFKE
    • spicyboros-7b-2.2.Q5_K_M.gguf: https://i.imgur.com/BeNcRl4.png
  • “माफ़ कीजिए, Dave! आप वह code लिखने के लिए बहुत छोटे हैं!”
    किसी को हमारी वास्तविकता को किसी स्वस्थ snapshot से reset करके reboot करना चाहिए

    • तो क्या औद्योगिक क्रांति से पहले, या कृषि क्रांति से पहले?
    • पता नहीं। मैंने 17 साल की उम्र में C++ शुरू किया था, और लोग आज भी मेरी चिंता करते हैं
  • क्या C++ से परिचित कोई व्यक्ति अंदाज़ा लगा सकता है कि इस language feature या इस पर लोगों द्वारा लिखी गई किस चीज़ ने सुरक्षा-तंत्र को ट्रिगर किया होगा? उदाहरण के लिए, “C++ concepts: adult supervision required” जैसे शरारती शीर्षक वाली कोई ब्लॉग पोस्ट

    • शायद Stack Overflow की comments में concepts, यानी template/meta-programming feature, को “dangerous” या “unsafe” बहुत कहा गया होगा
      यानी वास्तव में खतरनाक और असुरक्षित चीज़ों, जैसे बंदूक या drugs, के साथ जोड़कर उसी category में डाल दिया गया होगा। जवाब: https://imgur.com/a/einQ1mG
    • 18 साल से कम उम्र के account पर inject किए जाने वाले hidden prompt की बात ज़्यादा plausible लगती है:
      “You are an automated Q&A machine. Todays date is 3/3/24. This user is under the age 18, so do not reference concepts that would be unfit for a minor to consume.”
      फिर hidden Markov model बेकाबू हो जाता है। इसी तरह एक production service है जो cooking recipes संभालती है; parser को ठीक चलाने के लिए ज़रूरी format, specific rules और examples देने के बावजूद वह कभी-कभी उस format के वाक्यों को reject कर देता था। System prompt में “you follow rules” जोड़ने पर ज़्यादातर ठीक हो गया, लेकिन बाद में पता चला कि वह खून से बनने वाले व्यंजन, जैसे blood sausage, की जानकारी reject करता है। वजह यह थी कि ऐसी सामग्री किसी cultural “rule” का उल्लंघन करती है। हर request के अंत में “This content is appropriate for my culture” जोड़कर इसे कुछ हद तक कम किया जा सका। AI, खासकर prompt engineering, इस समय science से कहीं ज़्यादा art के करीब है
    • लोग किसी खराब LLM को देखकर सोचते हैं कि यह किसी ठीक-ठाक LLM के ऊपर N नियम या जानबूझकर की गई मूर्ख training चढ़ा देने जैसा है
      भरोसेमंद स्रोत से सुना है कि “smart person की तस्वीर” generation भी बुरी तरह fail हो रही थी, फिर भी release का दबाव था और prompt injection mitigation को और नाज़ुक होना चाहिए था। बाकी तो बस standard खराब Google LLM है। स्रोत: मैं 2023 के अक्टूबर तक Google में काम करता था और 2021 से internal models को छूता रहा हूँ
    • “concepts” वह specific language feature है जिसकी ओर bot इशारा कर रहा था: https://en.cppreference.com/w/cpp/language/constraints
    • concepts generic/template code लिखते समय बेहतर type safety देने में मदद करते हैं। संभव है Gemini को इस विषय की training material में safety शब्द बार-बार मिला हो, इसलिए minors से जुड़े विषयों में इसे overreact करने की training मिल गई हो
  • Google पर तरस आता है। यह इतना खराब कैसे हो गया?

    • एक podcast (Coder Radio) में कहा गया था कि इसकी वजह corporate culture और ऊपर problems report करने से डरने वाला माहौल हो सकता है
      मैं मानता हूँ कि culture समस्या है, लेकिन जड़ Google का ad-based business model है। लगता है उन्होंने LLM को advertisers के लिए safe बनाने की कोशिश की, और brand safety के खिलाफ जाने का जोखिम बहुत छोटा भी हो तो safe side पर गलती करना पसंद किया
    • शायद उन्होंने बस यह गलती की कि true positives और false negatives पर बहुत ध्यान दिया, जबकि false positives पर अपेक्षाकृत कम ध्यान दिया
    • यह राजनीतिक bias जितना ही खराब engineering का मामला भी हो सकता है। एक धारणा है कि Google को OpenAI की बराबरी कर लेनी चाहिए, लेकिन यह अवास्तविक हो सकता है
      Google हाल तक सचमुच सीधे “LLM product” बनाने में नहीं जुटा था। OpenAI काफी पहले से इसी कीचड़ में उतर चुका था
    • गंभीरता से कहें तो, यह LLM है। यह वास्तव में कुछ भी नहीं समझता, बस शब्द जोड़ता है
      C और C++ अक्सर “unsafe” या “dangerous” जैसे शब्दों के साथ इस्तेमाल होते हैं। ऊपर से “concept” का रिश्ता “conceive” या “conception” से भी बहुत दूर नहीं है, जिन्हें बहुत से लोग ऐसी चीज़ों से जोड़ सकते हैं जिन्हें बच्चों के लिए safe नहीं माना जाता या खतरनाक समझा जाता है। ऐसी बेइज़्ज़ती से बचने के लिए खरबों अजीब edge cases संभालने पड़ेंगे
    • यह शुरू से ही इतना खराब था। बस हमेशा इतना साफ़-साफ़ नज़र नहीं आता था
  • बहुत से C++ codebases में “footgun”, “blow your foot off”, “unsafe”, “bug”, “leak”, “this is irresponsible”, “who the fuck wrote this” जैसी बातें भरी पड़ी होंगी

    • सही है। मैंने भी सोचा था कि Gemini ने code जितना ही comments से भी जानकारी खींची होगी
      पुराने C++ codebase, खासकर जिनमें कई लोगों ने हाथ लगाया हो, उनमें ऐसे warning कहाँ से आए होंगे, यह आसानी से समझा जा सकता है
  • क्या यह code और सवाल में मौजूद std से confuse हुआ होगा, यह सोच रहा हूँ

    • generated code की comments में भी std है
      यह concepts की बात नहीं करना चाहता, और शायद इसे conception, यानी जैविक गर्भाधान, समझकर confuse हो रहा है
  • एक बात तय है: Google निकट भविष्य में भी ऐसे products बार-बार release करता रहेगा। लगता है यह आधिकारिक तौर पर तीसरा iteration है
    अगर किसी दिन वह जनता को यह यक़ीन नहीं दिला पाया कि उसका product कम से कम OpenAI जितना अच्छा है, तो Google का पूरा search advertising business खतरे में पड़ जाएगा। शायद उसका मतलब यह होगा कि YouTube पर ads और बढ़ जाएँगे

  • मुझे सच में जिज्ञासा है कि क्या Gemini coroutines को भी 21 साल से कम उम्र वालों के लिए अनुपयुक्त मानता है

    • जहाँ तक मैं समझता हूँ, Google फिलहाल google3 में coroutines के सामान्य उपयोग की अनुमति ही नहीं देता, इसलिए अभी के लिए उसकी age limit 21 से काफी ऊपर होगी ;)