Uploaded avatar of iHiD

शुरू हो गया है Mindshifting May!

@iHiD
3 साल से अधिक पहले
वीडियो

परिचय

नमस्ते सभी को! मुझे उम्मीद है कि आप सब ठीक हैं।

साल बहुत तेज़ी से बीत रहा है और अब हम Mindshifting May पर पहुँच गए हैं। यह शायद वह महीना है जिसका मुझे सबसे ज़्यादा इंतज़ार रहता है, खासकर इसलिए कि इसमें Prolog भी है!

मुझे उम्मीद है कि आपको Analytical April पसंद आया। आपमें से बहुत-बहुत लोगों ने हिस्सा लिया और मुझे लगता है कि यह अब तक के सबसे सफल महीनों में से एक रहा। अप्रैल में मैंने Functional February के एक देर से आए इंटरव्यू में Simon Peyton Jones से भी बात की। वह वाकई बहुत अच्छा रहा और मैं ज़रूर सलाह दूँगा कि आप इसे एक बार फिर देखिए, अगर सिर्फ इस खूबसूरत लाइन के लिए ही हो: “जब इम्पेरेटिव प्रोग्रामिंग का चूना-पत्थर घिस जाएगा, तब नीचे से फंक्शनल प्रोग्रामिंग का ग्रेनाइट निकलकर सामने आएगा।”

खैर, चलिए Mindshifting May की ओर बढ़ते हैं! हमेशा की तरह, Erik और मैं आपको जल्दी से बताएँगे कि इस महीने का उद्देश्य क्या है और हम कौन-कौन सी भाषाएँ देखेंगे।

तो इस महीने हमारे पास पूरी छह भाषाएँ हैं: Ballerina, Pharo, Prolog, Red, Tcl (टिकल) और Unison. इनमें से हर भाषा आम "मुख्यधारा" की भाषाओं से काफी अलग है, इसलिए हमारा सुझाव है कि आप एक से ज़्यादा भाषाएँ आज़माइए, ताकि आपको अंदाज़ा हो सके कि ये कैसे अलग हैं। मैं तो Prolog की ज़रूर सलाह दूँगा, क्योंकि यह उन भाषाओं में से एक है जिनमें मुझे अपनी ज़िंदगी में कोडिंग करने में सबसे ज़्यादा मज़ा आया है। Erik भी Unison को लेकर बहुत उत्साहित हैं, तो वह भी आज़माने लायक एक और अच्छी भाषा है।

बैज

Mindshifting May का बैज पाने के लिए आपको मई के दौरान इनमें से किसी एक भाषा में कोई भी पाँच अभ्यास पूरे करने होंगे।

इसके अलावा पूरे साल चलने वाला 12in23 बैज भी है। उसे पाने के लिए आपको उस भाषा में हमारे चुनिंदा पाँच अभ्यास हल करने होंगे। अगर आप यह मई के बाद देख रहे हैं, तो आप यह हिस्सा साल में कभी भी पूरा कर सकते हैं, इसलिए आपसे कुछ छूटा नहीं है। इन अभ्यासों को चुनना मुश्किल था, क्योंकि ये सारी भाषाएँ एक-दूसरे से बहुत अलग हैं। इसलिए हमने ऐसे आम अभ्यास चुने जिन्हें हल करने में मज़ा आता है और जिन्हें अलग-अलग तरीकों से करके देखना दिलचस्प लगता है।

  • एक्रोनिम: किसी वाक्यांश को उसके एक्रोनिम में बदलना
  • आइसोग्राम: जाँचना कि किसी वाक्यांश में अक्षर दोहराते हैं या नहीं
  • रोमन अंक: किसी दशमलव संख्या को रोमन अंकों में बदलना
  • बारिश की बूँदें: किसी संख्या को बारिश की बूँदों की आवाज़ों में बदलना
  • अंतरिक्ष युग: हिसाब लगाना कि हमारे सौर मंडल के ग्रहों पर कोई कितने साल का होगा

ये अभ्यास और पिछले महीनों के अभ्यास सभी #12in23 पेज पर मिल जाएँगे।

अवलोकन

चलिए, अब हर भाषा पर एक नज़र डालते हुए उन्हें समझते हैं।

