Swift, Rust का ज़्यादा सुविधाजनक रूप है
(blog.namangoel.com)Rust
- Rust एक बेहद पसंद की जाने वाली भाषा है, जो तेज़ है और जिसकी कम्युनिटी शानदार है
- Rust ownership की अवधारणा लाकर memory management की समस्याओं को हल करता है
- यह
Rc,Arc,Cowजैसी utilities देता है, जो reference counting और "clone-on-write" को support करती हैं - जब और निचले स्तर के काम की ज़रूरत हो, तो
unsafeसिस्टम का उपयोग करके raw C pointers तक पहुँचा जा सकता है - Rust में tagged enums, match expressions, first-class functions, मज़बूत type system जैसी कई functional languages की विशेषताएँ हैं
- LLVM-आधारित compiler का उपयोग करके इसे native code और WASM में compile किया जा सकता है
Swift
- Swift को भी कई सालों से इस्तेमाल किया गया है, और Rust सीखते समय Swift से इसकी समानताएँ दिखीं
- Swift में भी tagged enums, match expressions, first-class functions जैसी functional languages की विशेषताएँ हैं
- Swift डिफ़ॉल्ट रूप से value types का उपयोग करता है और "copy-on-write" semantics रखता है
- जब तेज़ performance की ज़रूरत हो, तो ownership system चुनकर values को "move" किया जा सकता है
- जब और निचले स्तर के काम की ज़रूरत हो, तो
unsafeसिस्टम का उपयोग करके raw C pointers तक पहुँचा जा सकता है - Swift भी LLVM-आधारित compiler का उपयोग करके native code और WASM में compile किया जा सकता है
Déjà vu?
- Swift और Rust में बहुत हद तक समान feature set है
- बड़ा अंतर दृष्टिकोण में है
- डिफ़ॉल्ट memory model पर विचार करने से यह अंतर साफ़ हो जाता है
Rust top-down है, Swift bottom-up
- Rust एक low-level systems language के रूप में शुरू होता है और ऊपर high-level तक जाने के tools देता है
- Swift एक high-level language के रूप में शुरू होता है और नीचे low-level तक जाने के tools देता है
- memory management model इसका सबसे स्पष्ट उदाहरण है
- Swift डिफ़ॉल्ट रूप से value types का उपयोग करता है और "copy-on-write" semantics रखता है
- Rust में "moved" और "borrowed" values का उपयोग आसानी से किया जा सकता है, लेकिन
Cowvalues का उपयोग करने के लिए अतिरिक्त काम चाहिए - Swift में "copy-on-write" values का उपयोग आसानी से किया जा सकता है, लेकिन borrowing और moving का उपयोग करने के लिए अतिरिक्त काम चाहिए
- Rust डिफ़ॉल्ट रूप से ज़्यादा तेज़ है, जबकि Swift डिफ़ॉल्ट रूप से ज़्यादा सरल और आसान है
Swift, Rust के विचारों को C-जैसे syntax में छिपाता है
- Swift का syntax functional language की अवधारणाओं को C-जैसे syntax में छिपा देता है, जिससे developers के लिए उन्हें अपनाना आसान हो जाता है
- Rust के
matchstatement और Swift केswitchstatement की तुलना - Swift का
switchstatement वास्तव मेंmatchexpression जैसा ही है, बस उसका नाम और syntax अलग है - Swift में
enumमें सीधे methods जोड़े जा सकते हैं
Optional types
- Rust में
nullनहीं है, लेकिनNoneहै - Swift में
nilहै, लेकिन वह वास्तव मेंNoneजैसा ही है - Swift
Optionकी जगहT?का उपयोग करता है, और compiler यह सुनिश्चित करता है कि वहnilन हो - Swift में optional types का उपयोग करना आसान है
Error handling
- Rust में
try-catchनहीं है, लेकिनResulttype है - Swift
try-catchकी जगहdo-catchका उपयोग करता है, और function call से पहलेtryलिखना पड़ता है - Swift का error handling, Rust जैसा है, लेकिन ज़्यादा परिचित syntax में छिपा हुआ है
Rust का compiler समस्याएँ पकड़ता है, Swift का compiler कुछ समस्याएँ हल भी करता है
- Rust का compiler कई आम समस्याओं को compile time पर पकड़ लेता है और उनके समाधान सुझाता है
- self-referential enum का उदाहरण
- Swift
indirectkeyword का उपयोग करके recursive types को चिह्नित करता है, और बाकी compiler संभाल लेता है
Swift कम "शुद्ध" है
- Swift को Objective-C का स्थान लेने के लिए डिज़ाइन किया गया था, इसलिए उसे मौजूदा code के साथ interface कर पाना ज़रूरी था
- Swift ने कई practical choices किए हैं, और यह Rust से बड़ा language है
- Swift को "progressive disclosure" को ध्यान में रखकर डिज़ाइन किया गया था, ताकि भाषा को जितना ज़्यादा सीखो, उतनी ज़्यादा features सामने आएँ
- Swift की कुछ language features:
- classes / inheritance
- async-await
- async-sequences
- actors
- getters और setters
- lazy properties
- property wrappers
- Result Builders (उदाहरण: HTML / SwiftUI)
सुविधा की क़ीमत
- Swift ऐसी भाषा है जिसमें शुरुआत करना और productive बनना ज़्यादा आसान है
- इसका syntax ज़्यादा परिचित है और कई काम अपने-आप संभल जाते हैं
- Swift एक ज़्यादा high-level language है, और इसके साथ वही trade-offs आते हैं
- डिफ़ॉल्ट रूप से Rust programs, Swift programs की तुलना में काफ़ी तेज़ होते हैं
- Rust डिफ़ॉल्ट रूप से तेज़ है और आपको इसे धीमा करने की छूट देता है, जबकि Swift डिफ़ॉल्ट रूप से आसान है और आपको इसे तेज़ करने की छूट देता है
- दोनों भाषाओं के अपने-अपने उपयोग हैं
- Rust systems और embedded programming के लिए ज़्यादा उपयुक्त है
- Swift UI और server लिखने के लिए ज़्यादा उपयुक्त है
- समय के साथ दोनों भाषाओं के overlapping हिस्से और बढ़ने की उम्मीद है
GN⁺ का सार
- यह लेख Swift और Rust की समानताओं और अंतर को तुलना के साथ समझाता है
- Swift ने Rust के कई विचार अपनाए हैं और उन्हें ज़्यादा परिचित syntax में पेश किया है
- दोनों भाषाओं की अपनी-अपनी ताकत और उपयोग हैं, और समय के साथ इनके बीच और ज़्यादा overlap आने की उम्मीद है
- यह Swift और Rust के memory management model, error handling, optional types जैसे विभिन्न पहलुओं के अंतर को समझने में मदद करता है
- समान features वाली भाषाओं में Kotlin, TypeScript आदि शामिल हैं
1 टिप्पणियां
Hacker News राय
जो लोग पहली बार Rust इस्तेमाल करते हैं, वे अक्सर Rust को इसलिए पसंद करते हैं क्योंकि वे पहली बार ML परिवार की भाषाओं से परिचित हुए होते हैं
Rust पहली भाषा है जिसने non-GC automatic memory management को mainstream में लाया
Smalltalk का युग खत्म हो चुका है, अब ML का युग है
iOS Swift app में Rust को integrate करने का काम करते हुए Swift को और ज्यादा इस्तेमाल करने का मन हुआ
Rust ने memory management की समस्याओं को हल करने के लिए ownership की अवधारणा अपनाई, लेकिन इसका आविष्कार उसी ने नहीं किया
Rust और Swift, दोनों की अपनी-अपनी strengths हैं
Swift के tools, Rust की तुलना में कम सुविधाजनक हैं
Rust सीखने की कोशिश की, लेकिन उदाहरण इतने जटिल थे कि कठिनाई हुई
Swift में enum में सीधे methods जोड़ी जा सकती हैं
Swift डिफ़ॉल्ट रूप से value types का उपयोग करता है और copy-on-write semantics अपनाता है
जब भी Swift की प्रशंसा करने वाला कोई लेख पढ़ता हूँ, तो यह जानने की उत्सुकता होती है कि Apple/macOS ecosystem का उपयोग न करने वाले developers का अनुभव कैसा है
क्या Zig और Swift के dot syntax को नापसंद करने वाला मैं अकेला हूँ?
.variantvsType::Variant