गोऑब्जेक्ट

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

इतिहास
केवल GLib और libc पर निर्भर करते हुए,    की आधारशिला है और इसका उपयोग GTK, Pango, अभिगम्यता टूलकिट और अधिकांश उच्च-स्तरीय जीनोम लाइब्रेरी जैसे  और अनुप्रयोगों में किया जाता है। GTK+ 2.0 से पहले,   के समान कोड GTK कोडबेस का हिस्सा था। " " नाम अभी तक उपयोग में नहीं था, सामान्य बेसक्लास को   कहा जाता था।

जीटीके+ 2.0 के जारी होने पर, इसकी सामान्य उपयोगिता के कारण ऑब्जेक्ट सिस्टम को एक अलग लाइब्रेरी में निकाला गया था। इस प्रक्रिया में,  वर्ग के अधिकांश गैर-जीयूआई-विशिष्ट भागों को , नए सामान्य बेसक्लास में ले जाया गया। 11 मार्च 2002 (जीटीके+ 2.0 की रिलीज़ तिथि) से एक अलग लाइब्रेरी के रूप में अस्तित्व में आने के बाद, गोब्जेक्ट लाइब्रेरी का उपयोग अब कई गैर-जीयूआई कार्यक्रमों जैसे कमांड लाइन और सर्वर (कंप्यूटिंग) अनुप्रयोगों द्वारा किया जाता है।

जीएलआईबी से संबंध
हालाँकि  के पास दस्तावेज़ीकरण का अपना अलग सेट है और सामान्यतः इसे अपनी साझा लाइब्रेरी फ़ाइल में संकलित किया जाता है,   का स्रोत कोड GLib स्रोत ट्री में रहता है और GLib के साथ वितरित किया जाता है। इस कारण से,   GLib संस्करण संख्याओं का उपयोग करता है और सामान्यतः GLib के साथ पैक किया जाता है (उदाहरण के लिए, डेबियन   को अपने   पैकेज परिवार में रखता है)।

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

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

इस बुनियादी कार्यक्षमता का उपयोग  को लागू करने के लिए किया जाता है, एक प्रकार का सामान्य कंटेनर जो टाइप सिस्टम द्वारा ज्ञात किसी भी प्रकार के मान को धारण कर सकता है। ऐसे कंटेनर विशेष रूप से उपयोगी होते हैं जब गतिशील रूप से टाइप किए गए भाषा वातावरण के साथ बातचीत करते हैं जिसमें सभी मूल मान ऐसे टाइप-टैग किए गए कंटेनर में रहते हैं।

मौलिक प्रकार
वे प्रकार जिनमें कोई संबद्ध वर्ग नहीं होता, उन्हें गैर-वर्गीकृत कहा जाता है। ये प्रकार, उन सभी प्रकारों के साथ, जो मूल वर्ग के किसी न किसी रूप से मेल खाते हैं, मौलिक प्रकार के रूप में जाने जाते हैं: वे प्रकार जिनसे अन्य सभी प्रकार प्राप्त होते हैं। ये एक अपेक्षाकृत बंद सेट बनाते हैं, लेकिन हालांकि औसत उपयोगकर्ता से अपने स्वयं के मौलिक प्रकार बनाने की उम्मीद नहीं की जाती है, संभावना मौजूद है और कस्टम क्लास पदानुक्रम बनाने के लिए इसका फायदा उठाया गया है - यानी, क्लास पदानुक्रम  क्लास पर आधारित नहीं हैं।

जीएलआईबी 2.9.2 के अनुसार, गैर-वर्गीकृत अंतर्निर्मित मौलिक प्रकार हैं:
 * एक खाली प्रकार, सी के अनुरूप  ;
 * सी के हस्ताक्षरित और अहस्ताक्षरित प्रकार के अनुरूप,  ,  , और 64-बिट पूर्णांक ( ,  ,  ,  ,  ,  ,  , और  );
 * एक बूलियन प्रकार ;
 * एक गणना प्रकार और एक "झंडे" प्रकार, दोनों सी के अनुरूप  प्रकार, लेकिन इसमें भिन्नता है कि बाद वाले का उपयोग केवल बिट फ़ील्ड के लिए किया जाता है (  और  );
 * सी के अनुरूप सिंगल- और डबल-परिशुद्धता आईईईई फ्लोट के लिए प्रकार  और   (  और  );
 * एक स्ट्रिंग प्रकार, सी के अनुरूप  ;
 * एक अपारदर्शी सूचक प्रकार, सी के अनुरूप.

