7 पॉइंट द्वारा GN⁺ 2025-05-07 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • 20 साल से अधिक समय तक C++ का उपयोग करने वाले लेखक बताते हैं कि Matt Godbolt के व्याख्यान के माध्यम से उन्होंने Rust के फायदे फिर से खोजे
  • C++ में type confusion से होने वाली गलतियाँ compiler ठीक से नहीं पकड़ पाता, लेकिन Rust इन्हें compile time पर मज़बूती से रोकता है
  • Rust में सिर्फ memory safety ही नहीं, बल्कि API misuse को रोकने के लिए भी अनुकूल डिज़ाइन है
  • खासकर runtime input processing में भी Rust errors को explicit रूप से handle करने के लिए मजबूर करता है, जिससे जोखिम कम होता है
  • अंततः यह दिखाता है कि language design डेवलपर की गलतियों को रोकने का एक शक्तिशाली साधन बन सकता है

परिचय

  • Matt Godbolt का व्याख्यान "Correct by Construction" C++ के API design की समस्याओं पर प्रकाश डालता है, और यह Rust की philosophy से भी मेल खाता है
  • Rust की खूबियों को समझने के लिए यह व्याख्यान एक अच्छा introductory material है

What's in a type — C++ की सीमाएँ

  • void sendOrder(const char *symbol, bool buy, int quantity, double price) जैसी function signature गलतियों के लिए बहुत संवेदनशील होती है
  • अगर केवल bool, int, double जैसे primitive types का उपयोग किया जाए, तो गलत type देने पर भी compiler चेतावनी नहीं देता
  • using Price = double जैसे type alias में वास्तविक type distinction की क्षमता नहीं होती
  • class और explicit constructor का उपयोग करके Quantity, Price बनाने पर compiler कुछ गलतियाँ पकड़ सकता है, लेकिन:
    • negative values भी स्वीकार हो जाती हैं, और यह समस्या केवल runtime में सामने आती है
    • static_assert और templates का उपयोग करके compile-time checks को मजबूर किया जा सकता है
    • लेकिन atoi जैसी runtime conversion अब भी integer overflow पैदा कर सकती है और compiler इसे पहचान नहीं पाता

Rust इसमें कैसे अलग है?

  • समान function definition में भी Rust type mismatch को compile time पर स्पष्ट error के रूप में दिखाता है
  • struct Price(pub f64); struct Quantity(pub u64); जैसी नई type definitions भी सरल हैं, और negative input को रोकना स्वाभाविक रूप से काम करता है
  • "string".parse::<u64>() की तरह runtime string conversion में भी explicit error handling ज़रूरी होती है
  • .expect() से जबरन value unwrapping करने पर runtime crash हो सकता है, लेकिन यह C++ की चुपचाप होने वाली गलती से बेहतर है, यही बात रेखांकित की गई है

निष्कर्ष

  • Rust सिर्फ memory safety तक सीमित नहीं है; यह API misuse prevention, compile-time checks और स्पष्ट type system के माध्यम से डेवलपर्स की रक्षा करता है
  • यह दिखाता है कि language design की ताकत डेवलपर की गलतियों को पहले ही रोक सकती है
  • Rust के शुरुआती उपयोगकर्ता borrow checker से जूझने की कठिनाई महसूस कर सकते हैं, लेकिन समय के साथ यह हल हो जाता है
  • C++ ने ऐतिहासिक रूप से बहुत प्रगति की है, फिर भी Rust जैसी मौलिक safety और clarity देना अब भी कठिन दिखता है

संदर्भ

4 टिप्पणियां

 
cronex 2025-05-08

C++ की कमियों के रूप में जिन बातों का ज़िक्र किया जाता है, उनमें से ज़्यादातर शायद C भाषा के साथ compatibility बनाए रखने की वजह से कायम हैं।
क्या C के साथ compatibility छोड़कर इसे इस तरह बदला जा सकता है कि development किया जा सके?

 
coremaker 2025-05-08

काश, unsafe दिया ही न गया होता।

 
codemasterkimc 2025-05-08

मूल भाषा = Rust

 
GN⁺ 2025-05-07
Hacker News राय
  • Rust का सबसे बड़ा फायदा इसकी एकीकृत error propagation शैली है, जो Result type पर आधारित है। इसमें exception handling या error return के अलग-अलग तरीकों की चिंता नहीं करनी पड़ती, यही इसकी खासियत है

    • ? shorthand और Result के functional interface की वजह से error handling मजेदार और आसान हो जाती है
    • C++ के जटिल error handling तरीकों की तुलना में इसकी consistency की कमी खलती है
  • C++ को लेकर काफी शिकायतें हैं। खास तौर पर, बहुत सारे नियम याद रखने पड़ते हैं, और एक भी गलती हो जाए तो code कमजोर हो सकता है

    • C++ की safety बढ़ाने के लिए Rust की safe शैली जैसी approach की जरूरत है
  • अभी जो C++ code लिखा जा रहा है, वह Rust जैसा लगता है। इसमें explicit और मजबूत types, साफ lifetime management आदि का उपयोग होता है

    • Rust compiler bugs पकड़ने और errors report करने में ज्यादा मददगार है
  • C++ में implicit conversion की समस्या language से ज्यादा library की समस्या है

    • C++ में भी Rust जैसी सुविधाएं लागू की जा सकती हैं, लेकिन इसके लिए library support चाहिए
  • Rust में keyword arguments या named tuples नहीं हैं, इसलिए Args/Options structs का उपयोग करना असुविधाजनक लगता है

  • -Wconversion option कुछ conversion समस्याओं को पकड़ सकता है, लेकिन यह हर मामले में लागू नहीं होता

    • उदाहरण के लिए, 1000.0 को 1000 में बदलना precision loss नहीं माना जाता
  • Rust की बेहतर बात यह है कि इसमें implicit numeric conversions नहीं हैं। C++ में atoi का उपयोग नहीं करना चाहिए, बल्कि STL के conversion functions का उपयोग करना बेहतर है

  • SQL constraints या pydantic के custom types और validators जैसी सुविधाएं अभी Rust या Golang में नहीं हैं

  • अगर Matt और Ben Rady के programming podcast "Two's Complement" में रुचि है, तो उसे सुनना ठीक रहेगा