Moonbit: तेज़, संक्षिप्त और यूज़र-फ्रेंडली WebAssembly भाषा
(moonbitlang.com)- 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 तीनों भाषाओं में
fibfunction लागू करके तुलना की गई है - 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 से कहीं अधिक शक्तिशाली बताया गया है
- local type inference: MoonBit local function
वर्तमान स्थिति और 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 टिप्पणियां
Hacker News की राय
मैं इस प्रोजेक्ट का लीड हूं। अभी ऑनलाइन IDE https://try.moonbitlang.com पर इसे सीधे आज़मा सकते हैं, और F5 से चला सकते हैं
डॉक्यूमेंटेशन https://github.com/moonbitlang/moonbit-docs पर है, और कंपाइलर बीटा स्थिति में पहुंचने पर सार्वजनिक किया जाएगा। अनुमानित समय 2024 की दूसरी तिमाही के अंत का है
उदाहरण के लिए 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
fnkeyword वाकई जरूरी है या नहीं।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की तरहfnvariables के लिए 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 क्यों इस्तेमाल करना चाहिए
AssemblyScript में pattern matching नहीं है और यह मुख्यतः statements से बना है। Moonbit में algebraic data types हैं; AssemblyScript में ऐसा कुछ है या नहीं, मुझे ठीक से नहीं पता। runtime में और भी फर्क हो सकते हैं, लेकिन वेबसाइट देखकर फैसला करना मुश्किल है
top-level function definitions के लिए
funcऔर nested function definitions के लिएfnkeyword इस्तेमाल करना अच्छा नहीं है। किसी खास context से स्वतंत्र होकर, दोनों में से एक पर统一 होना चाहिएवह सचमुच जरूरी है या अच्छा design है, यह अलग बात है, लेकिन precedents काफी हैं
fnname और type छोड़ने देता है, और छोटा keyword दिखाता है कि function definition भी छोटी हो सकती हैWASM को target करने वाली modern garbage-collected language आने से उत्साह है। शायद सबसे करीबी तुलना Grain से होगी: https://grain-lang.org/
“पूरी 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/ खाली है
online IDE भी आज़माया जा सकता है: https://try.moonbitlang.com
यहां comments देखें तो लगता है Moonbit में garbage collection है। लेकिन अगर Fibonacci result binary 253 bytes की है, तो शायद GC शामिल नहीं है
उत्सुकता है कि क्या यह प्रस्तावित WASM native GC इस्तेमाल कर रहा है, या build system इतना smart है कि यहां जरूरत नहीं समझकर GC हटा देता है
Fibonacci example output में सिर्फ
print_i32import, memory और function definitions, और_startexport दिखते हैं; यह GC runtime जुड़े होने जैसा नहीं है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 की जरूरत है
Go में Fibonacci को ऐसे implement नहीं करते
idiomatic implementations की तुलना करके trade-offs पर बारीकी से बात करने के बजाय कुछ numbers डाल देना शायद आसान था। साधारण language teaser ही सही, लोगों को गुमराह न करने के लिए TCO पर comment डालना बेहतर होगा
switchstatement हो सकती है, और Go में वह धीमा हो सकता हैफिर भी Moonbit को introduce करने वाले teaser के तौर पर ठीक है
उत्सुकता है कि क्या इस project का Meta से संबंध है। इसे बनाने वाले Hongbo Zhang ने Meta में ReasonML और Flow जैसे open-source programming language projects पर काम किया है, और LinkedIn के अनुसार वे अभी भी Meta में काम कर रहे हैं