वर्गीकृत अंतर्निहित मौलिक प्रकार हैं:
 * के उदाहरणों के लिए एक आधार वर्ग प्रकार, मानक वर्ग वंशानुक्रम वृक्ष की जड़
 * एक बेस इंटरफ़ेस प्रकार, बेस क्लास प्रकार के अनुरूप लेकिन मानक इंटरफ़ेस इनहेरिटेंस ट्री की जड़ का प्रतिनिधित्व करता है
 * बॉक्सिंग प्रकार की संरचनाओं के लिए एक प्रकार, जिसका उपयोग संदर्भ-गणना "बक्से" में साधारण मूल्य वस्तुओं या विदेशी वस्तुओं को लपेटने के लिए किया जाता है
 * "पैरामीटर विनिर्देश ऑब्जेक्ट्स" के लिए एक प्रकार, जिसका उपयोग  में ऑब्जेक्ट गुणों के लिए मेटा डेटा का वर्णन करने के लिए किया जाता है.

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

व्युत्पन्न प्रकार
अंतर्निहित  मौलिक प्रकारों से प्राप्त होने वाले प्रकार गिरते हैं मोटे तौर पर चार श्रेणियों में:
 * प्रगणित प्रकार और "झंडे" प्रकार: सामान्य तौर पर, प्रत्येक प्रगणित प्रकार और प्रत्येक पूर्णांक-आधारित बिटफील्ड प्रकार (यानी, प्रत्येक  प्रकार) जिसे कोई किसी तरह से उपयोग करना चाहता है जो ऑब्जेक्ट सिस्टम से संबंधित है - उदाहरण के लिए, ऑब्जेक्ट प्रॉपर्टी के प्रकार के रूप में - पंजीकृत होना चाहिए प्रकार प्रणाली के साथ. सामान्यतः, आरंभीकरण कोड जो इन प्रकारों को पंजीकृत करने का ध्यान रखता है,   नामक एक स्वचालित उपकरण द्वारा उत्पन्न किया जाता है और एक अलग फ़ाइल में संग्रहीत किया जाता है।
 * बॉक्स्ड प्रकार: कुछ डेटा संरचनाएँ जो पूर्ण श्रेणी प्रकार (सभी ओवरहेड खर्च के साथ) बनाने के लिए बहुत सरल हैं, उन्हें अभी भी टाइप सिस्टम के साथ पंजीकृत करने की आवश्यकता हो सकती है। उदाहरण के लिए, हमारे पास एक वर्ग हो सकता है जिसमें हम  गुण जोड़ना चाहते हैं, जिसका मान एक संरचना का उदाहरण होना चाहिए जो struct color { int r, g, b; }.   को उपवर्गित करने से बचने के लिए, हम इस संरचना का प्रतिनिधित्व करने के लिए एक बॉक्स प्रकार बना सकते हैं, और प्रतिलिपि बनाने और मुक्त करने के लिए फ़ंक्शन प्रदान कर सकते हैं। GObject सरल GLib डेटा प्रकारों को लपेटने वाले मुट्ठी भर बॉक्स प्रकार के साथ जहाज करता है। बॉक्सिंग प्रकारों के लिए एक अन्य उपयोग विदेशी वस्तुओं को एक टैग किए गए कंटेनर में लपेटने के तरीके के रूप में है, जिसे टाइप सिस्टम पहचान सकता है और जानता है कि कैसे कॉपी और मुक्त किया जाए।
 * अपारदर्शी सूचक प्रकार: कभी-कभी, उन वस्तुओं के लिए जिन्हें न तो कॉपी करने, न ही संदर्भ-गणना करने और न ही मुक्त करने की आवश्यकता होती है, यहां तक ​​कि एक बॉक्स प्रकार भी अतिश्योक्तिपूर्ण होगा। जबकि ऐसी वस्तुओं को केवल अपारदर्शी पॉइंटर्स  के रूप में मानकर   में उपयोग किया जा सकता है, अक्सर एक व्युत्पन्न पॉइंटर प्रकार बनाना एक अच्छा विचार है, इस तथ्य का दस्तावेजीकरण करते हुए कि पॉइंटर्स को एक विशेष प्रकार की वस्तु का संदर्भ देना चाहिए, भले ही और कुछ नहीं इसके बारे में कहा जाता है.
 * वर्ग और इंटरफ़ेस प्रकार: GObject एप्लिकेशन में अधिकांश प्रकार क्लास होंगे - शब्द के सामान्य वस्तु-उन्मुख अर्थ में - प्रत्यक्ष या अप्रत्यक्ष रूप से रूट क्लास,  से प्राप्त होंगे। ऐसे इंटरफ़ेस भी हैं, जिनमें क्लासिक जावा-शैली इंटरफ़ेस के विपरीत, कार्यान्वित तरीके सम्मिलित हो सकते हैं। इस प्रकार   इंटरफेस को मिक्सिन के रूप में वर्णित किया जा सकता है।

