1 पॉइंट द्वारा GN⁺ 2025-10-21 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Gleam OTP actor model का उपयोग करके fault-tolerant और multicore performance वाले प्रोग्राम विकसित करने में मदद करता है
  • इसकी खासियत पूर्ण type safety और Erlang OTP के साथ compatibility को लक्ष्य बनाना है
  • supervisor के जरिए failure recovery और self-healing सुविधाएँ देता है
  • यह Erlang/OTP की केवल कुछ सुविधाएँ प्रदान करता है, और अतिरिक्त management strategies फिलहाल विकास में हैं
  • यह सामान्य process, actor, supervisor जैसे विभिन्न actor types को सपोर्ट करता है

Gleam OTP अवलोकन

  • Gleam OTP Erlang की OTP architecture से प्रेरित एक शक्तिशाली actor framework है, जो fault-tolerant multicore प्रोग्राम बनाने के लिए उपयुक्त है
  • यह एक open source प्रोजेक्ट है और Apache-2.0 license के तहत उपलब्ध है

मुख्य विशेषताएँ और फायदे

  • actors और messages के लिए पूर्ण type safety सुनिश्चित करता है
  • Erlang OTP के साथ compatibility देता है, जिससे मौजूदा Erlang environment के साथ integration आसान होता है
  • supervisor के माध्यम से failure detection, automatic recovery और shutdown management जैसी fault tolerance सुविधाएँ मिलती हैं
  • Erlang OTP के बराबर समान performance हासिल करने का लक्ष्य रखता है
  • documentation और examples उपलब्ध होने से सीखना और practical use आसान होता है

actor types का विवरण

  • process

    • OTP के भीतर सबसे बुनियादी building block की भूमिका निभाता है
    • यह अन्य actor types की नींव है, लेकिन Gleam applications में इसे सीधे अक्सर उपयोग नहीं किया जाता
  • actor

    • यह सबसे आम तौर पर इस्तेमाल होने वाला process type है और Erlang के gen_server जैसी functionality देता है
    • OTP system messages को अपने आप handle करता है, और debugging व tracing features सक्षम करता है
  • supervisor

    • अन्य processes को शुरू करता है और उनकी निगरानी व recovery की जिम्मेदारी लेता है
    • child process के crash या exception की स्थिति में उसे अपने आप restart करता है
    • nested supervisor संरचना (supervision tree) के जरिए application की fault-tolerant संरचना बनती है
    • gleam/otp/static_supervisor, gleam/otp/factory_supervisor दस्तावेज़ों में implementation का विवरण देखा जा सकता है

सीमाएँ और मुद्दे

  • वर्तमान में actor सभी OTP system messages को support नहीं करते, और unsupported messages को अनदेखा कर दिया जाता है
  • कुछ OTP debugging API सुविधाएँ सीमित हैं
  • जरूरत होने पर issue दर्ज करके unimplemented messages के support का अनुरोध किया जा सकता है

निष्कर्ष और प्रोजेक्ट का महत्व

  • Gleam OTP Erlang ecosystem की खूबियों को Gleam भाषा तक विस्तारित करता है, और type safety तथा multicore fault tolerance लागू करने के लिहाज से बहुत महत्वपूर्ण है
  • यह उन applications के लिए उपयुक्त है जहाँ production service में stability और performance महत्वपूर्ण हों
  • startup, IT विशेषज्ञ डेवलपर्स और सामान्य डेवलपर्स, सभी के लिए यह सीखने और practical adoption के लिहाज से एक मूल्यवान open source प्रोजेक्ट है

