गोऑब्जेक्ट

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

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

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

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

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

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

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

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

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

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

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

व्युत्पन्न प्रकार
अंतर्निहित  मौलिक प्रकारों से प्राप्त प्रकार सामान्यतः चार श्रेणियों में आते हैं:
 * सूचीबद्ध प्रकार और फ्लैग प्रकार: सामान्यतः प्रत्येक सूचीबद्ध प्रकार और प्रत्येक पूर्णांक-आधारित बिटफील्ड प्रकार (अर्थात, प्रत्येक  प्रकार) जिसे कोई किसी प्रकार से उपयोग करना चाहता है जो वस्तु प्रणाली से संबंधित है उदाहरण के लिए वस्तु विशेषता के प्रकार के रूप में पंजीकृत होना चाहिए। प्रकार प्रणाली के साथ सामान्यतः प्रारम्भिक कोड जो इन प्रकारों को पंजीकृत करने का ध्यान रखता है,   नामक एक स्वचालित उपकरण द्वारा उत्पन्न किया जाता है और एक अलग फ़ाइल में संग्रहीत किया जाता है।
 * बॉक्स्ड प्रकार: कुछ डेटा संरचनाएँ जो पूर्ण श्रेणी प्रकार (सभी ओवरहेड खर्च के साथ) बनाने के लिए बहुत सरल हैं, उन्हें अभी भी टाइप प्रणाली के साथ पंजीकृत करने की आवश्यकता हो सकती है। उदाहरण के लिए, हमारे पास एक वर्ग हो सकता है जिसमें हम  गुण जोड़ना चाहते हैं, जिसका मान एक संरचना का उदाहरण होना चाहिए जो 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