- 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 टिप्पणियां
C++ की कमियों के रूप में जिन बातों का ज़िक्र किया जाता है, उनमें से ज़्यादातर शायद C भाषा के साथ compatibility बनाए रखने की वजह से कायम हैं।
क्या C के साथ compatibility छोड़कर इसे इस तरह बदला जा सकता है कि development किया जा सके?
काश,
unsafeदिया ही न गया होता।मूल भाषा = Rust
Hacker News राय
Rust का सबसे बड़ा फायदा इसकी एकीकृत error propagation शैली है, जो
Resulttype पर आधारित है। इसमें exception handling या error return के अलग-अलग तरीकों की चिंता नहीं करनी पड़ती, यही इसकी खासियत है?shorthand औरResultके functional interface की वजह से error handling मजेदार और आसान हो जाती हैC++ को लेकर काफी शिकायतें हैं। खास तौर पर, बहुत सारे नियम याद रखने पड़ते हैं, और एक भी गलती हो जाए तो code कमजोर हो सकता है
अभी जो C++ code लिखा जा रहा है, वह Rust जैसा लगता है। इसमें explicit और मजबूत types, साफ lifetime management आदि का उपयोग होता है
C++ में implicit conversion की समस्या language से ज्यादा library की समस्या है
Rust में keyword arguments या named tuples नहीं हैं, इसलिए Args/Options structs का उपयोग करना असुविधाजनक लगता है
-Wconversionoption कुछ conversion समस्याओं को पकड़ सकता है, लेकिन यह हर मामले में लागू नहीं होता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" में रुचि है, तो उसे सुनना ठीक रहेगा