Rust में ट्रेट्स और Haskell में टाइपक्लासेस के बीच क्या अंतर है?
नमस्ते, सहकर्मियों!
मैंने Haskell के बाद Rust सीखना शुरू किया और देखा कि Rust में ट्रेट्स Haskell में टाइपक्लासेस (typeclasses) से बहुत मिलते-जुलते हैं। पहली नज़र में, वे एक ही समस्या हल करते हैं — विभिन्न प्रकारों के लिए सामान्य व्यवहार परिभाषित करना। लेकिन मुझे लगता है कि उनके बीच मूलभूत अंतर हैं, जिन्हें मैं अभी स्पष्ट रूप से नहीं बता सकता।
उदाहरण के लिए, Haskell में मैं लिख सकता हूँ:
```haskell
class Show a where
show :: a -> String
instance Show Int where
show x = "Int: " ++ show x
```
और Rust में इसका एनालॉग इस तरह दिखता है:
```rust
trait Show {
fn show(&self) -> String;
}
impl Show for i32 {
fn show(&self) -> String {
format!("i32: {}", self)
}
}
```
यह काफी समान लगता है, लेकिन मैं कुछ चीजें नोटिस करता हूँ:
1. Haskell में टाइपक्लासेस के कई पैरामीटर हो सकते हैं (जैसे, `class Convert a b`), जबकि Rust में ट्रेट्स हमेशा एक प्रकार से बंधे होते हैं।
2. Haskell में `deriving` है, जो कुछ क्लासेस के लिए स्वचालित रूप से इम्प्लीमेंटेशन जनरेट करता है।