हेलीओस कर्नेल (जावास्क्रिप्ट में शामिल सुविधाजनक)

नमस्ते विश्व

यह सब एक सरल विचार के साथ शुरू हुआ: मैं चाहता था कि मैं कुछ लिख सकूं

include( "path/to/someLibrary.js" ); 

और नीचे दी गई वस्‍तुओं का उपयोग स्क्रिप्ट में घोषित किया गया है। तो लाइब्रेरी दिखाई दी हेलिओस कर्नेल



यह लाइब्रेरी शामिल () फ़ंक्शन को परिभाषित करता है, फ़ाइलों के बीच निर्भरता की निगरानी करता है, और यह सुनिश्चित करता है कि आवश्यक स्रोत कोड का उपयोग करने से पहले आरंभीकृत किया जाता है जो उन्हें कहा जाता है।

नतीजतन, प्रत्येक स्क्रिप्ट कुछ इस तरह दिखती है:

 //    include( "path/to/someLibrary.js" ); include( "path/to/someOtherLibrary.js" ); function init() { //   -   ,   //  ,   ,    someLibrary.doSomething(); var mySomething = new someLibrary.Something(); someOtherLibrary.doSomethingElse(); } 

सभी स्क्रिप्ट जिनका पथ शामिल करने के लिए एक पैरामीटर के रूप में पारित किया गया है () में समान संरचना होनी चाहिए, अर्थात, उनका कोड init () फ़ंक्शन के अंदर होना चाहिए, और वे शामिल () के माध्यम से घोषित अपनी निर्भरता हो सकते हैं। हेलिओस कर्नेल आवश्यक स्क्रिप्ट को जोड़ता है और उन्हें वांछित क्रम में आरंभ करता है।


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


मैंने इस लाइब्रेरी को यथासंभव सरल (कार्यक्षमता के मामले में) बनाने की कोशिश की। इसमें कई उपयोगी टुकड़े भी शामिल हैं जो स्वाभाविक रूप से इसके पूरक हैं।

लाइब्रेरी दो और उपयोगी कार्यों की घोषणा करती है: कर्नेल। क्रेक () और कर्नेल.रेल () , जिसका उपयोग रनटाइम में आवश्यक स्क्रिप्ट (सभी निर्भरता के साथ) को गतिशील रूप से लोड और अनलोड करने के लिए किया जा सकता है। यह कुछ इस तरह दिखता है:

 //   -  //       AppController.prototype.doSomethingHandler = function() { //     this.magicLibraryTicket = kernel.require( "path/to/magicLibrary.js", function() { //       , //      magicLibrary.doSomething(); } ); } 

 //     , , //        AppController.prototype.stopSomethingHandler = function() { //       magicLibrary.stopDoingSomething(); //  ,     kernel.release( this.magicLibraryTicket ); } 

ये दो कार्य ( kernel.require () और kernel.release () ) लाइब्रेरी को सूचित करते हैं कि किसी प्रकार की स्क्रिप्ट की आवश्यकता थी (या कि किसी प्रकार की स्क्रिप्ट की अब आवश्यकता नहीं है)। पुस्तकालय स्वयं यह तय करता है कि जब लोड करना और उतारना आवश्यक हो - यदि, उदाहरण के लिए, किसी अन्य स्थान पर कुछ स्क्रिप्ट का भी उपयोग किया जाता है, तो इसे कर्नेल.रेल () के अनुरोध पर अनलोड नहीं किया जाएगा।

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

हेलिओस कर्नेल लाइब्रेरी में एक सुविधाजनक फ़ंक्शन गेटस्टैटिस्टिक्स () भी है , जो भरी हुई लिपियों की स्थिति के बारे में विस्तृत जानकारी देता है। इस फ़ंक्शन का उपयोग उपयोगकर्ता को इंटरफ़ेस में कुछ संकेतक का उपयोग करके लोडिंग प्रक्रिया के बारे में सूचित करने के लिए किया जा सकता है।

दस्तावेज़ में सब कुछ अधिक विस्तार से वर्णित किया गया है (290 kb): हेलिओस-कर्नेल-0.9-guide.pdf
आप यहां लाइब्रेरी (8 केबी) डाउनलोड कर सकते हैं: हेलियोस-कर्नेल-0.9.tar.gz
परियोजना का मुख पृष्ठ यहाँ है: home.gna.org/helios/kernel (हालांकि यह एक ही चीज़ के बारे में कहता है, केवल संक्षेप में अंग्रेजी में)।

प्रागितिहास


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

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

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

मेरे लिए, यह प्रोजेक्ट मेरे काम पर एक एंटिपोड का एक सा है। कोई बजट नहीं है, ग्राहक आपकी इच्छा, समय सीमा और प्रतिबंधों के साथ है। कभी-कभी महीनों के लिए मैं एक परियोजना पर काम नहीं करता, और कभी-कभी इसके विपरीत, मुझे हर समय बतख के साथ लगा। एक दो बार ऐसा हुआ कि मेरे पास यह विचार था कि सब कुछ पूरी तरह से बदल दिया जा सकता है, और फिर यह बेहतर / तेज़ काम करेगा, और मैंने ऐसा किया - खरोंच से सब कुछ फिर से लिखा। और यह तब तक जारी रहा जब तक मैं हेलिओस कर्नेल को कुछ "पूर्ण" स्थिति में नहीं ले आया (मेरी राय में)। खैर, आप ऊपर परिणाम देख सकते हैं।

अब मैं सोचूंगा कि आगे क्या कोड करना है। मुझे उम्मीद है कि मेरी अगली रिपोर्ट दो साल की तुलना में पहले होगी :-)

Source: https://habr.com/ru/post/In127557/


All Articles