गोऑब्जेक्ट
Developer(s) | गनोम परियोजना |
---|---|
Initial release | 11 March 2002 |
Written in | सी |
Operating system | क्रॉस-प्लेटफॉर्म |
Available in | बहुभाषी[which?] |
Type | सॉफ्टवेयर लाइब्रेरी |
License | जीएनयू एलजीपीएल |
Website | developer |
जीएलआईबी ऑब्जेक्ट सिस्टम या जीओब्जेक्ट, एक मुफ्त सॉफ्टवेयर सॉफ्टवेयर पुस्तकालय है जो पोर्टेबल ऑब्जेक्ट (वस्तु) सिस्टम और पारदर्शी क्रॉस-लैंग्वेज अंतर प्रचालनीयता प्रदान करती है। GObject
को वस्तु-उन्मुख C-आधारित एपीआई प्रदान करने के लिए C प्रोग्राम में सीधे उपयोग के लिए और पारदर्शी क्रॉस-लैंग्वेज अंतर प्रचालनीयता प्रदान करने के लिए अन्य भाषाओं में बाइंडिंग के माध्यम से उपयोग के लिए PyGObject डिज़ाइन किया गया है।
इतिहास
केवल GLib और libc पर निर्भर करते हुए, GObject
GNOME
की आधारशिला है और इसका उपयोग GTK, Pango, अभिगम्यता टूलकिट और अधिकांश उच्च-स्तरीय जीनोम लाइब्रेरी जैसे GStreamer
और अनुप्रयोगों में किया जाता है। GTK+ 2.0 से पहले, GObject
के समान कोड GTK कोडबेस का हिस्सा था। "GObject
" नाम अभी तक उपयोग में नहीं था, सामान्य बेसक्लास को GtkObject
कहा जाता था।
जीटीके+ 2.0 के जारी होने पर, इसकी सामान्य उपयोगिता के कारण ऑब्जेक्ट सिस्टम को एक अलग लाइब्रेरी में निकाला गया था। इस प्रक्रिया में, GtkObject
वर्ग के अधिकांश गैर-जीयूआई-विशिष्ट भागों को GObject
, नए सामान्य बेसक्लास में ले जाया गया। 11 मार्च 2002 (जीटीके+ 2.0 की रिलीज़ तिथि) से एक अलग लाइब्रेरी के रूप में अस्तित्व में आने के बाद, गोब्जेक्ट लाइब्रेरी का उपयोग अब कई गैर-जीयूआई कार्यक्रमों जैसे कमांड लाइन और सर्वर (कंप्यूटिंग) अनुप्रयोगों द्वारा किया जाता है।
जीएलआईबी से संबंध
हालाँकि GObject
के पास दस्तावेज़ीकरण का अपना अलग सेट है[1] और सामान्यतः इसे अपनी साझा लाइब्रेरी फ़ाइल में संकलित किया जाता है, GObject
का स्रोत कोड GLib स्रोत ट्री में रहता है और GLib के साथ वितरित किया जाता है। इस कारण से, GObject
GLib संस्करण संख्याओं का उपयोग करता है और सामान्यतः GLib के साथ पैक किया जाता है (उदाहरण के लिए, डेबियन GObject
को अपने libglib2.0
पैकेज परिवार में रखता है)।
टाइप सिस्टम
GObject
फ्रेमवर्क के सबसे बुनियादी स्तर पर एक सामान्य और गतिशील प्रकार की प्रणाली निहित है जिसे GType कहा जाता है। जीटाइप सिस्टम सभी ऑब्जेक्ट्स का रनटाइम विवरण रखता है जो ग्लू कोड को कई भाषा बाइंडिंग की सुविधा प्रदान करता है। प्रकार प्रणाली गैर-वर्गीकृत प्रकारों जैसे अपारदर्शी पॉइंटर्स, स्ट्रिंग और विभिन्न आकार के पूर्णांक और फ़्लोटिंग पॉइंट संख्याओं के अलावा, किसी भी एकल विरासत वाली वर्ग संरचना को संभाल सकती है।
टाइप सिस्टम जानता है कि किसी भी पंजीकृत प्रकार से संबंधित मूल्यों को कैसे कॉपी, असाइन और नष्ट किया जाए। यह पूर्णांक जैसे प्रकारों के लिए मामूली है, लेकिन कई जटिल वस्तुएं संदर्भ-गणना की जाती हैं, जबकि कुछ जटिल हैं लेकिन संदर्भ-गणना नहीं की जाती हैं। जब टाइप सिस्टम किसी संदर्भ-गणित वस्तु की "कॉपी" करता है, तो यह सामान्यतः केवल इसकी संदर्भ संख्या को बढ़ाएगा, जबकि एक जटिल गैर-संदर्भ-गिनती वाली वस्तु (जैसे कि एक स्ट्रिंग) की प्रतिलिपि बनाते समय यह सामान्यतः मेमोरी आवंटित करके एक वास्तविक प्रतिलिपि बनाएगा।
इस बुनियादी कार्यक्षमता का उपयोग GValue
को लागू करने के लिए किया जाता है, एक प्रकार का सामान्य कंटेनर जो टाइप सिस्टम द्वारा ज्ञात किसी भी प्रकार के मान को धारण कर सकता है। ऐसे कंटेनर विशेष रूप से उपयोगी होते हैं जब गतिशील रूप से टाइप किए गए भाषा वातावरण के साथ बातचीत करते हैं जिसमें सभी मूल मान ऐसे टाइप-टैग किए गए कंटेनर में रहते हैं।
मौलिक प्रकार
वे प्रकार जिनमें कोई संबद्ध वर्ग नहीं होता, उन्हें गैर-वर्गीकृत कहा जाता है। ये प्रकार, उन सभी प्रकारों के साथ, जो मूल वर्ग के किसी न किसी रूप से मेल खाते हैं, मौलिक प्रकार के रूप में जाने जाते हैं: वे प्रकार जिनसे अन्य सभी प्रकार प्राप्त होते हैं। ये एक अपेक्षाकृत बंद सेट बनाते हैं, लेकिन हालांकि औसत उपयोगकर्ता से अपने स्वयं के मौलिक प्रकार बनाने की उम्मीद नहीं की जाती है, संभावना मौजूद है और कस्टम क्लास पदानुक्रम बनाने के लिए इसका फायदा उठाया गया है - यानी, क्लास पदानुक्रम GObject
क्लास पर आधारित नहीं हैं।
जीएलआईबी 2.9.2 के अनुसार,[2] गैर-वर्गीकृत अंतर्निर्मित मौलिक प्रकार हैं:
- एक खाली प्रकार, सी के अनुरूप
void
(G_TYPE_NONE
); - सी के हस्ताक्षरित और अहस्ताक्षरित प्रकार के अनुरूप
char
,int
,long
, और 64-बिट पूर्णांक (G_TYPE_CHAR
,G_TYPE_UCHAR
,G_TYPE_INT
,G_TYPE_UINT
,G_TYPE_LONG
,G_TYPE_ULONG
,G_TYPE_INT64
, औरG_TYPE_UINT64
); - एक बूलियन प्रकार (
G_TYPE_BOOLEAN
); - एक गणना प्रकार और एक "झंडे" प्रकार, दोनों सी के अनुरूप
enum
प्रकार, लेकिन इसमें भिन्नता है कि बाद वाले का उपयोग केवल बिट फ़ील्ड के लिए किया जाता है (G_TYPE_ENUM
औरG_TYPE_FLAGS
); - सी के अनुरूप सिंगल- और डबल-परिशुद्धता आईईईई फ्लोट के लिए प्रकार
float
औरdouble
(G_TYPE_FLOAT
औरG_TYPE_DOUBLE
); - एक स्ट्रिंग प्रकार, सी के अनुरूप
char *
(G_TYPE_STRING
); - एक अपारदर्शी सूचक प्रकार, सी के अनुरूप
void *
(G_TYPE_POINTER
).
वर्गीकृत अंतर्निहित मौलिक प्रकार हैं:
- के उदाहरणों के लिए एक आधार वर्ग प्रकार
GObject
, मानक वर्ग वंशानुक्रम वृक्ष की जड़ (G_TYPE_OBJECT
) - एक बेस इंटरफ़ेस प्रकार, बेस क्लास प्रकार के अनुरूप लेकिन मानक इंटरफ़ेस इनहेरिटेंस ट्री की जड़ का प्रतिनिधित्व करता है (
G_TYPE_INTERFACE
) - बॉक्सिंग प्रकार की संरचनाओं के लिए एक प्रकार, जिसका उपयोग संदर्भ-गणना "बक्से" में साधारण मूल्य वस्तुओं या विदेशी वस्तुओं को लपेटने के लिए किया जाता है (
G_TYPE_BOXED
) - "पैरामीटर विनिर्देश ऑब्जेक्ट्स" के लिए एक प्रकार, जिसका उपयोग
GObject
में ऑब्जेक्ट गुणों के लिए मेटा डेटा का वर्णन करने के लिए किया जाता है (G_TYPE_PARAM
).
वे प्रकार जिन्हें टाइप सिस्टम द्वारा स्वचालित रूप से इंस्टेंटिअट किया जा सकता है, इंस्टेंटिएबल कहलाते हैं। इन प्रकारों की एक महत्वपूर्ण विशेषता यह है कि किसी भी उदाहरण के पहले बाइट्स में हमेशा उदाहरण के प्रकार से जुड़े वर्ग संरचना (वर्चुअल टेबल का एक रूप) के लिए एक संकेतक होता है। इस कारण से, किसी भी तात्कालिक प्रकार को वर्गीकृत किया जाना चाहिए। विरोधाभासी रूप से, कोई भी गैर-वर्गीकृत प्रकार (जैसे पूर्णांक या स्ट्रिंग) गैर-तात्कालिक होना चाहिए। दूसरी ओर, अधिकांश वर्गीकृत प्रकार तात्कालिक होते हैं, लेकिन कुछ, जैसे इंटरफ़ेस प्रकार, नहीं होते हैं।
व्युत्पन्न प्रकार
अंतर्निहित GObject
मौलिक प्रकारों से प्राप्त होने वाले प्रकार गिरते हैं
मोटे तौर पर चार श्रेणियों में:
- प्रगणित प्रकार और "झंडे" प्रकार
- सामान्य तौर पर, प्रत्येक प्रगणित प्रकार और प्रत्येक पूर्णांक-आधारित बिटफील्ड प्रकार (यानी, प्रत्येक
enum
प्रकार) जिसे कोई किसी तरह से उपयोग करना चाहता है जो ऑब्जेक्ट सिस्टम से संबंधित है - उदाहरण के लिए, ऑब्जेक्ट प्रॉपर्टी के प्रकार के रूप में - पंजीकृत होना चाहिए प्रकार प्रणाली के साथ. सामान्यतः, आरंभीकरण कोड जो इन प्रकारों को पंजीकृत करने का ध्यान रखता है,glib-mkenums
[3] नामक एक स्वचालित उपकरण द्वारा उत्पन्न किया जाता है और एक अलग फ़ाइल में संग्रहीत किया जाता है। - बॉक्स्ड प्रकार
- कुछ डेटा संरचनाएँ जो पूर्ण श्रेणी प्रकार (सभी ओवरहेड खर्च के साथ) बनाने के लिए बहुत सरल हैं, उन्हें अभी भी टाइप सिस्टम के साथ पंजीकृत करने की आवश्यकता हो सकती है। उदाहरण के लिए, हमारे पास एक वर्ग हो सकता है जिसमें हम
background-color
गुण जोड़ना चाहते हैं, जिसका मान एक संरचना का उदाहरण होना चाहिए जोstruct color { int r, g, b; }
.GObject
को उपवर्गित करने से बचने के लिए, हम इस संरचना का प्रतिनिधित्व करने के लिए एक बॉक्स प्रकार बना सकते हैं, और प्रतिलिपि बनाने और मुक्त करने के लिए फ़ंक्शन प्रदान कर सकते हैं। GObject सरल GLib डेटा प्रकारों को लपेटने वाले मुट्ठी भर बॉक्स प्रकार के साथ जहाज करता है। बॉक्सिंग प्रकारों के लिए एक अन्य उपयोग विदेशी वस्तुओं को एक टैग किए गए कंटेनर में लपेटने के तरीके के रूप में है, जिसे टाइप सिस्टम पहचान सकता है और जानता है कि कैसे कॉपी और मुक्त किया जाए। - अपारदर्शी सूचक प्रकार
- कभी-कभी, उन वस्तुओं के लिए जिन्हें न तो कॉपी करने, न ही संदर्भ-गणना करने और न ही मुक्त करने की आवश्यकता होती है, यहां तक कि एक बॉक्स प्रकार भी अतिश्योक्तिपूर्ण होगा। जबकि ऐसी वस्तुओं को केवल अपारदर्शी पॉइंटर्स
G_TYPE_POINTER
के रूप में मानकरGObject
में उपयोग किया जा सकता है, अक्सर एक व्युत्पन्न पॉइंटर प्रकार बनाना एक अच्छा विचार है, इस तथ्य का दस्तावेजीकरण करते हुए कि पॉइंटर्स को एक विशेष प्रकार की वस्तु का संदर्भ देना चाहिए, भले ही और कुछ नहीं इसके बारे में कहा जाता है. - वर्ग और इंटरफ़ेस प्रकार
- GObject एप्लिकेशन में अधिकांश प्रकार क्लास होंगे - शब्द के सामान्य वस्तु-उन्मुख अर्थ में - प्रत्यक्ष या अप्रत्यक्ष रूप से रूट क्लास,
GObject
से प्राप्त होंगे। ऐसे इंटरफ़ेस भी हैं, जिनमें क्लासिक जावा-शैली इंटरफ़ेस के विपरीत, कार्यान्वित तरीके सम्मिलित हो सकते हैं। इस प्रकारGObject
इंटरफेस को मिक्सिन के रूप में वर्णित किया जा सकता है।
मैसेजिंग सिस्टम
GObject
मैसेजिंग सिस्टम में दो पूरक भाग क्लोजर और सिग्नल होते हैं।
- क्लोजर
GObject
क्लोजर कॉलबैक का एक सामान्यीकृत संस्करण है। C और C++ में लिखे गए क्लोजर के साथ-साथ मनमानी भाषाओं (जब बाइंडिंग प्रदान की जाती है) के लिए समर्थन मौजूद है। यह (उदाहरण के लिए) पायथन और जावा में लिखे गए कोड कोGObject
क्लोजर के माध्यम से लागू करने की स्वीकृति देता है।- सिग्नल
- सिग्नल प्राथमिक तंत्र है जिसके द्वारा क्लोजर लागू किया जाता है। ऑब्जेक्ट सिग्नल श्रोताओं को टाइप सिस्टम के साथ पंजीकृत करते हैं, किसी दिए गए सिग्नल और दिए गए क्लोजर के बीच मैपिंग निर्दिष्ट करते हैं। एक पंजीकृत सिग्नल के उत्सर्जन पर, उस सिग्नल का बंद होना लागू हो जाता है। जीटीके में, सभी मूल जीयूआई घटनाएं (जैसे माउस गति और कीबोर्ड क्रियाएं) श्रोताओं के लिए संभावित रूप से कार्य करने के लिए जीओब्जेक्ट सिग्नल उत्पन्न कर सकती हैं।
वर्ग कार्यान्वयन
प्रत्येक GObject
वर्ग को कम से कम दो संरचनाओं, वर्ग संरचना और उदाहरण संरचना द्वारा कार्यान्वित किया जाता है।
- वर्ग संरचना
- वर्ग संरचना C++ वर्ग की व्यवहार्यता से मेल खाती है। इसकी शुरुआत सुपरक्लास की वर्ग संरचना से होनी चाहिए। इसके बाद, यह फ़ंक्शन पॉइंटर्स का एक सेट रखेगा - क्लास की प्रत्येक वर्चुअल विधि के लिए एक। वर्ग-विशिष्ट चर का उपयोग वर्ग के सदस्यों का अनुकरण करने के लिए किया जा सकता है।
- द इंस्टेंस स्ट्रक्चर
- इंस्टेंस संरचना, जो प्रति ऑब्जेक्ट इंस्टेंस एक कॉपी में मौजूद होगी, सुपरक्लास की इंस्टेंस संरचना से शुरू होनी चाहिए (यह सुनिश्चित करता है कि सभी इंस्टेंस क्लास संरचना के लिए एक पॉइंटर से शुरू होते हैं, क्योंकि सभी मौलिक इंस्टेंटिएबल प्रकार इस संपत्ति को साझा करते हैं)। सुपरक्लास से संबंधित डेटा के बाद, संरचना C++ सदस्य चर के अनुरूप किसी भी उदाहरण-विशिष्ट चर को धारण कर सकती है।
GObject
फ्रेमवर्क में एक वर्ग को परिभाषित करना जटिल है, जिसके लिए बड़ी मात्रा में बॉयलरप्लेट कोड की आवश्यकता होती है, जैसे टाइप कास्टिंग मैक्रोज़ की मैन्युअल परिभाषा और अस्पष्ट प्रकार पंजीकरण मंत्र। इसके अलावा, चूंकि सी संरचना में "सार्वजनिक", "संरक्षित" या "निजी" जैसे एक्सेस संशोधक नहीं हो सकते हैं, इनकैप्सुलेशन प्रदान करने के लिए वर्कअराउंड का उपयोग किया जाना चाहिए। एक दृष्टिकोण निजी डेटा के लिए एक सूचक को सम्मिलित करना है - जिसे पारंपरिक रूप से _priv
कहा जाता है - उदाहरण संरचना में। निजी संरचना को सार्वजनिक हेडर फ़ाइल में घोषित किया जा सकता है, लेकिन केवल कार्यान्वयन फ़ाइल में परिभाषित किया जा सकता है, जिसका प्रभाव यह है कि निजी डेटा उपयोगकर्ताओं के लिए अपारदर्शी है, लेकिन कार्यान्वयनकर्ता के लिए पारदर्शी है। यदि निजी संरचना जीटाइप के साथ पंजीकृत है, तो इसे ऑब्जेक्ट सिस्टम द्वारा स्वचालित रूप से आवंटित किया जाएगा। वास्तव में, यदि कोई निजी डेटा की आवश्यकता होने पर हर बार G_TYPE_INSTANCE_GET_PRIVATE
मंत्र का उपयोग करने को तैयार है, तो _priv
पॉइंटर को सम्मिलित करना भी आवश्यक नहीं है।
इनमें से कुछ जटिलताओं को संबोधित करने के लिए, कई उच्च-स्तरीय भाषाएँ मौजूद हैं जो स्रोत-से-स्रोत C में GObject
को संकलित करती हैं। Vala प्रोग्रामिंग भाषा C#-शैली सिंटैक्स का उपयोग करती है और वेनिला (कंप्यूटिंग) C कोड में पूर्व-संसाधित होती है। GObject
बिल्डर, या GOB2, जावा की याद दिलाने वाला एक टेम्पलेट सिंटैक्स प्रदान करता है।
गोब्जेक्ट आत्मनिरीक्षण
- GObject आत्मनिरीक्षण (संक्षिप्त GIR[4]) C लाइब्रेरीज़ (
GObject
का उपयोग करके) और भाषा बाइंडिंग सीएफ जीटीके के लिए भाषा बाइंडिंग की सूची के बीच एक विदेशी फ़ंक्शन इंटरफ़ेस मिडलवेयर परत है।
उपयोग
सी और गोब्जेक्ट के संयोजन का उपयोग कई सफल मुफ्त सॉफ्टवेयर परियोजनाओं में किया जाता है, जैसे कि गनोम डेस्कटॉप, जीटीके टूलकिट और जीआईएमपी इमेज मैनीपुलेशन प्रोग्राम।
हालाँकि कई GObject
एप्लिकेशन पूरी तरह से C में लिखे गए हैं, GObject
सिस्टम कई अन्य भाषाओं, जैसे C++, Java, Ruby, Python, Common Lisp, और .NET/Mono के मूल ऑब्जेक्ट सिस्टम में अच्छी तरह से मैप करता है। परिणामस्वरूप, GObject
फ्रेमवर्क का उपयोग करने वाले अच्छी तरह से लिखित पुस्तकालयों के लिए भाषा बाइंडिंग बनाना सामान्यतः अपेक्षाकृत दर्द रहित होता है।
हालाँकि, सबसे पहले C में GObject
कोड लिखना अपेक्षाकृत क्रियात्मक है। लाइब्रेरी को सीखने में काफी समय लगता है, और उच्च-स्तरीय वस्तु-उन्मुख भाषाओं में अनुभव वाले प्रोग्रामर को अक्सर C में GObject
के साथ काम करना थोड़ा कठिन लगता है। उदाहरण के लिए, एक उपवर्ग (यहां तक कि GObject
का एक उपवर्ग भी) बनाना संभव हो सकता है। बड़ी मात्रा में बॉयलरप्लेट कोड लिखने और/या कॉपी करने की आवश्यकता होती है।[5] हालाँकि, Vala का उपयोग करना, एक ऐसी भाषा जो मुख्य रूप से GObject
के साथ काम करने के लिए डिज़ाइन की गई है और जो C में परिवर्तित होती है, GObject
के साथ काम करने या GObject
आधारित लाइब्रेरी लिखने को बेहतर बनाने की संभावना है।
हालाँकि वे वास्तव में प्रथम श्रेणी की वस्तुएं नहीं हैं (जीटाइप में कोई वास्तविक मेटाटाइप नहीं हैं), कक्षाएं और इंटरफेस जैसे मेटाऑब्जेक्ट रनटाइम पर GObject
अनुप्रयोगों द्वारा बनाए जाते हैं, और आत्मनिरीक्षण (कंप्यूटर विज्ञान) के लिए अच्छा समर्थन प्रदान करते हैं। आत्मनिरीक्षण क्षमताओं का उपयोग भाषा बाइंडिंग और ग्लेड जैसे उपयोगकर्ता इंटरफ़ेस डिज़ाइन अनुप्रयोगों द्वारा किया जाता है ताकि एक साझा लाइब्रेरी को लोड करने जैसी चीजों को करने की स्वीकृति मिल सके जो एक GObject
क्लास प्रदान करता है जो सामान्यतः ग्लेड के मामले में कुछ प्रकार का विजेट प्रदान करता है और फिर क्लास के सभी गुणों की एक सूची प्राप्त करता है। प्रकार की जानकारी और दस्तावेज़ीकरण स्ट्रिंग्स के साथ पूर्ण।
अन्य ऑब्जेक्ट सिस्टम से तुलना
This section possibly contains original research. (December 2011) (Learn how and when to remove this template message) |
This section does not cite any sources. (November 2018) (Learn how and when to remove this template message) |
चूंकि GObject
C[citation needed] के लिए अधिकतर पूर्ण ऑब्जेक्ट सिस्टम प्रदान करता है, इसे C-व्युत्पन्न भाषाओं जैसे C++ और ऑब्जेक्टिव-सी के विकल्प के रूप में देखा जा सकता है। (हालांकि दोनों अपने-अपने ऑब्जेक्ट सिस्टम के अलावा कई अन्य सुविधाएं भी प्रदान करते हैं।) C++ और GObject
के बीच एक आसानी से देखा जाने वाला अंतर यह है कि GObject
(जावा की तरह) मल्टीपल इनहेरिटेंस का समर्थन नहीं करता है।[6]
GObject
द्वारा GLib के g_malloc () मेमोरी एलोकेशन फ़ंक्शन के उपयोग से प्रोग्राम मेमोरी ख़त्म होने पर बिना शर्त बाहर निकल जाएगा, C लाइब्रेरी के Malloc(), C++ के नए और अन्य सामान्य मेमोरी एलोकेटर के विपरीत, जो किसी प्रोग्राम को इससे निपटने या यहां तक कि पूरी तरह से पुनर्प्राप्त करने की स्वीकृति देता है- बस दुर्घटनाग्रस्त हुए बिना स्मृति की स्थितियाँ।[7] यह सॉफ्टवेयर में GObject को सम्मिलित करने के खिलाफ काम करता है जहां सीमित मेमोरी के सामने लचीलापन महत्वपूर्ण है या जहां बहुत अधिक या बहुत बड़ी वस्तुओं को सामान्यतः नियंत्रित किया जाता है। G_try_new() का उपयोग तब किया जा सकता है जब मेमोरी आवंटन विफल होने की अधिक संभावना होती है (उदाहरण के लिए एक बड़ी वस्तु के लिए) लेकिन यह यह स्वीकृति नहीं दे सकता कि आवंटन कोड में कहीं और विफल नहीं होगा।[8]
एक और महत्वपूर्ण अंतर यह है कि जबकि C++ और ऑब्जेक्टिव-सी अलग-अलग भाषाएं हैं, GObject
पूरी तरह से एक लाइब्रेरी है और इस तरह कोई नया सिंटैक्स या कंपाइलर इंटेलिजेंस पेश नहीं करता है। उदाहरण के लिए, GObject
-आधारित C कोड लिखते समय, स्पष्ट अपकास्टिंग करना अक्सर आवश्यक होता है।[citation needed] इसलिए, "GObject
के साथ C", जिसे सादे C से अलग भाषा के रूप में माना जाता है, सादे C का एक सख्त सुपरसेट है - ऑब्जेक्टिव की तरह सी, लेकिन सी++ के विपरीत।
उन प्लेटफ़ॉर्म पर जहां कोई मानक ABI नहीं है जो सभी C++ कंपाइलरों पर काम करता है (जो सामान्यतः मामला नहीं है, क्योंकि सामान्यतः इटेनियम ABI या Microsoft ABI का पालन किया जाता है), एक C++ कंपाइलर के साथ संकलित लाइब्रेरी हमेशा कॉल करने में सक्षम नहीं होती है लाइब्रेरी को किसी भिन्न लाइब्रेरी के साथ संकलित किया गया है। सभी निर्यातित प्रतीकों की विशिष्टता सुनिश्चित करने के लिए संकलक विभिन्न प्रकार के नाम प्रबंधन का उपयोग करते हैं। (यह आवश्यक है क्योंकि, उदाहरण के लिए, दो अलग-अलग वर्गों में समान नाम वाले सदस्य फ़ंक्शन हो सकते हैं, एक फ़ंक्शन नाम कई बार ओवरलोड हो सकता है, या समान नाम वाले फ़ंक्शन अलग-अलग नामस्थानों में दिखाई दे सकते हैं, लेकिन ऑब्जेक्ट कोड में इन ओवरलैप्स की स्वीकृति नहीं है।)[citation needed] इसके विपरीत, चूंकि सी किसी भी प्रकार के ओवरलोडिंग या नेमस्पेसिंग का समर्थन नहीं करता है, सी पुस्तकालयों के लेखक सामान्यतः अपने निर्यातित नामों की वैश्विक विशिष्टता सुनिश्चित करने के लिए स्पष्ट उपसर्गों का उपयोग करेंगे।[citation needed] इसलिए, वस्तु-उन्मुख होने के बावजूद, ए C में लिखी गई GObject
-आधारित लाइब्रेरी हमेशा समान बाहरी प्रतीक नामों का उपयोग करेगी, चाहे किसी भी कंपाइलर का उपयोग किया गया हो।
शायद सबसे गहरा अंतर संकेतों पर GObject
का जोर है (जिसे अन्य भाषाओं में घटनाएँ कहा जाता है)।[citation needed] यह जोर इस तथ्य से लिया गया है कि GObject
को विशेष रूप से जीयूआई टूलकिट की जरूरतों को पूरा करने के लिए डिज़ाइन किया गया था। जबकि अधिकांश वस्तु-उन्मुख भाषाओं के लिए सिग्नल लाइब्रेरी मौजूद हैं, GObject
के मामले में इसे ऑब्जेक्ट सिस्टम में बनाया गया है। इस वजह से, एक सामान्य GObject
एप्लिकेशन गैर-GObject
एप्लिकेशन की तुलना में बहुत अधिक हद तक सिग्नल का उपयोग करेगा, जिससे GObject
घटकों को सादे C++ या Java का उपयोग करने वाले घटकों की तुलना में बहुत अधिक इनकैप्सुलेटेड और पुन: प्रयोज्य बना दिया जाएगा।[citation needed][according to whom?] यदि glibmm/gtkmm, Glib/GTK के लिए आधिकारिक C++ रैपर क्रमशः का उपयोग किया जाता है, तो सहोदर प्रोजेक्ट libsigc++ मानक C++ का उपयोग करके अंतर्निहित GObject
संकेतों के आसान उपयोग की स्वीकृति देता है। बेशक, सिग्नल के अन्य कार्यान्वयन लगभग सभी प्लेटफार्मों पर उपलब्ध हैं, हालांकि कभी-कभी एक अतिरिक्त लाइब्रेरी की आवश्यकता होती है, जैसे C++ के लिए Boost.Signals2।
यह भी देखें
- वैला - एक
GObject
-आधारित प्रोग्रामिंग भाषा जिसमें C# जैसा सिंटैक्स सोर्स टू सोर्स कंपाइलर टू सी है। - जिन्न (प्रोग्रामिंग भाषा) - पायथन-शैली वैला कंपाइलर के लिए वैकल्पिक सिंटैक्स पार्सर
संदर्भ
- ↑ "GObject Reference Manual".
- ↑ "GObject Reference Manual - Stable".
- ↑ "glib-mkenums, GObject Reference Manual".
- ↑ "आत्मनिरीक्षण, सारांश". Gnome Developer, Programming Guidelines - Specific How-Tos. Retrieved 9 August 2020.
- ↑ "एक नया गोब्जेक्ट कैसे परिभाषित और कार्यान्वित करें". gnome.org. Retrieved 27 July 2013.
- ↑ "c++ - Why Was the GObject System Created?". Stack Overflow. Retrieved 2019-11-16.
- ↑ "Memory Allocation: GLib Reference Manual". developer.gnome.org. Retrieved 2019-11-16.
- ↑ "Memory Allocation: GLib Reference Manual". developer.gnome.org. Retrieved 2019-11-17.