मैसेजिंग सिस्टम
मैसेजिंग सिस्टम में दो पूरक भाग क्लोजर और सिग्नल होते हैं।
 * क्लोजर:  क्लोजर कॉलबैक का एक सामान्यीकृत संस्करण है। C और C++ में लिखे गए क्लोजर के साथ-साथ मनमानी भाषाओं (जब बाइंडिंग प्रदान की जाती है) के लिए समर्थन मौजूद है। यह (उदाहरण के लिए) पायथन और जावा में लिखे गए कोड को   क्लोजर के माध्यम से लागू करने की स्वीकृति देता है।
 * सिग्नल: सिग्नल प्राथमिक तंत्र है जिसके द्वारा क्लोजर लागू किया जाता है। ऑब्जेक्ट सिग्नल श्रोताओं को टाइप सिस्टम के साथ पंजीकृत करते हैं, किसी दिए गए सिग्नल और दिए गए क्लोजर के बीच मैपिंग निर्दिष्ट करते हैं। एक पंजीकृत सिग्नल के उत्सर्जन पर, उस सिग्नल का बंद होना लागू हो जाता है। जीटीके में, सभी मूल जीयूआई घटनाएं (जैसे माउस गति और कीबोर्ड क्रियाएं) श्रोताओं के लिए संभावित रूप से कार्य करने के लिए जीओब्जेक्ट सिग्नल उत्पन्न कर सकती हैं।

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

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

इनमें से कुछ जटिलताओं को संबोधित करने के लिए, कई उच्च-स्तरीय भाषाएँ मौजूद हैं जो स्रोत-से-स्रोत C में  को संकलित करती हैं। Vala प्रोग्रामिंग भाषा C#-शैली सिंटैक्स का उपयोग करती है और वेनिला (कंप्यूटिंग) C कोड में पूर्व-संसाधित होती है।   बिल्डर, या GOB2, जावा की याद दिलाने वाला एक टेम्पलेट सिंटैक्स प्रदान करता है।

गोब्जेक्ट आत्मनिरीक्षण

 * GObject आत्मनिरीक्षण (संक्षिप्त GIR ) C लाइब्रेरीज़ ( का उपयोग करके) और भाषा बाइंडिंग सीएफ जीटीके के लिए भाषा बाइंडिंग की सूची के बीच एक विदेशी फ़ंक्शन इंटरफ़ेस मिडलवेयर परत है।

उपयोग
सी और गोब्जेक्ट के संयोजन का उपयोग कई सफल मुफ्त सॉफ्टवेयर परियोजनाओं में किया जाता है, जैसे कि गनोम डेस्कटॉप, जीटीके टूलकिट और जीआईएमपी इमेज मैनीपुलेशन प्रोग्राम।

