Vala (programming language)
वाला एक स्व-होस्टिंग संकलक के साथ एक वस्तु-उन्मुख प्रोग्रामिंग भाषा है जो सी कोड उत्पन्न करती है और जी. ओ. ऑब्जेक्ट प्रणाली का उपयोग करती है। वाला वाक्यात्मक रूप से सी #के समान है और इसमें अनाम कार्य, संकेत, गुण, जेनेरिक, सहायक स्मृति प्रबंधन, अपवाद संचालन, प्रकार अनुमान और फोरैक स्टेटमेंट जैसी उल्लेखनीय विशेषताएं शामिल हैं। इसके डेवलपर्स, जुर्ग बिलेटर और राफेल सैंड्रिनी, इन सुविधाओं को सादे सी रनटाइम में लाना चाहते थे, जिसमें कम ओवरहेड और गोबजेक्ट ऑब्जेक्ट सिस्टम को लक्षित करके कोई विशेष रनटाइम समर्थन नहीं था। सीधे मशीन कोड या असेंबली भाषा में संकलित करने के बजाय, यह एक निचले स्तर की मध्यवर्ती भाषा में संकलित होता है। यह स्रोत-से-स्रोत सी को संकलित करता है, जिसे फिर किसी दिए गए मंच, जैसे जीसीसी या क्लैंग के लिए सी संकलक के साथ संकलित किया जाता है। देशी कोड पुस्तकालयों से कार्यक्षमता का उपयोग करने के लिए पुस्तकालय इंटरफेस को परिभाषित करते हुए वापी फ़ाइलों को लिखने की आवश्यकता होती है। इन इंटरफेस परिभाषाओं को लिखना सी पुस्तकालयों के लिए अच्छी तरह से प्रलेखित है। बड़ी संख्या में पुस्तकालयों के लिए बाइंडिंग पहले से ही उपलब्ध हैं, जिनमें ऐसे पुस्तकालय भी शामिल हैं जो मल्टीमीडिया पुस्तकालय एस. डी. एल. और ओपन. जी. एल. जैसे जी. ओ. ऑब्जेक्ट पर आधारित नहीं हैं। विवरण वाला एक प्रोग्रामिंग भाषा है जो स्क्रिप्टिंग भाषाओं के उच्च-स्तरीय निर्माण-समय प्रदर्शन को निम्न-स्तरीय प्रोग्रामिंग भाषाओं के रन-टाइम प्रदर्शन के साथ जोड़ती है। इसका उद्देश्य सी में लिखे गए अनुप्रयोगों और पुस्तकालयों की तुलना में बिना किसी अतिरिक्त रनटाइम आवश्यकताओं को लागू किए और एक अलग एबीआई का उपयोग किए बिना GNOME डेवलपर्स के लिए आधुनिक प्रोग्रामिंग भाषा सुविधाओं को लाना है। हिस्ट्री वाला की कल्पना जुर्ग बिलेटर द्वारा की गई थी और इसे उनके और राफेल सैंड्रिनी द्वारा लागू किया गया था, जो सी के बजाय GNOME अनुप्रयोगों को विकसित करने के लिए एक उच्च स्तर के विकल्प की कामना करते थे। उन्हें सी #का वाक्यविन्यास और शब्दार्थ पसंद था लेकिन वे मोनो का उपयोग नहीं करना चाहते थे, इसलिए उन्होंने मई 2006 में एक संकलक पूरा किया। प्रारंभ में, इसे सी का उपयोग करके बूटस्ट्रैप किया गया था, और एक साल बाद (जुलाई 2007 में संस्करण 0.1 के जारी होने के साथ), वाला संकलक स्व-होस्टेड हो गया। 2021 तक, दीर्घकालिक समर्थन के साथ वर्तमान स्थिर रिलीज शाखा 0.48 है, और एक स्थिर संस्करण 1.0 जारी करने के लक्ष्य के साथ भाषा सक्रिय विकास के अधीन है। भाषा डिजाइन की विशेषताएं वाला जी. एल. आई. बी. और इसके उप-मॉड्यूल (जी. ओ. बी. जी., जी. एम. मॉड्यूल, जी. टी. थ्रेड, जी. आई. ओ.) का उपयोग मुख्य पुस्तकालय के रूप में करता है, जो अधिकांश ऑपरेटिंग सिस्टम के लिए उपलब्ध है और प्लेटफ़ॉर्म स्वतंत्र थ्रेडिंग, इनपुट/आउटपुट, फ़ाइल प्रबंधन, नेटवर्क सॉकेट्स, प्लगइन्स, नियमित अभिव्यक्तियों आदि जैसी चीजें प्रदान करता है। वाला का वाक्यविन्यास वर्तमान में आधुनिक भाषा सुविधाओं का समर्थन करता हैः इंटरफेस गुण संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत संकेत स्मृति प्रबंधन स्मृति प्रबंधन के लिए, जी. टाइप या जी. ओ. ऑब्जेक्ट प्रणाली संदर्भ गणना प्रदान करती है। सी में, एक प्रोग्रामर को संदर्भों को जोड़ने और हटाने का प्रबंधन मैन्युअल रूप से करना चाहिए, लेकिन वाला में, इस तरह के संदर्भ गणना का प्रबंधन स्वचालित है यदि कोई प्रोग्रामर सादे संकेतों के बजाय भाषा के अंतर्निहित संदर्भ प्रकारों का उपयोग करता है। एकमात्र विवरण जिसके बारे में आपको चिंता करने की आवश्यकता है वह है संदर्भ चक्र उत्पन्न करने से बचना, क्योंकि उस स्थिति में यह स्मृति प्रबंधन प्रणाली सही ढंग से काम नहीं करेगी। वाला एक विकल्प के रूप में संकेतों के साथ हाथ से स्मृति प्रबंधन की भी अनुमति देता है। बाइंडिंग्स वाला का उद्देश्य मौजूदा सी पुस्तकालयों, विशेष रूप से जीओबीजेक्ट-आधारित पुस्तकालयों को रनटाइम बाइंडिंग की आवश्यकता के बिना रनटाइम एक्सेस प्रदान करना है। वाला के साथ एक पुस्तकालय का उपयोग करने के लिए, केवल एक एपीआई फ़ाइल (. वापी) की आवश्यकता होती है जिसमें वाला वाक्यविन्यास में वर्ग और विधि घोषणाएं होती हैं। हालाँकि, सी + + पुस्तकालय समर्थित नहीं हैं। वर्तमान में, जी. टी. के. सहित वाला के प्रत्येक संस्करण के साथ जी. एन. यू. परियोजना और जी. एन. ओ. एम. प्लेटफॉर्म के एक बड़े हिस्से के लिए वापी फाइलें शामिल हैं। जी नामक एक पुस्तकालय भी है, जो वाला में लिखा गया है, जो सामान्य रूप से उपयोग की जाने वाली डेटा संरचनाओं के लिए जी. ओ. ऑब्जेक्ट-आधारित इंटरफेस और कक्षाएं प्रदान करता है। अन्य भाषाओं में लिखे गए अनुप्रयोगों से वाला पुस्तकालयों तक पहुँच के लिए एक बाइंडिंग जनरेटर लिखना भी आसानी से संभव होना चाहिए, जैसे कि सी #, जैसा कि वाला पार्सर को एक पुस्तकालय के रूप में लिखा जाता है, ताकि बाइंडिंग उत्पन्न करते समय सभी संकलन-समय की जानकारी उपलब्ध हो। टूल्स एडिटर्स टूलिंग फॉर वाला के विकास में हाल के वर्षों में महत्वपूर्ण सुधार देखा गया है। निम्नलिखित कुछ लोकप्रिय आई. डी. ई. और प्लग-इन वाले पाठ संपादकों की सूची है जो वाला में प्रोग्रामिंग के लिए समर्थन जोड़ते हैंः GNOME बिल्डर विजुअल स्टूडियो कोड, वाला प्लग-इन विम के साथ, arrufat/vala. vim प्लग-इन Emacs के साथ, वाला-मोड एटम गेनी कोड इंटेलिजेंस के साथ वर्तमान में, दो सक्रिय रूप से विकसित होने वाले भाषा सर्वर हैं जो वाला के लिए कोड इंटेलिजेंस प्रदान करते हैंः, किसी भी संपादक के लिए डिज़ाइन किया गया है जो LSP का समर्थन करता है, जिसमें VSCode, vim और GNOME बिल्डर शामिल हैं, जो वर्तमान में GNOME बिल्डर में वाला के लिए डिफ़ॉल्ट भाषा सर्वर है और LSP बिल्ड सिस्टम के समर्थन के साथ किसी भी संपादक को समर्थन प्रदान करता है। वाला कार्यक्रमों के लिए डिबगिंग जी. डी. बी. या एल. एल. डी. बी. के साथ की जा सकती है। आई. डी. ई. में डिबगिंग के लिए, जी. एन. ओ. एम. बिल्डर के पास जी. डी. बी. के साथ वाला के लिए अंतर्निहित डिबगिंग समर्थन है। विजुअल स्टूडियो कोड में जी. डी. बी. और एल. एल. डी. बी. के लिए विस्तार हैं, जैसे कि सी. पी. पी. टूल और कोड. एल. एल. डी. बी.। उदाहरण हैलो वर्ल्ड एक सरल "हैलो, वर्ल्ड!" वाला में प्रोग्रामः शून्य मुख्य () {प्रिंट ("हैलो वर्ल्ड");} जैसा कि ध्यान दिया जा सकता है, सी या सी + + के विपरीत, वाला में कोई शीर्षलेख फ़ाइल नहीं हैं। पुस्तकालयों को जोड़ने का काम संकलन के दौरान---पी. जी. जी. मापदंडों को निर्दिष्ट करके किया जाता है। इसके अलावा, जी. एल. आई. बी. पुस्तकालय हमेशा जुड़ा रहता है और इसके नेमस्पेस को छोड़ा जा सकता है (प्रिंट वास्तव में GLib.print है)। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग नीचे एक अधिक जटिल संस्करण है जो एक उपवर्ग हैलोवर्ल्ड को परिभाषित करता है जो आधार वर्ग GLib.Object, उर्फ गोबजेक्ट वर्ग से विरासत में प्राप्त होता है। यह वाला की कुछ ऑब्जेक्ट-ओरिएंटेड विशेषताओं को दर्शाता हैः वर्ग हैलोवर्ल्डः ऑब्जेक्ट {निजी वर्ष = 0; सार्वजनिक हैलोवर्ल्ड () {} सार्वजनिक HelloWorld.with_year (इंट वर्ष) {यदि (वर्ष> 0) this.year = वर्ष;} सार्वजनिक शून्य अभिवादन () {यदि (वर्ष = = 0) प्रिंट ("हैलो वर्ल्ड \n"); अन्यथा/* '@' के साथ उपसर्ग वाली स्ट्रिंग्स स्ट्रिंग टेम्पलेट हैं। */प्रिंट (@"हैलो वर्ल्ड, $(this.year) \n");}} शून्य मुख्य (स्ट्रिंग [] आर्गस) {वार हैलोवर्ल्ड = नया HelloWorld.with_year (2021); helloworld.greeting ();} जैसा कि गोबजेक्ट लाइब्रेरी के मामले में, वाला कई विरासत का समर्थन नहीं करता है, लेकिन वाला में एक वर्ग किसी भी संख्या में इंटरफेस को लागू कर सकता है, जिसमें उनकी विधियों के लिए डिफ़ॉल्ट कार्यान्वयन हो सकते हैं। यहाँ जी. एल. आई. बी. का उपयोग करके डिफ़ॉल्ट कार्यान्वयन (कभी-कभी मिक्सिन के रूप में संदर्भित) के साथ वाला इंटरफेस को प्रदर्शित करने के लिए नमूना कोड का एक टुकड़ा है; इंटरफेस प्रिंट करने योग्य (सार्वजनिक अमूर्त स्ट्रिंग प्रिंट (); सार्वजनिक आभासी स्ट्रिंग सुंदर प्रिंट () {वापसी "कृपया" + प्रिंट ();}} वर्ग सामान्य प्रिंटः ऑब्जेक्ट, प्रिंट करने योग्य {स्ट्रिंग प्रिंट () {वापसी "मेरे बारे में मत भूलना";} वर्ग ओवरराइड प्रिंटः ऑब्जेक्ट, प्रिंट करने योग्य {स्ट्रिंग प्रिंट () {वापसी "माइंड द गैप";} सार्वजनिक ओवरराइड स्ट्रिंग सुंदर _ प्रिंट () {वापसी "ओवरराइड";} शून्य मुख्य (स्ट्रिंग [] आर्ग) {वार सामान्य = नया सामान्य प्रिंट (); वर ओवर फिर कॉलबैक कार्यों को वर्ग के एक उदाहरण के संकेत पर पंजीकृत किया जाता है। उदाहरण संकेत का उत्सर्जन कर सकता है और उदाहरण के लिए संकेत से जुड़े प्रत्येक कॉलबैक फ़ंक्शन (जिसे हैंडलर के रूप में भी संदर्भित किया जाता है) को उस क्रम में लागू किया जाएगा जिसमें वे जुड़े हुए थेः वर्ग Foo {सार्वजनिक संकेत शून्य कुछ _ घटना ();// संकेत की परिभाषा सार्वजनिक शून्य विधि () {कुछ _ घटना ();// संकेत उत्सर्जित करना (कॉलबैक का आह्वान किया जाता है)} शून्य कॉलबैक _ ए () {stdout.printf ("कॉलबैक ए");} शून्य कॉलबैक _ बी () {stdout.printf ("कॉलबैक बी");} शून्य मुख्य () {वार फू = नया फू (); foo.some_event.connect (कॉलबैक); नए धागे का निर्माण और समक्रमण जी. एल. आई. बी. में थ्रेड वर्ग का उपयोग करके किया जाता है, जो नए धागे बनाते समय कार्य को एक पैरामीटर के रूप में लेता है, जैसा कि निम्नलिखित (बहुत सरल) उदाहरण में दिखाया गया हैः इंट प्रश्न () {// (वार आई = 0; आई <3; आई + +) {प्रिंट (") के लिए कुछ प्रिंट संचालन। "); Thread.usleep (800000); stdout.flush ();} लौटाता है 42;} शून्य मुख्य () {यदि (! Thread.supported ()) {stderr.printf (" "थ्रेड समर्थन के बिना नहीं चल सकता है। \n" "); वापसी;} प्रिंट (" "जीवन, ब्रह्मांड और सब कुछ का अंतिम प्रश्न" ");// सामान्य पैरामीटर वापसी मूल्य का प्रकार है वार थ्रेड = नया थ्रेड <int> (" "प्रश्न", "प्रश्न); प्रिंट (@" "$(thread.join () \n" ");) नीचे ग्राफिकल यूजर इंटरफेस जीटीके का उपयोग करके जीयूआई" "हैलो, वर्ल्ड!" "बनाने के लिए एक उदाहरण है।" प्रोग्राम (जीटीके हैलो वर्ल्ड भी देखें) वाला मेंः जीटीके का उपयोग करना; इंट मेन (स्ट्रिंग [] आर्ग) {Gtk.init (रेफ आर्ग); वार विंडो = नई विंडो (); window.title = "हैलो, वर्ल्ड! "; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size (350,70); window.destroy.connect (Gtk.main_quit); वार लेबल = नया लेबल (" हैलो, वर्ल्ड! "); window.add (लेबल); window.show_all (); Gtk.main (); रिटर्न 0;} स्टेटमेंट Gtk.main () घटनाओं के लिए एक मुख्य लूप सुनना बनाता है और शुरू करता है, जो संकेतों के माध्यम से कॉलबैक कार्यों में पारित होते हैं। जैसा कि यह उदाहरण जी. टी. के. पैकेज का उपयोग करता है, इसे संकलित करने के लिए एक अतिरिक्त-- पी. जी. जी. पैरामीटर (जो सी बैकएंड में पी. जी. जी.-कॉन्फ़िग का आह्वान करता है) की आवश्यकता होती हैः वैलाक-- पी. जी. जी. टी. के. +-3. शॉटवेल, वाला में लिखी गई एक छवि आयोजक। गेरी, वाला में लिखा गया एक ईमेल क्लाइंट। प्राथमिक ओएस, एक डेस्कटॉप वातावरण के साथ एक लिनक्स वितरण जो ज्यादातर वाला में प्रोग्राम किया गया है। बग्गी, एक लिनक्स डेस्कटॉप वातावरण है जो ज्यादातर वाला में प्रोग्राम किया गया है। संदर्भ बाहरी लिंक GNOME विकी पेज API दस्तावेज़ वाला रिपॉजिटरी GNOME · GitLab LibGee पर, जो वाला के लिए एक उपयोगिता पुस्तकालय है। नवागंतुकों के लिए वाला नमूना कोड वाला कार्यक्रमों की सूची ऑटोवाला, एक ऐसा कार्यक्रम जो वाला/सी परियोजनाओं के लिए सीमेक और मेसन फ़ाइलों के निर्माण को स्वचालित और सरल बनाता है गिटहब अकीरा पर वाला समुदाय-लिनक्स देशी डिजाइनर उपकरण कंगारू-लोकप्रिय डेटाबेस के लिए क्रॉस-प्लेटफ़ॉर्म डेटाबेस क्लाइंट उपकरण अन्य भाषाओं के साथ तुलना वाला और जावा वाला और सी #बाला प्रोग्रामिंग भाषाओं सहित विभिन्न भाषाओं के बेंचमार्क ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाएँ एलजीपीएल लाइसेंस का उपयोग करने वाले सॉफ़्टवेयर स्रोत-से-स्रोत संकलक, 2006 में बनाई गई सांख्यिकीय रूप से टाइप की गई प्रोग्रामिंग भाषाएँ, क्रॉस-प्लेटफ़ॉर्म मुक्त सॉफ़्टवेयर