4 पॉइंट द्वारा GN⁺ 2024-09-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें

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 का उपयोग आसानी से किया जा सकता है, लेकिन Cow values का उपयोग करने के लिए अतिरिक्त काम चाहिए
  • Swift में "copy-on-write" values का उपयोग आसानी से किया जा सकता है, लेकिन borrowing और moving का उपयोग करने के लिए अतिरिक्त काम चाहिए
  • Rust डिफ़ॉल्ट रूप से ज़्यादा तेज़ है, जबकि Swift डिफ़ॉल्ट रूप से ज़्यादा सरल और आसान है

Swift, Rust के विचारों को C-जैसे syntax में छिपाता है

  • Swift का syntax functional language की अवधारणाओं को C-जैसे syntax में छिपा देता है, जिससे developers के लिए उन्हें अपनाना आसान हो जाता है
  • Rust के match statement और Swift के switch statement की तुलना
  • Swift का switch statement वास्तव में match expression जैसा ही है, बस उसका नाम और 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 नहीं है, लेकिन Result type है
  • 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 indirect keyword का उपयोग करके 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 टिप्पणियां

 
GN⁺ 2024-09-07
Hacker News राय
  • जो लोग पहली बार Rust इस्तेमाल करते हैं, वे अक्सर Rust को इसलिए पसंद करते हैं क्योंकि वे पहली बार ML परिवार की भाषाओं से परिचित हुए होते हैं

    • Rust Unix hackers को परिचित-सा community देता है
  • Rust पहली भाषा है जिसने non-GC automatic memory management को mainstream में लाया

    • Swift, OCaml, Scala जैसे विकल्प भी मौजूद हैं
  • Smalltalk का युग खत्म हो चुका है, अब ML का युग है

    • 2000 के दशक की भाषाएँ Smalltalk से निकली थीं
    • नई भाषाएँ ML परिवार की हैं
    • अगर आप Scala सीख लें, तो Rust या Swift भी आसानी से सीख सकते हैं
  • iOS Swift app में Rust को integrate करने का काम करते हुए Swift को और ज्यादा इस्तेमाल करने का मन हुआ

    • Swift को cross-platform इस्तेमाल किया जा सकता है, लेकिन इसका मुख्य लक्ष्य Apple platforms हैं
    • Rust के पास कई तरह के package systems हैं
    • Swift packages अक्सर OS API पर निर्भर होते हैं, इसलिए वे Linux या WASM पर काम नहीं करते
    • IBM ने server पर Swift को छोड़ देने का एक उदाहरण दिया है
  • Rust ने memory management की समस्याओं को हल करने के लिए ownership की अवधारणा अपनाई, लेकिन इसका आविष्कार उसी ने नहीं किया

    • Cyclone जैसी भाषाओं का इस पर प्रभाव था
  • Rust और Swift, दोनों की अपनी-अपनी strengths हैं

    • Swift का syntax ज्यादा संक्षिप्त है, लेकिन कुछ हिस्से compiler-only हैं
    • Apple ecosystem के बाहर Swift दूसरी या तीसरी सबसे महत्वपूर्ण भाषा है
    • अगर यह समस्या हल नहीं हुई, तो Swift मुख्य रूप से Apple-केवल भाषा बनकर रह जाएगी
  • Swift के tools, Rust की तुलना में कम सुविधाजनक हैं

    • macOS 12 चलाने वाले 2018 MacBook Air पर Xcode समर्थित नहीं है
    • SourceKit-LSP को दूसरे दर्जे के tool की तरह माना जाता है
    • Rust 1.81 और rust-analyzer अच्छी तरह काम करते हैं
  • Rust सीखने की कोशिश की, लेकिन उदाहरण इतने जटिल थे कि कठिनाई हुई

    • Rust वेबसाइट का example code जटिल है
  • Swift में enum में सीधे methods जोड़ी जा सकती हैं

    • Rust में भी वही काम किया जा सकता है
  • Swift डिफ़ॉल्ट रूप से value types का उपयोग करता है और copy-on-write semantics अपनाता है

    • यह सिर्फ arrays, dictionaries और strings पर लागू होता है
    • Swift value types तुरंत copy हो जाते हैं
  • जब भी Swift की प्रशंसा करने वाला कोई लेख पढ़ता हूँ, तो यह जानने की उत्सुकता होती है कि Apple/macOS ecosystem का उपयोग न करने वाले developers का अनुभव कैसा है

    • मैंने कभी किसी ऐसे Swift developer से मुलाकात नहीं की जो macOS इस्तेमाल न करता हो
    • सिर्फ standard library ही नहीं, बल्कि tools, LSP, libraries, tutorials आदि भी महत्वपूर्ण हैं
    • मुझे विश्वास है कि Swift एक अच्छी भाषा है, लेकिन यह शायद सिर्फ macOS पर ही अच्छी लगती है
  • क्या Zig और Swift के dot syntax को नापसंद करने वाला मैं अकेला हूँ?

    • .variant vs Type::Variant
    • अगर code पर्याप्त लंबा या जटिल हो, तो type name पास में न होने पर असुविधा होगी
    • IDE जैसी सुविधाओं के बिना editor में यह खास तौर पर और असुविधाजनक होगा