हालाँकि कई  एप्लिकेशन पूरी तरह से C में लिखे गए हैं,   सिस्टम कई अन्य भाषाओं, जैसे C++, Java, Ruby, Python, Common Lisp, और .NET/Mono के मूल ऑब्जेक्ट सिस्टम में अच्छी तरह से मैप करता है। परिणामस्वरूप,   फ्रेमवर्क का उपयोग करने वाले अच्छी तरह से लिखित पुस्तकालयों के लिए भाषा बाइंडिंग बनाना सामान्यतः अपेक्षाकृत दर्द रहित होता है।

हालाँकि, सबसे पहले C में  कोड लिखना अपेक्षाकृत क्रियात्मक है। लाइब्रेरी को सीखने में काफी समय लगता है, और उच्च-स्तरीय वस्तु-उन्मुख भाषाओं में अनुभव वाले प्रोग्रामर को अक्सर C में   के साथ काम करना थोड़ा कठिन लगता है। उदाहरण के लिए, एक उपवर्ग (यहां तक ​​कि   का एक उपवर्ग भी) बनाना संभव हो सकता है। बड़ी मात्रा में बॉयलरप्लेट कोड लिखने और/या कॉपी करने की आवश्यकता होती है। हालाँकि, Vala का उपयोग करना, एक ऐसी भाषा जो मुख्य रूप से   के साथ काम करने के लिए डिज़ाइन की गई है और जो C में परिवर्तित होती है,   के साथ काम करने या   आधारित लाइब्रेरी लिखने को बेहतर बनाने की संभावना है।

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

अन्य ऑब्जेक्ट सिस्टम से तुलना
चूंकि  C के लिए अधिकतर पूर्ण ऑब्जेक्ट सिस्टम प्रदान करता है, इसे C-व्युत्पन्न भाषाओं जैसे C++ और ऑब्जेक्टिव-सी के विकल्प के रूप में देखा जा सकता है। (हालांकि दोनों अपने-अपने ऑब्जेक्ट सिस्टम के अलावा कई अन्य सुविधाएं भी प्रदान करते हैं।) C++ और   के बीच एक आसानी से देखा जाने वाला अंतर यह है कि   (जावा की तरह) मल्टीपल इनहेरिटेंस का समर्थन नहीं करता है।

द्वारा GLib के g_malloc मेमोरी एलोकेशन फ़ंक्शन के उपयोग से प्रोग्राम मेमोरी ख़त्म होने पर बिना शर्त बाहर निकल जाएगा, C लाइब्रेरी के Malloc, C++ के नए और अन्य सामान्य मेमोरी एलोकेटर के विपरीत, जो किसी प्रोग्राम को इससे निपटने या यहां तक ​​कि पूरी तरह से पुनर्प्राप्त करने की स्वीकृति देता है- बस दुर्घटनाग्रस्त हुए बिना स्मृति की स्थितियाँ। यह सॉफ्टवेयर में GObject को सम्मिलित करने के खिलाफ काम करता है जहां सीमित मेमोरी के सामने लचीलापन महत्वपूर्ण है या जहां बहुत अधिक या बहुत बड़ी वस्तुओं को सामान्यतः नियंत्रित किया जाता है। G_try_new का उपयोग तब किया जा सकता है जब मेमोरी आवंटन विफल होने की अधिक संभावना होती है (उदाहरण के लिए एक बड़ी वस्तु के लिए) लेकिन यह यह स्वीकृति नहीं दे सकता कि आवंटन कोड में कहीं और विफल नहीं होगा।

एक और महत्वपूर्ण अंतर यह है कि जबकि C++ और ऑब्जेक्टिव-सी अलग-अलग भाषाएं हैं,  पूरी तरह से एक लाइब्रेरी है और इस तरह कोई नया सिंटैक्स या कंपाइलर इंटेलिजेंस पेश नहीं करता है। उदाहरण के लिए,  -आधारित C ​​कोड लिखते समय, स्पष्ट अपकास्टिंग करना अक्सर आवश्यक होता है। इसलिए, "  के साथ C", जिसे सादे C से अलग भाषा के रूप में माना जाता है, सादे C का एक सख्त सुपरसेट है - ऑब्जेक्टिव की तरह सी, लेकिन सी++ के विपरीत।