Prolog:

  • सोचने का एक अलग तरीका। एक प्रोग्राम को संबंधों के एक समूह के रूप में परिभाषित किया जाता है। फिर आप यूनिफिकेशन (पैटर्न मिलान) की मदद से संबंधों के डेटाबेस पर "क्वेरी" करके उत्तर ढूँढते हैं। नियम-आधारित सिस्टम के लिए बिल्कुल उपयुक्त।
  • सिंटैक्स बहुत कम है। सिर्फ एक डेटा टाइप (टर्म) और भाषा की संरचना का एक तत्व (क्लॉज़) है। क्लॉज़ पूरी तरह टर्म से बनते हैं और तथ्य या नियम परिभाषित कर सकते हैं।
  • बहुत डिक्लेरेटिव। यह चिंता कम कीजिए कि चीज़ों की गणना कैसे होती है, और ज़्यादा ध्यान इस पर दीजिए कि क्या गणना होनी चाहिए। कई मामलों में इसका मतलब है कम कोड।
  • बड़े सर्च स्पेस पर क्वेरी करने के लिए अच्छी तरह काम करने के लिए बनाया गया है। अलग-अलग सर्च रणनीतियाँ (डेप्थ फर्स्ट, ब्रेड्थ फर्स्ट) और अपने-आप प्रूनिंग का समर्थन।

Unison

  • Unison के कोड में वर्ज़न टकराव होते ही नहीं! एक Unison फंक्शन अपनी डिपेंडेंसी के हैश जानता है, इसलिए वह अपने लिए ज़रूरी कोड का सही वर्ज़न ढूँढ सकता है।
  • Unison आपको लोकल डेवलपमेंट UI और होस्टेड रिपॉज़िटरी में लाइव कोड ब्राउज़ करने की सुविधा देता है, ताकि आप जिन लाइब्रेरी पर निर्भर हैं उनका सोर्स कोड देखने के लिए हमेशा क्लिक करके आगे बढ़ सकें।
  • Abilities "इफेक्ट्स" (जैसे IO) को पूरी तरह फंक्शनल तरीके से संभालने का एक तरीका है।

Pharo

  • सिंटैक्स बहुत कम है, पूरा सिंटैक्स एक पोस्टकार्ड पर आ जाता है (सिर्फ 6 रिज़र्व्ड शब्द!)। मैसेज सिंटैक्स प्राकृतिक भाषाओं जैसा होता है: एक कर्ता, एक क्रिया और पूरक (between: 1 and: 2 +)। सेमांटिक्स भी सरल हैं (जैसे बेहद आसान प्रीसीडेंस नियम)। इससे सीखना और पढ़ना आसान हो जाता है।
  • शुरुआती सीखने का दौर पार कर लेने के बाद उत्पादकता बहुत अच्छी रहती है। इसके कई कारण हैं: सरल सेमांटिक्स और कम सिंटैक्स, और साथ ही Pharo की कुछ खास विशेषताएँ जिनका ज़िक्र आगे किया गया है।
  • ज़्यादातर प्लेटफॉर्म (Windows, macOS, Linux और ARM समर्थन) पर एक तेज़ वर्चुअल मशीन (OpenSmalltalk) पर चलता है।
  • यह सिर्फ Smalltalk का एक इम्प्लीमेंटेशन नहीं है, बल्कि अब भी सक्रिय रूप से विकसित किया जा रहा है (SmallTalk का सबसे नया वर्ज़न 1980 का SmallTalk 80 है)।
  • दोस्ताना समुदाय।

Tcl (जिसे "टिकल" कहा जाता है)

  • सिंटैक्स बहुत कम है, सिर्फ 12 नियम, और वह एक कागज़ के टुकड़े पर आ जाता है। सेमांटिक्स भी अपेक्षाकृत सीधे हैं। इससे प्रोग्राम पढ़ने और सीखने में आसान हो जाते हैं।
  • कोरूटीन के ज़रिए सरल कॉन्करेंसी, जिससे एसिंक्रोनस कोड को सिंक्रोनस कोड की तरह लिखा जा सकता है।
  • नेटवर्क प्रोग्रामिंग और एसिंक्रोनस फाइल I/O के लिए बिल्ट-इन इवेंट लूप।
  • परिपक्व, पर अब भी विकसित हो रही है।

