गोऑब्जेक्ट

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

हालाँकि कई GObject एप्लिकेशन पूरी तरह से C में लिखे गए हैं, GObject सिस्टम कई अन्य भाषाओं के देशी ऑब्जेक्ट सिस्टम में अच्छी तरह से मैप करता है, जैसे C ++, Java (प्रोग्रामिंग लैंग्वेज), रूबी प्रोग्रामिंग भाषा, पायथन (प्रोग्रामिंग लैंग्वेज),  सामान्य लिस्प  और .NET फ्रेमवर्क | नेट/मोनो (सॉफ्टवेयर)। नतीजतन, आमतौर पर GObject ढांचे का उपयोग करने वाले अच्छी तरह से लिखित पुस्तकालयों के लिए भाषा बाइंडिंग बनाने के लिए अपेक्षाकृत दर्द रहित होता है।

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

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