- Haskell compiler GHC अब ब्राउज़र के भीतर पूरी तरह client-side पर चल सकता है
- दिए गए Haskell Playground demo के ज़रिए उपयोगकर्ता बिना किसी अलग installation के ब्राउज़र में कोड चला सकते हैं
- इसे GHC के WebAssembly(WasM) backend की प्रगति दिखाने वाले एक उदाहरण के रूप में पेश किया गया है
- Brave browser में यह थोड़ी देर रुकने के बाद लोड होता है, और web worker बनाने में विफल होने पर code main thread पर चलता है
- Safari browser में वही warning message दिखता है, लेकिन Run button निष्क्रिय ही रहता है
ब्राउज़र में चलने वाले GHC का डेमो
- GHC ब्राउज़र के भीतर client-side पर चलता है, और server पर निर्भर हुए बिना Haskell code को compile और run कर सकता है
- लेखक ने इसे Haskell Playground demo के रूप में सार्वजनिक किया है
- विस्तृत विवरण बाद में अलग से दिए जाने की योजना है
- इस प्रदर्शन को GHC WebAssembly backend की प्रगति के स्तर को दिखाने वाले उदाहरण के रूप में बताया गया है
ब्राउज़र के अनुसार व्यवहार रिपोर्ट
- Brave browser में शुरुआत के कुछ सेकंड तक कोई प्रतिक्रिया नहीं आती, फिर लोड पूरा होता है
- “web worker नहीं बनाया जा सकता” जैसा संदेश दिखता है, और इसकी जगह main thread पर code execution किया जाता है
- इसके कारण UI के फ्रीज़ होने की समस्या हो सकती है
- Safari browser में भी वही संदेश दिखता है, लेकिन Run button निष्क्रिय होने से code चल नहीं पाता
- संदेश में Monaco Editor से जुड़ी warning शामिल है, और
MonacoEnvironment.getWorkerUrl या getWorker को define करने की आवश्यकता का उल्लेख है
तकनीकी महत्व
- GHC का WebAssembly के आधार पर सीधे ब्राउज़र में चलना Haskell development environment की accessibility बढ़ाने वाला बदलाव है
- बिना server के शुद्ध client environment में compiler का चल पाना इसका मुख्य तकनीकी विकास है
- मूल लेख में अतिरिक्त तकनीकी विवरण या performance comparison शामिल नहीं हैं
1 टिप्पणियां
Hacker News टिप्पणियाँ
असली शीर्षक “GHC now runs in your browser” है
QEMU-WASM की वजह से अब यह जिज्ञासा होती है कि ऐसा क्या है जो ब्राउज़र में नहीं चल सकता
यह आलोचना नहीं है, बल्कि नई भाषाएँ आसानी से सीखने के लिए ऐसे प्रयोग वाकई अच्छे लगते हैं
अफ़सोस है कि अभी तक Haskell (या उससे जुड़ी भाषाओं) को पूरी तरह bootstrap करने का तरीका नहीं है
इसलिए high-trust Linux distribution में Haskell का इस्तेमाल करना मुश्किल लगता है
ब्राउज़र sandbox में चलाना जोखिम कम करने का एक अस्थायी उपाय है, लेकिन अगर source से bootstrap नहीं हो सकता तो भाषा पर भरोसा करना कठिन है
लेकिन GHC के बिना भी Haskell को काफ़ी हद तक इस्तेमाल किया जा सकता है। उदाहरण के लिए MicroHs लगातार मज़बूत हो रहा है, और मुझे लगता है कि उसमें bootstrap होने की संभावना ज़्यादा है
मुझे याद है कि मैंने पहले HP Jornada पर Jlime Linux के साथ Haskell interpreter चलाया था
गणित की क्लास में formula टाइप करना आसान था, इसलिए यह scientific calculator से कहीं बेहतर था
यह CF card से चलता था, इसलिए शायद GHC जितना बड़ा नहीं रहा होगा, लेकिन नाम याद नहीं है
यह सचमुच प्रभावशाली है। मैंने पहले Haskell से गणित और कला शिक्षा के लिए एक वेबसाइट (mathvas.com) बनाई थी, और अगर उस समय ऐसा टूल होता तो काम बहुत आसान हो जाता
हाँ। संबंधित प्रोजेक्ट haskell-miso में भी देखे जा सकते हैं
जो लोग Haskell से परिचित नहीं हैं, उनके लिए बता दूँ कि GHC Haskell का मुख्य compiler और interactive environment है
लेकिन इसमें feature changes बहुत तेज़ी से होते रहे, और स्थिर शैली बन नहीं पाई, इसलिए मैं अंततः Standard ML पर चला गया
(वह समय type family से जुड़े बदलावों का था)
जिज्ञासा है कि यह प्रोजेक्ट WasmGC का इस्तेमाल करता है, या फिर अपना garbage collector साथ लाता है
ज़रूरत पड़ने पर ही उनका मूल्यांकन होता है, और दोबारा कॉल से बचाने के लिए उन्हें black hole से बदल दिया जाता है
लेकिन WasmGC में type static होते हैं, इसलिए ऐसी dynamic संरचना को support करना मुश्किल है
indirect reference या defunctionalization से इसका हल निकाला जा सकता है, लेकिन performance cost काफ़ी है
और Haskell finalizer भी support करता है, इसलिए WasmGC को यह भी संभालना होगा
मैं जानना चाहता हूँ कि इस फीचर और Blazor Wasm जैसी तकनीक में क्या अंतर है। दोनों ही शायद JS के बिना frontend लिखने देते हैं
मैं ऐसे लोगों के लिए व्यावहारिक Haskell tutorial खोज रहा हूँ जिन्हें functional programming पहले से आती है
monad, typeclass, और HKT की अवधारणा समझता हूँ, लेकिन फिर भी एक साधारण ToDo app तक नहीं बना पा रहा
नहीं तो बस सीधे code पढ़ो, और जहाँ अटक जाओ वहाँ community से मदद लो
उदाहरण के लिए यह लेख उपयोगी हो सकता है
या फिर इस tutorial की तरह एक छोटा web app बनाना भी अच्छा रहेगा