Ballerina

  • JSON, XML और टेबुलर डेटा को टाइप-सेफ, डिक्लेरेटिव तरीके से संसाधित करने के लिए, भाषा में ही शामिल क्वेरी के साथ फर्स्ट-क्लास समर्थन।
  • स्ट्रक्चरल टाइपिंग (डक टाइपिंग) के साथ लचीले टाइप, जो यहाँ आम हैं। क्लोज़्ड टाइप सबटाइपिंग करने का एक तरीका हैं, जबकि ओपन टाइप बहुत ज़्यादा डेटा भेजे जाने की स्थिति को भी सहजता से संभाल लेते हैं। HTTP रिसोर्स में इस्तेमाल करने पर डेटा बाइंडिंग और वैलिडेशन पहले से मौजूद रहते हैं।
  • आम इंटीग्रेशन पैटर्न और कनेक्टर के लिए बिल्ट-इन समर्थन, जिनमें डिस्ट्रिब्यूटेड ट्रांज़ैक्शन, कम्पनसेशन और सर्किट ब्रेकर शामिल हैं।
  • हर Ballerina प्रोग्राम को किसी भी Open Telemetry टूल से अपने-आप देखा जा सकता है, जिससे आप कोड के व्यवहार और प्रदर्शन पर पूरा नियंत्रण रखते हैं और उसे साफ़-साफ़ देख पाते हैं।
  • strands के ज़रिए बढ़िया कॉन्करेंसी, जो हल्के थ्रेड होते हैं। नॉन-ब्लॉकिंग IO कॉल आसान हैं। कंपाइलर workers के बीच भेजे और पाए जाने वाले कॉल की जाँच में मदद कर सकता है, जिससे डेडलॉक से बचा जा सकता है। इम्यूटेबिलिटी नेटवर्किंग के लिए भी बहुत फायदेमंद है।
  • यूनियन टाइप के ज़रिए स्पष्ट एरर हैंडलिंग, और इसमें मदद के लिए check का सिंटैक्टिक शुगर।

Red

  • हल्का। पूरी टूलचेन मात्र 1.5 MB डाउनलोड की है, एक ही एक्ज़ीक्यूटेबल।
  • पोर्टेबल। क्रॉस-कंपाइलेशन आसान। बिना डिपेंडेंसी के छोटी बाइनरी बनाता है। मेमोरी की खपत कम।
  • Red खुद अपनी मेटा-भाषा और अपना डेटा-फॉर्मैट है (LISP की तरह)। प्रोग्राम कोड को पढ़ और बदल सकते हैं।
  • रिएक्टिव: प्रोग्राम के आकार और जटिलता को कम करने के लिए ऑब्जेक्ट को आपस में जोड़ा जा सकता है (Excel शीट की तरह सोचिए)।

इन भाषाओं का उपयोग कहाँ होता है?

Prolog:

  • आर्टिफिशियल इंटेलिजेंस (IBM का Watson)
  • (प्राकृतिक) भाषा प्रोसेसिंग
  • नॉलेज बेस के लिए डिस्ट्रिब्यूटेड डेटाबेस (TerminusDB)
  • यहाँ तक कि Java Virtual Machine के टाइप नियम तय करने में भी इस्तेमाल हुआ है

Unison

  • डिस्ट्रिब्यूटेड सिस्टम लिखने में
  • सामान्य वेब सर्विस
  • बैच कंप्यूटिंग जॉब

Pharo

  • इंटरैक्टिव टूल के लिए
  • बहुत अलग-अलग क्षेत्रों में: ऑनलाइन ट्रेडिंग प्लेटफॉर्म और इन्वेस्टमेंट मैनेजमेंट का क्लाउड-आधारित टूल
  • रक्षा उद्योग में यूज़र इंटरफेस और इंटरैक्शन का प्रोटोटाइप बनाने में
  • इवेंट प्लानिंग के लिए वेब आधारित एप्लिकेशन
  • API, डेटा और सिस्टम की खोजबीन के लिए मोल्डेबल डेवलपमेंट एनवायरनमेंट टूल

