परिचय
नमस्ते सभी को। दिसंबर में आपका स्वागत है। उम्मीद है कि आप अच्छे से हैं।
हमारा अक्टूबर बहुत व्यस्त रहा। हमने अभी-अभी समुदाय के हलों में एक बड़ा सुधार पेश किया है। अब हम इनमें दोहराव हटा देते हैं, ताकि मिलते-जुलते हल सिर्फ एक बार दिखें। हमने क्रमबद्ध करने के नए विकल्प जोड़े हैं और कोड से खोजने की सुविधा दी है। अगर आप C# देखें, तो पता चलेगा कि हमने अलग-अलग प्रोग्रामिंग कॉन्सेप्ट के आधार पर फिल्टर करने की सुविधा भी जोड़ी है। तो अब आप ऐसे हल ढूँढ सकते हैं जिनमें बिट शिफ्टिंग, रिकर्शन या आपकी पसंद की कोई भी चीज़ इस्तेमाल हुई हो। कम्युनिटी वीक में हम इसे दूसरे ट्रैक पर भी लागू करेंगे।
लेकिन फिलहाल, चलिए #12in23 पर ध्यान दें। नवंबर एक दिलचस्प महीना था, जिसमें हमने असेंबली भाषाएँ खँगालीं। लेकिन इस महीने हम बहुत अलग-अलग तरह की भाषाओं की ओर बढ़ रहे हैं, खास तौर पर ColdFusion, Groovy, Lua, VimScript और Wren। हमेशा की तरह, Erik हमें बताएँगे कि इन भाषाओं को दिलचस्प और अनोखा क्या बनाता है।
बैज
हमेशा की तरह, आप इन भाषाओं में कोई भी 5 अभ्यास पूरे करके दिसंबर की विविधताएँ बैज कमा सकते हैं। हमारे पास साल भर का बैज भी है, और मुझे पता है कि आपमें से कई लोग उसकी ओर बढ़ रहे हैं। उसके लिए हमारे पास पूरे करने के लिए 5 चुनिंदा अभ्यास हैं। वे ये हैं:
- ऑल योर बेस: अंकों के क्रम के रूप में दर्शाई गई किसी संख्या को किसी दूसरे आधार में बदलिए।
- ऐरे को समतल कीजिए: एक नेस्टेड संग्रह लीजिए और उसे एक ही, बिना नेस्टिंग वाला संग्रह बनाकर लौटाइए।
- रानी का हमला: तय कीजिए कि शतरंज के बोर्ड पर रखी दो रानियाँ एक-दूसरे पर हमला कर सकती हैं या नहीं।
- D&D पात्र: बेतरतीब ढंग से Dungeons & Dragons पात्र बनाइए।
- रन-लेंथ एनकोडिंग: रन-लेंथ एनकोडिंग और डिकोडिंग लागू कीजिए।
अवलोकन
ColdFusion
- 1995 में Allaire Corporation ने इसे बनाया। 2001 में Macromedia ने Allaire को खरीद लिया और 2005 में Adobe ने Macromedia को खरीद लिया।
- इसे तेज़ वेब-डेवलपमेंट प्लेटफॉर्म के रूप में बनाया गया था
- यह Java Virtual Machine (JVM) पर चलता है
- इसके दो अलग-अलग सिंटैक्स हैं, जो दिखने में अलग लगते हैं, पर अर्थ में एक जैसे हैं:
- पुराना, टैग-आधारित मार्कअप सिंटैक्स, जो HTML को बढ़ाकर उसमें डायनैमिक सामग्री दिखाता है।
- नया, ECMAScript जैसा सिंटैक्स उसी जगह इस्तेमाल किया जा सकता है जहाँ टैग-आधारित सिंटैक्स होता है, और साथ ही अलग स्क्रिप्ट फाइलों में भी। इसका उद्देश्य था कि बिज़नेस लॉजिक को मार्कअप से हटाकर एक अलग स्क्रिप्ट फाइल में ले जाया जाए।
- CFScript एक सामान्य उद्देश्य वाली भाषा है जो JVM पर चलती है, और Exercism इसी का इस्तेमाल करता है। व्यवहार में यह अपने वेब सर्वर वाले मूल स्वरूप से कभी ज़्यादा दूर नहीं गई।
- ColdFusion एक सशुल्क उत्पाद है, लेकिन Lucee Foundation (स्विट्ज़रलैंड में स्थित एक गैर-लाभकारी संस्था) अभी भी अपने ओपन-सोर्स ColdFusion सर्वर को सक्रिय रूप से विकसित कर रही है, और Exercism ट्रैक के लिए हम उसी के Lucee Server का इस्तेमाल करते हैं।
- अभी भी सक्रिय रूप से विकसित किया जा रहा है
- मुख्य रूप से एंटरप्राइज़ सॉफ्टवेयर में इस्तेमाल होता है; इसके ग्राहकों में Apple, Adobe, General Motors जैसे कई नाम हैं
Groovy
- 2003 से James Strachan ने इसे बनाना शुरू किया। 2015 में यह प्रोजेक्ट Apache ने अपना लिया।
- इसका उद्देश्य था JVM पर एक डायनैमिकली टाइप्ड भाषा बनाना (जबकि Java स्टैटिकली टाइप्ड होती है), जो बॉयलरप्लेट कोड भी कम कर दे।
- हालाँकि ज़्यादातर Java कोड मान्य Groovy कोड भी होता है, फिर भी इनमें कई अंतर हैं (जैसे Groovy डायनैमिक टाइपिंग और उन्नत मेटाप्रोग्रामिंग की सुविधा देती है)। इस भाषा पर Python और Ruby का भी काफी असर पड़ा।
- इसका इस्तेमाल स्क्रिप्टिंग, बिल्ड टूल (Gradle), CI (Jenkins), वेब ऐप (Grails) और टेस्टिंग (Spock) में होता है। Atlassian के टूल्स के लिए एक लोकप्रिय थर्ड-पार्टी ऐड-ऑन Groovy स्क्रिप्टिंग की सुविधा देता है।
Lua
- Lua को 1993 में ब्राज़ील की Pontifical Catholic University of Rio de Janeiro में Roberto Lerusalimschy, Luiz Henrique de Figueiredo और Waldemar Celes ने बनाया था।
- इसका नाम LOO-ah बोला जाता है, जिसका पुर्तगाली में मतलब चंद्रमा है। यह उस Sol भाषा की ओर इशारा करता है जिससे इसे कुछ प्रेरणा मिली थी, और Sol का पुर्तगाली में मतलब सूरज है।
- इसे मुख्य रूप से एम्बेड करने के लिए बनाया गया था, और इसका ध्यान गति, पोर्टेबिलिटी, एक्सटेंसिबिलिटी और विकास में आसानी पर है।
- इस पर Modula, CLU, C++, SNOBOL और AWK का असर है। जैसे LISP और Scheme में डेटा संरचना का एक ही सर्वव्यापी तरीका (लिस्ट) था, वैसे ही Lua में यह काम टेबल करती है।
- इसे बाइटकोड के ज़रिए इंटरप्रेट किया जाता है, आमतौर पर चलते समय, लेकिन यह पहले से भी किया जा सकता है।
- इसका इस्तेमाल मुख्य रूप से स्क्रिप्टिंग के लिए होता है, जैसे World of Warcraft, Dota 2 और Crysis जैसे खेलों में, या Adobe Lightroom जैसे ऐप्स और FreeBSD के कुछ सिस्टम सॉफ्टवेयर में। इसे एक्सटेंसिबिलिटी जोड़ने के लिए भी खूब इस्तेमाल किया जाता है, जैसे Redis, Neovim और Nginx में।
VimScript
- VimScript (जिसे Vim Script, बीच में स्पेस के साथ, या Vim भाषा के लिए छोटा करके VimL भी कहते हैं) वह स्क्रिप्टिंग भाषा है जो Vim टेक्स्ट एडिटर में इस्तेमाल होती है।
- यह ex से निकली है, जो लाइन-ओरिएंटेड विज़ुअल एडिटर था और Vi से पहले आया था।
- यह सामान्य उद्देश्य वाली भाषा नहीं, बल्कि एक विशेष भाषा है, जो प्लगइन, कॉन्फिगरेशन, मैक्रो और फंक्शन के ज़रिए Vim की कार्यक्षमता बढ़ाने और उसे अपने हिसाब से ढालने के लिए एक कारगर और अनुकूलित स्क्रिप्टिंग वातावरण देती है।
- Vim मुख्य रूप से C में लिखा गया है, लेकिन Vimscript लोगों को एक हाई-लेवल स्क्रिप्टिंग भाषा के ज़रिए Vim को अपने हिसाब से ढालने और बढ़ाने की सुविधा देती है।
- इसका इस्तेमाल होता है, ज़ाहिर है, Vim में, और Vim के एक फोर्क NeoVim में भी।
Wren
- 2016 में Bob Nystrom ने इसे लिखा, जो Crafting Interpreters किताब के लेखक हैं।
- लक्ष्य: छोटी, सरल, तेज़।
- इसे दूसरे ऐप्स में एम्बेड करने के लिए बनाया गया है। लेखक को मौजूदा विकल्प (जैसे Lua और TCL) कमज़ोर लगे, और वे एक ऐसी सरल, एम्बेड की जा सकने वाली भाषा चाहते थे जो ऑब्जेक्ट-ओरिएंटेड पृष्ठभूमि वाले लोगों को स्वाभाविक लगे।
- इसका इस्तेमाल होता है:
- TIC-80 - छोटे-छोटे गेम बनाने, खेलने और साझा करने के लिए एक फैंटेसी कंप्यूटर (PICO8 जैसा)
- DOME - गेम बनाने के लिए एक क्रॉस-प्लेटफॉर्म फ्रेमवर्क।
- luxe - गेम बनाने के लिए एक क्रॉस-प्लेटफॉर्म, तेज़ विकास वाला गेम इंजन।
- Wren Console - एक Wren REPL और CLI, जिसे ज़्यादातर Wren में ही Exercism के पुराने योगदानकर्ता Josh Goebel ने लिखा है, और हम Wren ट्रैक के लिए इसी का इस्तेमाल करते हैं।
और प्रोग्रामिंग के नज़रिए से, ये एक-दूसरे से कैसे अलग हैं?
ColdFusion
- डायनैमिकली टाइप्ड
- मल्टी-पैराडाइम, मुख्य रूप से OOP, पर फंक्शनल की ओर बढ़ता हुआ।
Groovy
- आमतौर पर डायनैमिकली टाइप्ड, लेकिन स्टैटिकली टाइप्ड भी हो सकती है (और ग्रैजुअली टाइप्ड भी)
- इंटरप्रेट और कंपाइल, दोनों की जा सकती है (वर्ज़न 2 से)। इसी वजह से इसका इस्तेमाल अक्सर स्क्रिप्ट में होता है
- मल्टी-पैराडाइम: मुख्य रूप से ऑब्जेक्ट-ओरिएंटेड, लेकिन इम्परेटिव, फंक्शनल और डिक्लेरेटिव भी
Lua
- डायनैमिकली टाइप्ड और आमतौर पर इंटरप्रेट की जाती है, लेकिन पहले से कंपाइल भी की जा सकती है
- मल्टी-पैराडाइम: प्रोसीजरल, ऑब्जेक्ट-ओरिएंटेड (हालाँकि थोड़ा अलग तरीके से), फंक्शनल और डेटा-ड्रिवन
VimScript
- डायनैमिकली टाइप्ड और इंटरप्रेट की जाने वाली
- मल्टी-पैराडाइम: इम्परेटिव, फंक्शनल और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक सरल रूप
Wren
- डायनैमिकली टाइप्ड, लेकिन स्टैटिकली परिभाषित; इससे कंपाइलर बहुत तेज़ हो पाता है।
- मुख्य रूप से ऑब्जेक्ट-ओरिएंटेड भाषा, लेकिन इम्परेटिव और थोड़ी फंक्शनल प्रोग्रामिंग भी
इन भाषाओं को शानदार बनाने वाली चीज़ें क्या हैं?
ColdFusion
- सर्वर प्रबंधन और एप्लिकेशन बनाने के बीच बहुत अच्छा अलगाव। एडमिन कंसोल डेटाबेस कनेक्शन और सर्वर मॉनिटरिंग (और बाकी सब कुछ) सेट करता है; एप्लिकेशन बनाने वालों को बस एक डेटासोर्स का नाम चाहिए (एक CF ऑब्जेक्ट जिसमें ज़रूरी मेथड होते हैं और जो DBMS के उपयुक्त हिस्सों से पहले से जुड़ा होता है), साथ ही एप्लिकेशन फाइलों के लिए एक डायरेक्टरी तक लिखने की पहुँच।
- JVM और Java इकोसिस्टम की शक्ति का फायदा उठाइए, जिसमें कोई भी Java लाइब्रेरी इम्पोर्ट करके CF के अंदर इस्तेमाल करने की सुविधा भी शामिल है।
Groovy
- सामान्य उद्देश्य: लगभग किसी भी काम के लिए इस्तेमाल की जा सकती है, ऐप्स और वेबसाइटों समेत।
- JVM पर चलने के कारण इसके सारे फायदे मिलते हैं: परिपक्व, बेहद तेज़ VM और बड़ी संख्या में उपलब्ध लाइब्रेरी। Java के साथ अच्छी तरह इंटरऑप करती है।
- Java से लोगों को जो कई दिक्कतें हो सकती हैं, उन्हें यह कम करती है, जैसे चेक्ड एक्सेप्शन, null सुरक्षा, कोड का ज़रूरत से ज़्यादा लंबा होना और उन्नत मेटाप्रोग्रामिंग की कमी।
- आधुनिक भाषा: उन्नत टाइप इन्फरेंस, क्लोज़र, रेगुलर एक्सप्रेशन के लिए बिल्ट-इन सिंटैक्स, और गेटर और सेटर अपने आप बन जाना।
- फंक्शनल प्रोग्रामिंग का बेहतरीन समर्थन: क्लोज़र (Ruby के ब्लॉक जैसे), करीइंग (आंशिक एप्लिकेशन), लेज़ी इवैल्यूएशन, इम्यूटेबिलिटी और बहुत कुछ।
Lua
- सामान्य उद्देश्य: एम्बेडेड सिस्टम, प्रोटोटाइपिंग, स्क्रिप्टिंग, गेम, वेब और बैकएंड डेवलपमेंट में इस्तेमाल होती है।
- सरल: सिंटैक्स कम है, जिससे भाषा सीखना आसान हो जाता है। बस कुछ ही मूल डेटा टाइप हैं और एक ही बिल्ट-इन मिश्रित डेटा टाइप है: टेबल। मेमोरी गार्बेज कलेक्ट होती है।
- पोर्टेबल: इसका इंटरप्रेटर ANSI C में लिखा गया है, और लगभग हर प्लेटफॉर्म के लिए इसका कंपाइलर मौजूद है।
VimScript
- सरल: हल्का सिंटैक्स, जिसे सीखना और इस्तेमाल करना आसान है।
- इंटरऑपरेबिलिटी: फाइलों, शेल और दूसरे प्रोग्रामों तक आसानी से पहुँच। Vim से बाहर निकले बिना बाहरी टूल की पूरी शक्ति।
- एक्सप्रेसिव: थोड़े में बहुत कुछ कीजिए। ऐसी छोटी स्क्रिप्ट लिखिए जो पढ़ने में बहुत साफ हों।
- शक्तिशाली रेगेक्स इंजन: Vimscript का रेगेक्स कार्यान्वयन Emacs Lisp से प्रेरित है, जो टेक्स्ट पर काम करने का एक शक्तिशाली साधन देता है।
Wren
- छोटी: इसका VM 4000 से कम लाइनों के कोड में बनाया गया है।
- आदर्श उदाहरण: VM का कार्यान्वयन प्यार से टिप्पणियों के साथ लिखा गया है, C में है और पढ़ना उतना मुश्किल नहीं है। किसी भाषा को बनाना सीखने का यह बढ़िया तरीका है। ज़्यादातर स्टैंडर्ड लाइब्रेरी Wren में ही बनाई गई है, तो आप देख सकते हैं कि वह कैसे बनाई गई है।
- परिचित: इसका सिंटैक्स जल्दी सीखने में मदद करता है। अगर आप Java या C++ से परिचित हैं, तो आप घर जैसा महसूस करेंगे। यह आर्गुमेंट की संख्या के आधार पर मेथड ओवरलोडिंग की सुविधा देती है।
- बहुत अच्छा डॉक्युमेंटेशन: भाषा और स्टैंडर्ड लाइब्रेरी के डॉक्स पढ़ने में आसान, विस्तृत और ढेरों उदाहरणों से भरे हैं।
- छोटी, लेकिन आश्चर्यजनक रूप से पूरी स्टैंडर्ड लाइब्रेरी।
खास खूबियाँ
ColdFusion
- सब कुछ पहले से शामिल: ढेरों चीज़ें बिल्ट-इन हैं: PDF, ZIP, Excel, XML, JSON के साथ काम, API बनाना, ईमेल, S3 इंटीग्रेशन, कई अलग-अलग डेटाबेस… बिना कोई अतिरिक्त पैकेज इंस्टॉल किए। वर्ज़न असंगतियाँ कम करने के लिए बढ़िया।
- स्केलेबल और सुरक्षित, एंटरप्राइज़ सॉफ्टवेयर के लिए बढ़िया।
- सरल, सहज प्रोग्रामिंग, यानी नए लोग भी जटिल, डेटा-आधारित वेब पेज बहुत जल्दी चला सकते हैं। DreamWeaver के साथ इसका इंटीग्रेशन बेहतरीन है।
Groovy
- लचीला सिंटैक्स: डॉट और गोल ब्रैकेट छोड़े जा सकते हैं, जिससे बहुत अच्छी डोमेन-स्पेसिफिक भाषाएँ बनाई जा सकती हैं।
- मेटाप्रोग्रामिंग: रनटाइम और कंपाइल-टाइम, दोनों तरह की मेटाप्रोग्रामिंग का समर्थन करती है। जैसे, @ToString एनोटेशन कंपाइल-टाइम पर ToString का कार्यान्वयन बना देगा, और रनटाइम पर ऑब्जेक्ट का मेटाक्लास बदलकर मंकी-पैचिंग की जा सकती है।
- बिल्डर: अच्छे दिखने वाले कोड के ज़रिए JSON, XML, HTML जल्दी बनाइए और संभालिए। तेज़ GUI विकास के लिए Swing के साथ बनाइए।
- ट्रेट्स: Groovy के ट्रेट्स आपको व्यवहार और प्रॉपर्टी को ऐसे हिस्सों में पिरोने देते हैं जिन्हें दोबारा इस्तेमाल किया जा सके। Ruby के मिक्सिन जैसे।
Lua
- एम्बेड करने लायक: इसे एम्बेड करना आसान बनाया गया है। आसान एम्बेडिंग के लिए इसका C API अपेक्षाकृत सरल है। आकार कोई दिक्कत नहीं है: पूरा रेफरेंस इंटरप्रेटर सिर्फ 247 kB का है!
- बढ़ाने लायक: मूल भाषा को जानबूझकर अपेक्षाकृत छोटा रखा गया है, लेकिन यह भाषा को आसानी से बढ़ाने की सुविधा देती है। इससे भाषा सीखने में आसान, एम्बेड करने में हल्की और बहुत लचीली बन जाती है।
- तेज़: Lua अक्सर सबसे तेज़ डायनैमिक भाषाओं में से एक होती है, खासकर जब LuaJit इंटरप्रेटर इस्तेमाल होता है।
VimScript
- एक्सटेंसिबिलिटी: Vimscript आपको अपने एडिटर में नई कार्यक्षमता जोड़ने देती है।
- अपने हिसाब से ढालने लायक: अपने एडिटर को वैसे ढालिए जैसा आपको पसंद हो (Vimscript के प्लगइन खुद मुख्य रूप से Vimscript में ही लिखे जाते हैं)।
- इवेंट-ड्रिवन: कुछ खास घटनाओं या शर्तों, जैसे फाइल खुलना या बफर सेव होना, के आधार पर कोड का अपने आप चलना।
- Vim की शक्ति का इस्तेमाल: Vim के फीचर और API तक बिल्ट-इन पहुँच, जिससे स्क्रिप्ट टेक्स्ट, बफर, विंडो और बहुत कुछ में बदलाव कर सकती हैं।
Wren
- तेज़: डायनैमिक भाषा के लिहाज़ से शानदार प्रदर्शन।
- एम्बेड करने लायक: दूसरे सॉफ्टवेयर में एम्बेड करना आसान। भाषा के निर्माता पहले गेम डेवलपर थे: वे गेम में स्क्रिप्टिंग की सुविधा जोड़ना चाहते थे। इसका C API काफी साफ और सरल है।
- समवर्ती: फाइबर के साथ आसान समवर्तीता और कोरूटीन, जो बहुत हल्की रचना हैं (goroutines या Erlang प्रोसेस जैसी) और एक-दूसरे से आसानी से बात कर सकती हैं।
किसे चुनें
- अगर आप वेब एप्लिकेशन बनाना चाहते हैं, तो ColdFusion और Groovy अच्छे विकल्प हैं।
- अगर आपको ऐसी भाषा में दिलचस्पी है जिसे एम्बेड किया जा सके, तो Lua और Wren मुख्य विकल्प हैं, लेकिन Groovy भी एक नज़र डालने लायक हो सकती है।
- अगर आप सामान्य उद्देश्य की स्क्रिप्ट लिखना चाहते हैं, तो वही तीन भाषाएँ, Lua, Wren और Groovy, भी अच्छी रहेंगी।
- अगर आप JVM के साथ काम करते हैं, तो ColdFusion और Groovy स्वाभाविक विकल्प हैं।
- अगर आप प्रदर्शन को महत्व देते हैं, तो Lua और Wren शायद आपके लिए सबसे अच्छे विकल्प हैं।
- अगर आपका मुख्य एडिटर Vim या NeoVim है, तो VimScript साफ तौर पर बेहतरीन विकल्प है।
- अगर आप कंपाइलर और वर्चुअल मशीन के बारे में सीखने या उन्हें बनाने में दिलचस्पी रखते हैं, तो Wren आपके लिए एकदम सही है।
- अगर आपकी पृष्ठभूमि ऑब्जेक्ट-ओरिएंटेड है, तो Wren शायद सीखने में सबसे आसान भाषा है।
- अगर आपको LISP की एक ही सर्वव्यापी डेटा-संरचना वाली बनावट पसंद आई, तो Lua आज़माइए।
- अगर आप इवेंट-ड्रिवन प्रोग्रामिंग आज़माना चाहते हैं, तो VimScript देखिए।