2 पॉइंट द्वारा GN⁺ 2023-08-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • WebAssembly का क्लाउड और edge computing में महत्व बढ़ने के साथ, Moonbit का लक्ष्य एक Wasm-first भाषा बनना है जो Wasm की efficiency, security और छोटे size का इस्तेमाल आसान बनाए
  • Rust और C/C++ में सीखने की कठिनाई और लंबे compile time का बोझ है, जबकि Go की generated code बड़ी और कम efficient मानी जाती है; Moonbit इन्हीं सीमाओं को लक्ष्य करता है
  • डिज़ाइन का फ़ोकस तेज़ build और execution, छोटा Wasm output, और आसान usability पर है, जिसमें multi-level intermediate representation optimization, function-level parallel semantic analysis, और incremental re-analysis शामिल हैं
  • Fibonacci उदाहरण में local function type inference, सबसे छोटे Wasm output, Go से तेज़ और Rust जैसी performance, recursive closure और exhaustive pattern match support पर ज़ोर दिया गया है
  • अभी online IDE, CLI tools, documentation, और VSCode extension उपलब्ध हैं, और 2024 की दूसरी तिमाही के अंत तक beta status तथा beta-quality तक पहुँचने के बाद source code सार्वजनिक करने का लक्ष्य है

WebAssembly-प्रथम भाषा का लक्ष्य

  • WebAssembly एक cross-platform instruction set architecture है, और efficiency, security, छोटे size, तथा open standard जैसी विशेषताओं के कारण क्लाउड और edge computing में इसकी अहमियत बढ़ रही है
  • मौजूदा विकल्प Wasm की पूरी क्षमता का पर्याप्त उपयोग नहीं कर पाते, ऐसा माना गया है
    • Rust और C/C++ जैसी low-level Wasm भाषाएँ सीखना कठिन हैं, और लंबे compile time के कारण development की गति धीमी हो सकती है
    • Go जैसी high-level भाषाओं में generated code कम efficient और बड़ी होती है, इसलिए Wasm की speed और छोटे size के फ़ायदे पूरी तरह नहीं मिलते
  • Moonbit का लक्ष्य ऐसी Wasm-first भाषा बनना है जो तेज़ी से build और run हो, छोटा Wasm output दे, और Go की तरह सीखने में आसान हो

भाषा डिज़ाइन और टीम

  • Moonbit का नेतृत्व Hongbo Zhang और 10 साल से अधिक के language design और development experience वाली टीम कर रही है
  • Zhang ने OCaml, ReScript, Flow में योगदान दिया है, और ReScript toolchain में fast compiler, standard library, और build system के chief architect रहे हैं
  • भाषा डिज़ाइन पर Go और Rust दोनों का प्रभाव है
    • Go की सरलता, खासकर package system, को अपनाया गया है
    • Rust की expressiveness, pattern matching, type inference, generics, और trait-जैसी ad-hoc polymorphism को शामिल किया गया है
  • fault-tolerant type system को speed, parallelization, और incremental checking को ध्यान में रखकर डिज़ाइन किया गया है, और IDE support को मुख्य लक्ष्य रखा गया है

तेज़ build और execution

  • Moonbit का लक्ष्य पूरे stack में तेज़ भाषा बनना है, जिसमें development performance और runtime performance दोनों शामिल हैं
  • पूरे program optimization के लिए multi-level intermediate representation (IR) का उपयोग किया जाता है
    • memory layout को बेहतर बनाकर cache miss कम करने की दिशा अपनाई गई है
    • data flow और control flow analysis के लिए बेहतर context उपलब्ध कराया जाता है
    • यह माना जाता है कि अधिकांश मौजूदा link-time optimization संरचनाओं की तुलना में यह program structure को अधिक व्यापक रूप से समझकर प्रभावी optimization संभव बनाता है
    • यह ऊँचे स्तर की उन redundancies को खोजकर हटा सकता है जो low level पर दिखाई नहीं देतीं
  • IDE features के लिए महत्वपूर्ण तेज़ build performance पाने हेतु function-level parallel semantic analysis की अनुमति दी गई है
    • ReScript और Rust के विपरीत, function-level parallel semantic analysis संभव है
    • इसी granularity पर incremental re-analysis करके बड़े monorepo को संभालने और millisecond स्तर का response time देने का दावा किया गया है