Tcl

  • ग्लू कोड के रूप में या एम्बेड करके
  • CISCO राउटर के GUI में
  • तरह-तरह के मैन्युफैक्चरिंग सिस्टम
  • NASA ने इसे कई मौकों पर इस्तेमाल किया है
  • Pixar, Boeing, Intel, NBC जैसी कई बड़ी कंपनियाँ भी शामिल हैं।
  • Tk, यानी विंडो बनाने की टूलकिट, को perl/python/ruby जैसी दूसरी "स्क्रिप्टिंग" भाषाओं ने भी अपना लिया है।
  • Expect, इंटरैक्टिव CLI एप्लिकेशन को अपने-आप चलाने का टूल

Ballerina

  • क्लाउड नेटिव एप्लिकेशन के लिए
  • MOSIP इसे इस्तेमाल करता है। MOSIP एक बुनियादी पहचान प्लेटफॉर्म है जो सरकारों और दूसरे संगठनों को कम खर्च में डिजिटल और बुनियादी पहचान प्रणालियाँ लागू करने में मदद करता है।

प्रोग्रामिंग की दृष्टि से ये भाषाएँ दिलचस्प क्यों हैं?

Prolog:

  • लॉजिक प्रोग्रामिंग भाषा (सबसे पहली भाषाओं में से एक), जो अपने आप में एक पैराडाइम है (OO और फंक्शनल प्रोग्रामिंग की तरह)
  • डायनामिकली टाइप्ड

Unison

  • पूरी तरह फंक्शनल भाषा
  • स्टैटिकली टाइप्ड

Pharo

  • ऑब्जेक्ट-ओरिएंटेड भाषा, पर SmallTalk के अर्थ में। "आम" ऑब्जेक्ट-ओरिएंटेड भाषाओं से अलग: न कोई कंस्ट्रक्टर, न टाइप घोषित करना, न इंटरफेस, न प्रिमिटिव टाइप।
  • डायनामिकली टाइप्ड

Tcl

  • मल्टी-पैराडाइम: ऑब्जेक्ट-ओरिएंटेड, इम्पेरेटिव और फंक्शनल शैलियाँ समर्थित हैं
  • डायनामिकली टाइप्ड

Ballerina

  • मल्टी-पैराडाइम: ऑब्जेक्ट-ओरिएंटेड, फंक्शनल और डिक्लेरेटिव
  • स्टैटिकली टाइप्ड

Red

  • मल्टी-पैराडाइम: इम्पेरेटिव, फंक्शनल, ऑब्जेक्ट-ओरिएंटेड, सिंबॉलिक, रिएक्टिव
  • स्टैटिकली टाइप्ड

इनकी खास विशेषताएँ क्या हैं?

Prolog:

  • लचीली। कई बिल्ट-इन प्रेडिकेट कई दिशाओं में काम करते हैं। इससे एक ही सिंटैक्स में डेटा पर क्वेरी भी की जा सकती है और डेटा बनाया भी जा सकता है। कुछ समस्याएँ जो दूसरी भाषाओं में मुश्किल होती हैं, यहाँ मामूली हैं।
  • DCG एक बिल्ट-इन पार्सर कॉम्बिनेटर जैसा है, जो अनुक्रमों को पार्स करने, बनाने, पूरा करने और जाँचने के लिए बहुत अच्छा है।
  • CLP किसी प्रोग्राम को कंस्ट्रेंट के रूप में परिभाषित करने का एक कुशल तरीका है।

Unison

  • कोड टेक्स्ट नहीं, बल्कि (इम्यूटेबल) डेटा है। कोड एक डेटाबेस में संग्रहीत रहता है और Unison Codebase Manager के ज़रिए उसे इस्तेमाल और अपडेट किया जाता है। टेक्स्ट फाइल कोड को डेटाबेस में लाने का बस एक तरीका है। इम्यूटेबल डेटा का मतलब यह भी है कि टेस्ट के नतीजे कैश किए जा सकते हैं और टाइप जाँच भी सिर्फ एक बार करनी पड़ती है।
  • परिभाषाओं को नाम से नहीं, हैश से संदर्भित किया जाता है। इसे "कंटेंट-एड्रेस्ड" कोड कहते हैं। किसी परिभाषा का सिंटैक्स ट्री उसका हैश तय करता है। न वर्ज़न टकराव, और नाम बदलना बहुत आसान।
  • Unison में डॉक्स भाषा की एक फर्स्ट-क्लास चीज़ हैं और जिन फंक्शन के बारे में वे बताते हैं, उनके साथ हमेशा तालमेल में रहते हैं। आप उनमें लाइव उदाहरण डाल सकते हैं और यह पक्का कर सकते हैं कि आपके उदाहरण का कोड कंपाइल होता है।
  • क्लाउड कंप्यूटिंग के लिए आदर्श: यहाँ कोई बिल्ड नहीं होता, फंक्शन तुरंत बाँटे जा सकते हैं, और Unison की सर्विस-से-सर्विस बातचीत के लिए एनकोडर-डिकोडर लिखने में कम समय लगता है।