1 टिप्पणियां

 
GN⁺ 2025-10-21
Hacker News राय
  • मैंने gleam/lustre के साथ एक छोटा प्रोजेक्ट शुरू किया था, और अब तक इससे सच में बहुत संतुष्ट हूँ
    अगर आपको static types, null-रहित environment, functional programming, ML परिवार की भाषाओं में दिलचस्पी है, तो मैं gleam आज़माने की सलाह दूँगा
    और हाँ, यह BEAM पर चलता है
    • मैं भी यही सोचता हूँ
      जब मैंने gleam install किया, तो मेरे सिस्टम पर लगभग 50 packages install हुए, शायद ये Erlang/Elixir से जुड़े packages थे
      अगर कोई सिर्फ JS में transpile करना चाहे तो क्या होगा, यह सोच रहा हूँ। हो सकता है यह मेरे सिस्टम की packaging समस्या हो
      अगर Lua को transpile target के रूप में support मिले तो और अच्छा होगा। मेरे हिसाब से किसी DSL को दूसरे प्रोग्राम में embed करने के लिए Lua, JS runtime की तुलना में 3 गुना आसान लगता है
      सबसे बढ़िया बात अब तक community रही है। gleam community की libraries और materials की quality बहुत ऊँची है
      इससे Rust community की याद आती है, जहाँ मुश्किल समस्याओं पर पहले से smart लोग काम कर चुके होते हैं, इसलिए अच्छे solutions आसानी से मिल जाते हैं (lustre, squirrel वगैरह)
      एक और खासियत यह है कि यहाँ बहुत experimentation और creative कोशिशें दिखती हैं। बड़ी language ecosystems में जो चीजें अक्सर नहीं दिखतीं, वे यहाँ उभरकर आती हैं। जैसे-जैसे community बढ़ रही है, माहौल भी बहुत स्वागतपूर्ण है
    • मुझे आपकी कही हुई हर चीज़ में दिलचस्पी है। लेकिन मैं अभी तक BEAM या OTP को ठीक से नहीं समझ पाया हूँ
      कहाँ से सीखना शुरू करना बेहतर होगा, कोई सुझाव दें
    • जिन चीज़ों का ऊपर ज़िक्र हुआ है उनमें से किसी का भी अनुभव न होने पर, gleam/lustre और elixir/phoenix में से पहले क्या सीखना बेहतर रहेगा, यह जानना चाहता हूँ
  • मैं जानना चाहता हूँ कि Gleam इस्तेमाल करने वाले लोग Phoenix जैसे web framework भी साथ में इस्तेमाल करते हैं या नहीं
    अगर Phoenix जैसे framework के साथ Gleam इस्तेमाल किया जा सके तो यह सच में बहुत अच्छा लगेगा, इसलिए इसके बारे में देख रहा हूँ
    अभी मैं Python में एक नया प्रोजेक्ट तैयार कर रहा हूँ, लेकिन अगर Gleam में भी कोई ठीक-ठाक विकल्प हो तो उसे आज़माना चाहूँगा
    • Lustre डेवलपर का एक presentation वीडियो है जिसमें Gleam/Lustre से LiveView जैसी functionality implement की गई है
      इसका फायदा यह है कि frontend/backend किस हिस्से में जाएगा, यह बहुत आसानी से चुना जा सकता है
      YouTube लिंक
    • Phoenix, Django, Rails जैसे पूर्ण framework अभी नहीं हैं
      लेकिन web apps बनाते समय अक्सर इस्तेमाल होने वाले tools मौजूद हैं
      Lustre एक बुनियादी view tool है, और Wisp server की भूमिका निभाता है
      SQL के लिए squirrel और POG हैं (नया है, लेकिन लोकप्रिय है)
  • PureScript एक mature functional programming language है जो Erlang backend को support करती है
    अगर आपको BEAM के लिए कोई दूसरा static typed विकल्प चाहिए, तो यह अच्छा चुनाव है
    यह Haskell की एक dialect जैसी है, और strict evaluation तथा row polymorphism को support करती है
    • PureScript का JS backend mature है, लेकिन Erlang backend और उसका ecosystem, Gleam की तुलना में बहुत छोटा है
    • आधिकारिक website और github repo में तो सिर्फ यही लिखा है कि PureScript, JS में compile होती है, तो Erlang backend के बारे में आपने कहाँ सुना, यह जानना चाहता हूँ
  • Erlang/BEAM में मेरी काफी दिलचस्पी है, लेकिन उसे वास्तव में आज़माने का समय नहीं मिला
    यह काम में कैसे इस्तेमाल होता है, यह जानना चाहता हूँ। क्या लोग पूरी service logic उसी में बनाते हैं, या सिर्फ कुछ खास हिस्सों में इस्तेमाल करते हैं?
    • मैं अपनी team को lead करते हुए Gleam की ओर gradual migration कर रहा हूँ
      मैंने "functional core, imperative shell" pattern को काफ़ी दूर तक ले जाकर Gleam को मौजूदा Ruby on Rails codebase में भारी computation वाले कामों के लिए अलग किया है
      मैं OTP features का लगभग इस्तेमाल नहीं कर रहा, और Rails सिर्फ अपनी मूल ताकतों जैसे web UI/HTTP API पर ध्यान दे रहा है
      Rails job के input values सेट करता है, और job data को Redis के ज़रिए Gleam तक एक atomic set of values के रूप में भेजा जाता है
      Network और file IO संभालने के लिए मैंने Elixir में एक पतला wrapper बनाया है, जबकि business logic Gleam modules में है
      इस तरीके के बारे में तकनीकी रूप से और विस्तार से लिखकर जल्द एक article बनाने का सोच रहा हूँ। HN पर यह अक्सर रुचि का विषय रहता है
    • हम TV Labs में Elixir से web services, real-time matching engine, Lua code sandboxing, binary protocol के ज़रिए microcontrollers से communication, machine learning वगैरह बहुत तरह के काम कर रहे हैं
      Elixir एक बेहतरीन general-purpose language है और कई क्षेत्रों में मजबूत है
      और विस्तार से बात के लिए मेरा Developer Voices वीडियो देखें
      YouTube लिंक
    • मैं elixirforum.com पर आकर बातचीत करने की सलाह दूँगा
      बहुत से लोग सिर्फ Erlang/Elixir & BEAM के साथ गंभीर systems बना रहे हैं, इसलिए जो भी सवाल हों, वहाँ अच्छे जवाब मिलेंगे
    • मैंने दोनों तरीके देखे हैं
      OTP को अच्छी तरह समझ लेने के बाद, पूरे system को उसी पर बनाना स्वाभाविक लगने लगता है
      मैं भी 7 साल तक ऐसा करता रहा हूँ, लेकिन मैंने यह भी देखा है कि नए developers को इस ecosystem में सहज होने में काफ़ी समय लगता है
  • मेरे हिसाब से अगर Gleam को अधिक गंभीरता से लिया जाना है, तो project page पर मजबूत राजनीतिक संदेश न लिखना बेहतर होगा
    मुझे समझ नहीं आता कि किसी तकनीकी project page पर राजनीति की बात क्यों डालनी चाहिए
    यह सहमति या असहमति का सवाल नहीं है, बल्कि मुझे लगता है कि professional जगहों पर ऐसी चर्चा को बाहर रखना ज़्यादा उचित है
    वरना बातचीत बेवजह मुख्य मुद्दे से भटक जाती है
    • "Black lives matter. Trans rights are human rights. No nazi bullsh*t."
      क्या आप पेज के नीचे सिर्फ एक बार आने वाली इसी एक पंक्ति की बात कर रहे हैं?
      अगर कोई सिर्फ इस एक वाक्य की वजह से इसे इस्तेमाल न करने का फैसला करता है, तो मुझे लगता है कि यह ठीक उसी तरह काम कर रहा है जैसा इरादा था
    • आपने कहा कि "बातचीत बेवजह मुख्य मुद्दे से भटक जाती है"
      लेकिन मुझे तो लगता है कि असल में आपने ही उसे मुद्दे से भटका दिया
  • मेरी नज़र में actor model में distributed computing की समस्या तब आती है जब processes के बीच जानकारी साझा करनी पड़े
    मेरे हिसाब से fault tolerance और multicore के लिए Scala/ZIO की तरह software transactional memory और functional effect system इस्तेमाल करना बेहतर है
    फिर भी जहाँ actor model की ज़रूरत हो, वहाँ उसे इस्तेमाल किया जा सकता है
    ऊपर से JVM ecosystem की maturity, observability और production readiness को देखें तो वह BEAM से बेहतर है
    • यह काफ़ी अनोखा नज़रिया लगता है
      BEAM की कमियों की आलोचना समझ में आती है, लेकिन उसकी ताकत माने जाने वाले हिस्से की आलोचना करना थोड़ा अजीब लगता है
      BEAM में immutable messages को हल्के और सस्ते green threads के बीच भेजा जाता है
      इसके पास मज़बूत supervision system है, इसलिए data races या thread stalls की चिंता नहीं करनी पड़ती
      ये सब चीज़ें built-in हैं, इसलिए boilerplate भी नहीं है
      immutability की वजह से performance भी उम्मीद से बेहतर होती है
      आखिरकार BEAM fault-tolerant, distributed/concurrent systems के लिए सबसे ज़्यादा optimized platform है
    • एक बात जिसका ज़िक्र नहीं हुआ, वह यह है कि Erlang (जिस पर gleam आधारित है) 99.9999999% uptime हासिल करने वाली भाषा है
      इस तरह की durability देने वाले बड़े कारणों में robust supervision और cross-machine infrastructure शामिल हैं
      actor systems के उदय के लिए यह एक बड़ी प्रेरणा रही है
      सचमुच Erlang इसी एक काम के लिए बना था, और यह इसे बेहद अच्छी तरह करता है
    • आपने कहा कि "actor model में processes के बीच sharing कठिन है", लेकिन वास्तव में actor model में data को copy किया जाता है या ownership message passing के ज़रिए transfer होती है
      अगर कोई data सच में shared होना ज़रूरी है, तो वह अनिवार्य रूप से immutable data होना चाहिए
    • क्या आप ऐसी किसी स्थिति का उदाहरण दे सकते हैं जहाँ mutable data को immutable data structures के रूप में pass नहीं किया जा सकता?
      मेरे दिमाग में सिर्फ बेहद कठिन numerical computation आता है, लेकिन ऐसी चीज़ें elixir या erlang में सीधे लिखने के बजाय NIF में implement की जा सकती हैं
    • Elixir/Gleam/OTP में प्रोग्राम पूरी तरह स्वतंत्र processes के समूह होते हैं
      भले ही आप actor pattern को स्पष्ट रूप से न इस्तेमाल करें, state passing या coordination जैसी बातें पहले से हल की हुई समस्याएँ हैं
      tasks, agents, GenServer, Supervisor जैसी बुनियादी primitives पहले से मौजूद हैं