छोटा Wasm output

  • Moonbit को प्रभावी dead code elimination को ध्यान में रखकर डिज़ाइन किया गया है
  • इस analysis में बाधा डालने वाले language features को बाहर रखा गया है, और standard library भी dead code removal के लिए आसान संरचना में बनाई गई है
  • पूरे program optimization के जरिए अंतिम code size को काफ़ी घटाने की कोशिश की गई है
    • code size में कमी से security बेहतर होने और attack surface कम होने की बात कही गई है
    • serverless computing environment में तेज़ startup सुनिश्चित करने का दावा किया गया है

usability के लिए features और tools

  • Moonbit automatic memory management देता है, जिससे यह Rust से अलग बनता है
  • Go के विपरीत, यह pointer या left value जैसे जोखिम वाले तत्वों से बचने की बात करता है
  • data-oriented programming के लिए सुरक्षित features उपलब्ध कराए गए हैं
    • algebraic data types
    • ad-hoc polymorphisms
    • pattern match
  • भाषा से आगे बढ़कर platform की भूमिका निभाना भी इसका लक्ष्य है, और शुरुआती चरण में भी यह toolset उपलब्ध कराता है
    • high-speed build tool
    • package manager
    • compiler
    • IDE
    • ऐसा container-less Cloud IDE जिसे सिर्फ browser से कहीं से भी access किया जा सकता है
    • यह Cloud IDE offline functionality भी देता है, और खुद को मौजूदा Cloud IDEs से अलग बताता है

Fibonacci उदाहरण से दिखने वाले अंतर

  • Fibonacci उदाहरण में MoonBit, Go, और Rust तीनों भाषाओं में fib function लागू करके तुलना की गई है
  • benchmark के आधार पर MoonBit type inference, code size, performance, और usability में अंतर दिखाता है
    • local type inference: MoonBit local function aux का type infer करता है
    • छोटा Wasm size: MoonBit सबसे छोटा Wasm output बनाता है
    • performance: Go से तेज़ और Rust के समान
    • usability: Go की तरह recursive closure को support करता है, जबकि Rust में इसे लागू करना बहुत कठिन बताया गया है
    • Rust की तरह exhaustive pattern match को support करता है, और इसे Go के switch case से कहीं अधिक शक्तिशाली बताया गया है

वर्तमान स्थिति और roadmap

  • Moonbit एक तेज़ी से बदलता हुआ प्रोजेक्ट है, लेकिन अभी इस्तेमाल के लिए प्रवेश बिंदु उपलब्ध हैं
  • भाषा toolchain development पहले कई साल, कभी-कभी 10 साल तक लेता था, लेकिन संचित अनुभव और शुरुआत से बनी dedicated team के कारण development को सरल बनाया गया है
  • 2024 की दूसरी तिमाही के अंत तक beta status तक पहुँचने की उम्मीद है
    • beta status का मतलब अपेक्षाकृत स्थिरता, कम bugs, और Wasm host के साथ interaction के लिए मज़बूत FFI है
  • source code को beta quality तक पहुँचने के बाद सार्वजनिक करने की योजना है
  • रणनीतिक योजना में Wasm 2.0 के लिए Wasm GC integration और Wasm 1.0 के लिए अपना GC शामिल है, और इसे Wasm proposals के अनुरूप बताया गया है

community channels

  • सवाल forum पर पोस्ट किए जा सकते हैं
  • Discord में शामिल हो सकते हैं या Twitter account को follow कर सकते हैं