Pharo

  • सीधा-सादा एक्ज़ीक्यूशन मॉडल: यहाँ सब कुछ ऑब्जेक्ट है और काम पूरी तरह मैसेज के ज़रिए होता है (और मैसेज भी ऑब्जेक्ट हैं)। यहाँ तक कि कंट्रोल फ्लो भी मैसेज से होता है। मॉडल सरल है, पर बहुत शक्तिशाली। दूसरी ऑब्जेक्ट-ओरिएंटेड भाषाओं से काफी अलग।
  • आपका कोड टेक्स्ट फाइलों में नहीं, बल्कि एक Pharo इमेज में रहता है। एक Pharo इमेज में आपके एप्लिकेशन की पूरी स्थिति होती है और उसे एक Pharo वर्चुअल मशीन में चलाया जा सकता है। जब आप अपना काम सेव करते हैं, तो Pharo पूरे वातावरण की स्थिति को एक इमेज फाइल के रूप में सेव करता है। इस फाइल में सारे ऑब्जेक्ट, उनके आपसी संबंध और एक्ज़ीक्यूशन कॉन्टेक्स्ट होते हैं। इमेज फाइलें दूसरों के साथ साझा की जा सकती हैं और अलग-अलग मशीनों या प्लेटफॉर्म पर लोड की जा सकती हैं। इससे डेवलपर एक ही प्रोजेक्ट पर आसानी से मिलकर काम कर सकते हैं या Pharo में बने एप्लिकेशन बाँट सकते हैं।
  • लाइव और इमर्सिव, और Pharo के अपने IDE के ज़रिए रनटाइम में तुरंत फीडबैक। अपने प्रोग्राम को चलते-चलते बदलिए, चाहे वह अभी चल ही रहा हो! एक शक्तिशाली डीबगर, जो मेथड को फिर से शुरू करने और चलते-चलते बग ठीक करने की सुविधा देता है।

Tcl

  • सीधा-सादा टाइप सिस्टम: सब कुछ स्ट्रिंग है। "सब कुछ स्ट्रिंग है" वह तरीका था जिससे Tcl पहले बनाया गया था। अब अंदर-अंदर एक मज़बूत टाइप सिस्टम है, जिसमें Tcl की हर चीज़ (चाहे वह स्ट्रिंग हो, दशमलव संख्या, ऐरे या डिक्शनरी) का एक टाइप-विशिष्ट रूप भी होता है और एक स्ट्रिंग रूप भी। इससे Tcl कोड का परफॉर्मेंस बहुत सुधरता है, क्योंकि अब उसे स्ट्रिंग से आगे-पीछे बदलने की ज़रूरत नहीं पड़ती।
  • "सब कुछ कमांड की तरह चलता है"। यहाँ कोई बिल्ट-इन कमांड नहीं है। Tcl के साथ कमांड की एक "स्टैंडर्ड लाइब्रेरी" आती है, जिसमें if और while आदि शामिल हैं। नए कंट्रोल फ्लो कमांड जोड़ना बहुत आसान है, जैसे कोई until लूप। Tcl कमांड को ओवरराइड करना भी आसान है।
  • कॉम्पैक्ट होने, सरल सेमांटिक्स होने और C-लाइब्रेरी के रूप में बने होने की वजह से इसे एम्बेड करना आसान है।