उन प्लेटफ़ॉर्म पर जहां कोई मानक ABI नहीं है जो सभी C++ कंपाइलरों पर काम करता है (जो सामान्यतः मामला नहीं है, क्योंकि सामान्यतः इटेनियम ABI या Microsoft ABI का पालन किया जाता है), एक C++ कंपाइलर के साथ संकलित लाइब्रेरी हमेशा कॉल करने में सक्षम नहीं होती है लाइब्रेरी को किसी भिन्न लाइब्रेरी के साथ संकलित किया गया है। सभी निर्यातित प्रतीकों की विशिष्टता सुनिश्चित करने के लिए संकलक विभिन्न प्रकार के नाम प्रबंधन का उपयोग करते हैं। (यह आवश्यक है क्योंकि, उदाहरण के लिए, दो अलग-अलग वर्गों में समान नाम वाले सदस्य फ़ंक्शन हो सकते हैं, एक फ़ंक्शन नाम कई बार ओवरलोड हो सकता है, या समान नाम वाले फ़ंक्शन अलग-अलग नामस्थानों में दिखाई दे सकते हैं, लेकिन ऑब्जेक्ट कोड में इन ओवरलैप्स की स्वीकृति नहीं है।) इसके विपरीत, चूंकि सी किसी भी प्रकार के ओवरलोडिंग या नेमस्पेसिंग का समर्थन नहीं करता है, सी पुस्तकालयों के लेखक सामान्यतः अपने निर्यातित नामों की वैश्विक विशिष्टता सुनिश्चित करने के लिए स्पष्ट उपसर्गों का उपयोग करेंगे। इसलिए, वस्तु-उन्मुख होने के बावजूद, ए C में लिखी गई  -आधारित लाइब्रेरी हमेशा समान बाहरी प्रतीक नामों का उपयोग करेगी, चाहे किसी भी कंपाइलर का उपयोग किया गया हो।

शायद सबसे गहरा अंतर संकेतों पर  का जोर है (जिसे अन्य भाषाओं में घटनाएँ कहा जाता है)। यह जोर इस तथ्य से लिया गया है कि   को विशेष रूप से जीयूआई टूलकिट की जरूरतों को पूरा करने के लिए डिज़ाइन किया गया था। जबकि अधिकांश वस्तु-उन्मुख भाषाओं के लिए सिग्नल लाइब्रेरी मौजूद हैं,   के मामले में इसे ऑब्जेक्ट सिस्टम में बनाया गया है। इस वजह से, एक सामान्य   एप्लिकेशन गैर-  एप्लिकेशन की तुलना में बहुत अधिक हद तक सिग्नल का उपयोग करेगा, जिससे   घटकों को सादे C++ या Java का उपयोग करने वाले घटकों की तुलना में बहुत अधिक इनकैप्सुलेटेड और पुन: प्रयोज्य बना दिया जाएगा। यदि glibmm/gtkmm, Glib/GTK के लिए आधिकारिक C++ रैपर क्रमशः का उपयोग किया जाता है, तो सहोदर प्रोजेक्ट libsigc++ मानक C++ का उपयोग करके अंतर्निहित   संकेतों के आसान उपयोग की स्वीकृति देता है। बेशक, सिग्नल के अन्य कार्यान्वयन लगभग सभी प्लेटफार्मों पर उपलब्ध हैं, हालांकि कभी-कभी एक अतिरिक्त लाइब्रेरी की आवश्यकता होती है, जैसे C++ के लिए Boost.Signals2।

यह भी देखें

 * वैला - एक -आधारित प्रोग्रामिंग भाषा जिसमें C# जैसा सिंटैक्स सोर्स टू सोर्स कंपाइलर टू सी है।
 * जिन्न (प्रोग्रामिंग भाषा) - पायथन-शैली वैला कंपाइलर के लिए वैकल्पिक सिंटैक्स पार्सर

बाहरी संबंध

 * The GObject Reference Manual (and tutorial)
 * GObject Tutorial Aug 2004
 * GOB2 &mdash; the GObject Builder
 * Vala Homepage