1 टिप्पणियां

 
GN⁺ 2023-08-20
Hacker News की राय
  • मैं इस प्रोजेक्ट का लीड हूं। अभी ऑनलाइन IDE https://try.moonbitlang.com पर इसे सीधे आज़मा सकते हैं, और F5 से चला सकते हैं
    डॉक्यूमेंटेशन https://github.com/moonbitlang/moonbit-docs पर है, और कंपाइलर बीटा स्थिति में पहुंचने पर सार्वजनिक किया जाएगा। अनुमानित समय 2024 की दूसरी तिमाही के अंत का है

    • किसी नई programming language को देखते समय मैं पहले ये सवाल देखता हूं: async code कैसे लिखा जाता है, algebraic effects, contexts/capabilities, linear types जैसे कम mainstream features हैं या नहीं, type system sound है या नहीं और type cast की जरूरत पड़ती है या नहीं, interfaces/traits/protocols सपोर्ट हैं या नहीं, generics कितने समृद्ध हैं
      उदाहरण के लिए type parameters की explicit variance notation, lower/upper bound constraints, higher-kinded types, structural/nominal subtyping में से कौन ज्यादा केंद्रीय है, algebraic data types और generalized algebraic data types हैं या नहीं—ये भी देखना चाहूंगा
      संदर्भ: https://v2.ocaml.org/manual/effects.html, https://docs.hhvm.com/hack/contexts-and-capabilities/introdu..., https://austral-lang.org/linear-types
    • लगता है बहुत से लोग license, pricing और project control के बारे में जानना चाहेंगे। अभी इन्हें सार्वजनिक करना commercial strategy के लिए नुकसानदेह हो सकता है, लेकिन secrecy और uncertainty रुचि ठंडी कर सकते हैं
    • https://moonbitlang.com/docs/syntax/ डॉक्यूमेंटेशन text color और background color की वजह से पढ़ना मुश्किल है
    • सोच रहा हूं कि अलग fn keyword वाकई जरूरी है या नहीं। func और fn में मूलभूत फर्क क्या है, समझ नहीं आता
    • सोच रहा हूं कि func और fn को अलग करना जरूरी है या नहीं, और function signature में return value दिखाने वाला -> arrow वाकई जरूरी है या नहीं
      नए type syntax में struct User है, लेकिन इस मामले में Go की तरह type User struct बेहतर लगता है। तब type AssignUser func(name: String, id: Int) -> Int की तरह fn variables के लिए function type भी बनाया जा सकता है
      यह भी जानना चाहूंगा कि : lexer या parser की मदद करता है या नहीं। function signature में func(name: String) के बजाय func(name String) लिखा जा सकता है या नहीं, और type declaration भी mut elems: List[Int] नहीं बल्कि mut elems List[int] हो सकता है या नहीं। छोटी-मोटी नुक्ताचीनी है, लेकिन कुल मिलाकर पसंद आया
  • साइट Rust और Go से तुलना करती है, लेकिन मुझे AssemblyScript से तुलना ज्यादा सही लगती है। AssemblyScript भी WASM native है, और ecosystem अभी छोटा है—यह बात भी मिलती-जुलती है
    हालांकि Moonbit के उलट, TypeScript इस्तेमाल कर चुके लोगों के लिए यह परिचित भाषा है, इसलिए जानना चाहूंगा कि AssemblyScript के बजाय Moonbit क्यों इस्तेमाल करना चाहिए

    • क्योंकि Moonbit एक modern language है, जबकि AssemblyScript अतीत की गलतियों को आगे बढ़ा रहा है। उदाहरण के लिए Moonbit pattern matching सपोर्ट करता है और language constructs के अधिकतर हिस्से expressions हैं
      AssemblyScript में pattern matching नहीं है और यह मुख्यतः statements से बना है। Moonbit में algebraic data types हैं; AssemblyScript में ऐसा कुछ है या नहीं, मुझे ठीक से नहीं पता। runtime में और भी फर्क हो सकते हैं, लेकिन वेबसाइट देखकर फैसला करना मुश्किल है
    • AssemblyScript की तुलना में यह Grain के कहीं ज्यादा करीब लगता है: https://grain-lang.org/
    • Rust और Go से तुलना शायद इसलिए है कि दोनों लोकप्रिय languages हैं और WASM support first-class है, लेकिन मैं सहमत हूं कि AssemblyScript से तुलना करनी चाहिए
  • top-level function definitions के लिए func और nested function definitions के लिए fn keyword इस्तेमाल करना अच्छा नहीं है। किसी खास context से स्वतंत्र होकर, दोनों में से एक पर统一 होना चाहिए

    • ऐसा शायद इसलिए हो सकता है कि nested function closure होता है। top-level declarations के उलट, name और type छोड़े जा सकते हैं और values capture की जा सकती हैं, इसलिए अलग closure/lambda syntax रखने वाली languages कम नहीं हैं
      वह सचमुच जरूरी है या अच्छा design है, यह अलग बात है, लेकिन precedents काफी हैं
    • nested functions में छोटा और पढ़ने में आसान function definition allow करता है, इसलिए मुझे यह elegant design लगता है। fn name और type छोड़ने देता है, और छोटा keyword दिखाता है कि function definition भी छोटी हो सकती है
  • WASM को target करने वाली modern garbage-collected language आने से उत्साह है। शायद सबसे करीबी तुलना Grain से होगी: https://grain-lang.org/

    • कहते हैं Grain compiler pure OCaml में नहीं, बल्कि ReasonML में लिखा गया है। ऐसी niche technologies को बेझिझक परत-दर-परत चढ़ते देखना थोड़ा comedy जैसा लगता है
  • “पूरी language toolchain का विकास पहले कई सालों से लेकर 10 साल तक लेता था, लेकिन संचित अनुभव और Moonbit की शुरुआत से बनाई गई समर्पित बेहतरीन टीम की वजह से यह सरल हुआ है। Moonbit के 2024 की दूसरी तिमाही के अंत तक beta अवस्था तक पहुंचने की उम्मीद है, जिसका मतलब अपेक्षाकृत स्थिर, कम bugs वाला, और Wasm host के साथ interact करने के लिए मजबूत FFI वाला चरण है। beta quality तक पहुंचने पर source code सार्वजनिक किया जाएगा। रणनीतिक रूप से, Wasm proposals के अनुरूप Wasm 2.0 के लिए Wasm GC integration और Wasm 1.0 के लिए अपना GC प्लान किया जा रहा है” ऐसा लिखा है
    इसलिए अभी https://github.com/moonbitlang/ खाली है

  • यहां comments देखें तो लगता है Moonbit में garbage collection है। लेकिन अगर Fibonacci result binary 253 bytes की है, तो शायद GC शामिल नहीं है
    उत्सुकता है कि क्या यह प्रस्तावित WASM native GC इस्तेमाल कर रहा है, या build system इतना smart है कि यहां जरूरत नहीं समझकर GC हटा देता है

    • file पर right click करके अंत से दूसरे menu Compile to Wat को चुनें तो WASM text सीधे देख सकते हैं
      Fibonacci example output में सिर्फ print_i32 import, memory और function definitions, और _start export दिखते हैं; यह GC runtime जुड़े होने जैसा नहीं है
    • शायद smart तरीके से omit करता है। क्योंकि code size इनके goals में से एक है
  • Grain याद आता है। यह भी एक Wasm-first programming language है, इसलिए comparison में Grain जोड़ना अच्छा रहेगा
    https://grain-lang.org/

  • About Team link चीनी edu.cn page पर जाता है। university project जैसा दिखता है, लेकिन पक्का नहीं कह सकता। Join Us page भी चीनी में है, और homepage example ऐसा लगता है कि baidu.com के JavaScript की जरूरत है

    • umatrix plugin on करने पर भी demo फिर भी चलता है। जरूरी scripts unpkg और msecnd(Microsoft domain) से आती हैं, baidu की जरूरत नहीं है
  • Go में Fibonacci को ऐसे implement नहीं करते

    • मुझे Go खास पसंद नहीं है, लेकिन मानना पड़ेगा कि वह benchmark बेमतलब है। जिस language में tail call optimization support नहीं है, उसमें tail calls इस्तेमाल करेंगे तो नतीजे खराब होना स्वाभाविक है
      idiomatic implementations की तुलना करके trade-offs पर बारीकी से बात करने के बजाय कुछ numbers डाल देना शायद आसान था। साधारण language teaser ही सही, लोगों को गुमराह न करने के लिए TCO पर comment डालना बेहतर होगा
    • WASM और Go को forced example की तरह इस्तेमाल करते हुए TinyGo का जिक्र न करना बहुत ईमानदार नहीं लगता
    • Rust में भी ऐसे implement नहीं करते। काफी खराब benchmark है। मेरे अनुभव में वजह tail recursion की कमी और switch statement हो सकती है, और Go में वह धीमा हो सकता है
      फिर भी Moonbit को introduce करने वाले teaser के तौर पर ठीक है
  • उत्सुकता है कि क्या इस project का Meta से संबंध है। इसे बनाने वाले Hongbo Zhang ने Meta में ReasonML और Flow जैसे open-source programming language projects पर काम किया है, और LinkedIn के अनुसार वे अभी भी Meta में काम कर रहे हैं