Ballerina

  • क्लाउड नेटिव। JSON से यूज़र-परिभाषित टाइप में बिल्ट-इन कन्वर्ज़न। (माइक्रो)सर्विस बनाने के लिए बेहद हल्का सिंटैक्स। सर्विस का बिल्ट-इन कॉन्करेंट एक्ज़ीक्यूशन। HTTP (1 और 2), graphql और gRPC का सीधे समर्थन।
  • आपके कोड को अलग-अलग क्लाउड पर डिप्लॉय करने के लिए अपने-आप आर्टिफैक्ट बनाता है। ये आर्टिफैक्ट Dockerfile, Docker इमेज, Kubernetes YAML फाइल या सर्वरलेस फंक्शन हो सकते हैं।
  • कोड को सीक्वेंस डायग्राम के रूप में दिखाने की बिल्ट-इन सुविधा। कोड का फ्लो देखने के लिए बहुत बढ़िया। HTTP कॉल भी दिखा सकता है।

Red

  • डोमेन-स्पेसिफिक भाषाएँ/"डायलेक्ट" बनाने और पार्स करने के लिए बहुत अच्छा (Rebol की शब्दावली में)। कई बिल्ट-इन डायलेक्ट:
  • Red/System: एक C-स्तर की सिस्टम प्रोग्रामिंग भाषा, जो नेटिव कोड में कंपाइल होती है
  • Parse: एक शक्तिशाली PEG पार्सर
  • VID: GUI लेआउट बनाने का एक सरल डायलेक्ट
  • Draw: 2D वेक्टर ड्रॉइंग का एक डायलेक्ट
  • Rich-text: रिच-टेक्स्ट बताने का एक डायलेक्ट
  • GUI बनाना आसान। पूरी तरह क्रॉस-प्लेटफॉर्म और नेटिव। टू-वे बाइंडिंग, लाइव-अपडेटिंग और इवेंट का समर्थन करता है, और OS की सुविधाओं तक पहुँच देता है।

मई में लोगों को कौन-सी भाषाएँ आज़मानी चाहिए?

ये सभी अपने-आप में दिलचस्प भाषाएँ हैं, इसलिए आप किसी के भी पक्ष में तर्क दे सकते हैं।

  • अगर आपकी दिलचस्पी क्लाउड कंप्यूटिंग में है, तो Ballerina और Unison बढ़िया विकल्प हैं। Tcl में भी कॉन्करेंसी की शानदार सुविधाएँ हैं।
  • अगर आप ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से परिचित हैं, पर उसका कोई अलग रूप देखना चाहते हैं, तो Pharo आज़माइए।
  • अगर आप ऐसी भाषा में प्रोग्राम करने का अनुभव लेना चाहते हैं जिसके पीछे टेक्स्ट फाइलें नहीं होतीं, तो या तो Pharo और उसका अनोखा, शक्तिशाली IDE आज़माइए, या Unison Codebase Manager वाला Unison।
  • अगर आपको मिनिमलिज़्म पसंद है, तो Tcl, Prolog, Pharo और Red, सभी में सिंटैक्स काफी कम है और सेमांटिक्स अपेक्षाकृत सरल हैं।
  • अगर आप पैराडाइम का कोई दिलचस्प मेल देखना चाहते हैं, तो Ballerina, Tcl और Red, तीनों अलग-अलग पैराडाइम का समर्थन करते हैं।
  • अगर आप कुछ असामान्य पैराडाइम आज़माना चाहते हैं, तो लॉजिक प्रोग्रामिंग के लिए Prolog, रिएक्टिव प्रोग्रामिंग के लिए Red और डिक्लेरेटिव प्रोग्रामिंग के लिए Ballerina आज़माइए।
  • अगर आपको फंक्शनल प्रोग्रामिंग पसंद है, तो Unison देखिए, और खास तौर पर उसकी Abilities।
  • अगर आपकी दिलचस्पी मेटाप्रोग्रामिंग में है, तो Tcl, Prolog, Pharo और Red, सभी में अच्छा समर्थन है।

और अगर आपके पास समय है, तो मेरा सुझाव है कि आप दो-तीन भाषाएँ ज़रूर आज़माइए! ये सब काफी अनोखी हैं। एक ही अभ्यास को कुछ चुनिंदा भाषाओं में हल कीजिए और देखिए कि उनका इम्प्लीमेंटेशन कितना अलग होता है।

01 मई 2023 · क्या यह काम की लगी?