मैंने इसे प्रोग्रामिंग में इस्तेमाल किया है (विशेष रूप से C ++ डोमेन में) और मुझे पता नहीं है कि यह क्या है। संभवतः यह एक डिज़ाइन पैटर्न है, लेकिन मैं गलत हो सकता है। क्या कोई ठग का अच्छा उदाहरण दे सकता है?
मैंने इसे प्रोग्रामिंग में इस्तेमाल किया है (विशेष रूप से C ++ डोमेन में) और मुझे पता नहीं है कि यह क्या है। संभवतः यह एक डिज़ाइन पैटर्न है, लेकिन मैं गलत हो सकता है। क्या कोई ठग का अच्छा उदाहरण दे सकता है?
जवाबों:
एक thunk
आम तौर पर, कोड का एक छोटा सा टुकड़ा है कि एक समारोह के रूप में कहा जाता है को संदर्भित करता है कुछ छोटे काम करता है, और उसके बाद JUMP
के बजाय अपने फोन करने वाले की ओर लौटने का एक और स्थान (आमतौर पर एक समारोह) के लिए है। JUMP टारगेट को मान लेना एक सामान्य कार्य है, जब यह वापस आएगा, तो यह थंक के कॉलर पर वापस आ जाएगा।
बहुत सी उपयोगी चीजों को कुशलता से लागू करने के लिए थ्रॉक्स का उपयोग किया जा सकता है
प्रोटोकॉल ट्रांसलेशन - कोड से कॉल करते समय जो एक कॉलिंग कन्वेंशन को कोड का उपयोग करता है जो एक अलग कॉलिंग कन्वेंशन का उपयोग करता है, का thunk
उपयोग तर्कों का उचित अनुवाद करने के लिए किया जा सकता है। यह केवल तभी काम करता है यदि रिटर्न कन्वेंशन संगत हैं, लेकिन अक्सर ऐसा होता है
वर्चुअल फ़ंक्शन हैंडलिंग - C ++ में बहु-विरासत वाले बेस क्लास के वर्चुअल फ़ंक्शन को कॉल करते समय, this
इसे सही स्थान पर इंगित करने के लिए पॉइंटर को ठीक करने की आवश्यकता होती है । A यह thunk
कर सकता है।
डायनेमिक क्लोजर - जब आप एक डायनेमिक क्लोजर का निर्माण करते हैं, तो क्लोजर फ़ंक्शन को उस संदर्भ में प्राप्त करने में सक्षम होने की आवश्यकता होती है जहां इसे बनाया गया था। एक छोटा thunk
बनाया जा सकता है (आमतौर पर स्टैक पर) जो कुछ रजिस्टर (ओं) में संदर्भ जानकारी सेट करता है और फिर कोड के एक स्थिर टुकड़े पर कूदता है जो क्लोजर के फ़ंक्शन को लागू करता है। यहां थंक प्रभावी रूप से फ़ंक्शन को एक या एक से अधिक छिपे हुए अतिरिक्त तर्क प्रदान कर रहा है जो कॉल साइट द्वारा प्रदान नहीं किए गए हैं।
this
), डिफॉल्ट / कॉपी कंस्ट्रक्टर क्लोजर (डिफॉल्ट मापदंडों के साथ मुख्य रूप से DLL एक्सपोर्ट या कंस्ट्रक्शन vcall
एरियर्स के लिए यूजर- प्रोवाइड के बेहतर CRT इंटीग्रेशन के लिए), थ्रक्स (सुनिश्चित करने के लिए शटर-टू -स्मार्ट-फ़ंक्शंस वर्चुअल फ़ंक्शंस के साथ ठीक से काम करते हैं), vtordisp
थ्रक्स (उन कक्षाओं के लिए जो वर्चुअल बेस से वर्चुअल फ़ंक्शंस को इनहेरिट और ओवरराइड करते हैं, और इसमें उपयोगकर्ता-प्रदान किए गए सीज़र और / या डार्टर्स भी हैं), मूल रैपर (प्रबंधित C ++ / CLI
UDT returning
" (जो ऑपरेटर द्वारा लौटाए गए उपयोगकर्ता-परिभाषित प्रकारों को समायोजित करने के लिए एक ठग प्रतीत होता है, लेकिन मुझे यकीन नहीं है कि यह कैसे उत्पन्न होता है? मुझे लगता है कि यह पदावनत है)। शायद दूसरे भी हैं। मुझे लगता है कि आप Microsoft को कभी नहीं कह सकते thunk
हैं; देकार्त को गर्व होगा।
कंप्यूटर विज्ञान में थंक शब्द के कम से कम तीन संबंधित अर्थ हैं। एक "ठग" हो सकता है:
मैंने आमतौर पर इसे तीसरे संदर्भ में इस्तेमाल किया है।
शब्द थंक मूल रूप से उनके अल्गोल 60 में पास-बाय-नाम के रॉयल रडार स्थापना कार्यान्वयन द्वारा उपयोग किए जाने वाले तंत्र को संदर्भित करता है संकलक करता है। सामान्य तौर पर यह किसी भी तरह से गतिशील व्यवहार को प्रेरित करने के लिए संदर्भित करता है जब एक स्पष्ट रूप से स्थिर वस्तु को संदर्भित करता है। इस शब्द का आविष्कार ब्रायन विचमन द्वारा किया गया था, जिन्होंने पास-पास के नाम को समझाने के लिए कहा था, "वैसे आप स्मृति से मूल्य को लोड करने के लिए बाहर जाते हैं और फिर अचानक - थंक - वहां आप एक अभिव्यक्ति का मूल्यांकन कर रहे हैं।"
थर्क्स को हार्डवेयर (cf. केडीएफ 9, बरोज मेनफ्रेम) में डाला गया है। सॉफ्टवेयर में उन्हें लागू करने के कई तरीके हैं, सभी बहुत मशीन, भाषा और संकलक विशिष्ट।
यह शब्द पास-बाय-नेम से परे सामान्यीकृत किया गया है, जिसमें किसी भी स्थिति को शामिल करना है जिसमें एक जाहिरा तौर पर या नाममात्र स्थैतिक डेटा संदर्भ गतिशील व्यवहार को प्रेरित करता है। संबंधित शब्दों में "ट्रम्पोलिन" और "भविष्य" शामिल हैं।
C ++ जैसी ऑब्जेक्ट-ओरिएंटेड भाषाओं के लिए कुछ कंपाइलर कई या वर्चुअल इनहेरिटेंस की मौजूदगी में वर्चुअल फंक्शन कॉल्स के ऑप्टिमाइज़ेशन के रूप में "थ्रोस" नामक फ़ंक्शन उत्पन्न करते हैं।
इससे लिया गया: http://en.wikipedia.org/wiki/Thunk#Thunks_in_object-oriented_programming
उपयोग में काफी भिन्नता है। लगभग सार्वभौमिक रूप से, एक थंक एक ऐसा कार्य है जो (कम से कम वैचारिक रूप से) असामान्य रूप से छोटा और सरल है। यह आमतौर पर किसी प्रकार का एडेप्टर होता है जो आपको कुछ या अन्य (कुछ डेटा, किसी अन्य फ़ंक्शन आदि) के लिए सही इंटरफ़ेस देता है, लेकिन कम से कम कुछ और करने के रूप में देखा जाता है।
यह लगभग सिंटैक्टिक शुगर के एक रूप की तरह है, सिवाय इसके कि (कम से कम आमतौर पर इस्तेमाल किया जाने वाला) सिंटैक्टिक शुगर चीजों को बनाने के लिए माना जाता है जिस तरह से मानव पाठक उन्हें देखना चाहता है, और एक कांटा कुछ ऐसा दिखना है जिस तरह से कंपाइलर चाहता है। इसे देखें।
यह प्रश्न पहले ही SO पर पूछा जा चुका है, देखें:
'थंक' क्या है, जैसा कि स्कीम में या सामान्य तौर पर इस्तेमाल किया जाता है?
मैं जो बता सकता हूं, वह एक लंबोदर के कथन की तरह है, जहां आप उस मूल्य को वापस नहीं करना चाहते जब तक कि आपको उसका मूल्यांकन करने की आवश्यकता न हो; या इसकी तुलना एक संपत्ति पाने वाले से भी की जा सकती है जो डिज़ाइन द्वारा कुछ कोड निष्पादित करता है ताकि वैल्यू लौटाने के लिए अभी तक इंटरफ़ेस रूप हो जो एक चर की तरह अधिक हो, लेकिन इसमें बहुरूपिक व्यवहार भी हो सकता है जिसे स्वैप किया जा सकता है चाहे विरासत द्वारा या फ़ंक्शन पॉइंटर को स्वैप करके, जो संकलन-समय या पर्यावरणीय विशेषताओं के आधार पर रनटाइम पर एक मूल्य का मूल्यांकन करेगा और लौटाएगा।
मुझे इस शब्द की कोई सामान्य 'कंप्यूटर विज्ञान' परिभाषा नहीं मिली, जो ऐतिहासिक रूप से मेरे लिए वास्तविक रूप में इसके वास्तविक उपयोग से मेल खाता हो। पहला वास्तविक जीवन मुठभेड़ मैं याद कर सकता हूं कि वास्तव में कहां बुलाया गया था जो ओएस / 2 दिनों में था और 16-32 बिट संक्रमण था। यह प्रतीत होता है "थुंकिंग" आज अपने आवेदन में विडंबना की तरह है।
मेरी मोटे तौर पर सामान्य समझ यह है कि यह ठूंठ एक नियमित दिनचर्या है, जो उल्लेखित ऐतिहासिक मामलों की तरह सिस्टम के बीच कुछ मूलभूत सीमाओं के पार कुछ भी नहीं करता है।
तो भाव एक पर्यावरण से दूसरे मेकिंग (रूपक / एक उपमा के रूप में) को "थंक" ध्वनि के रूप में गिराए जाने के एक पर्याय की तरह है।
मैं इसे देखने जा रहा हूं, लेकिन मैंने सोचा कि थ्रांकिंग एक 32-बिट प्रोसेसर द्वारा विरासत 16-बिट कोड को चलाने के लिए नियोजित प्रक्रिया थी।
मैंने इसका उपयोग एक सादृश्य के रूप में किया कि आपको कैसे बात करने के लिए कितनी तेजी से प्रतिबंधित करना है और लोगों को गूंगा करने के लिए आप किन शब्दों का उपयोग करते हैं।
हाँ, यह विकिपीडिया लिंक में है (लगभग 32-बिट वाला हिस्सा, न कि मेरी नीरोगली )।
https://en.wikipedia.org/wiki/Thunk
इंटरऑपरेबिलिटी थ्रो पर साहित्य का अधिकांश हिस्सा एमएस-डॉस, ओएस / 2, [8] विंडोज [9] [10] और .NET सहित विभिन्न विंटल प्लेटफार्मों से संबंधित है, और 16-बिट से 32-बिट मेमोरी एड्रेसिंग में संक्रमण के लिए। । चूंकि ग्राहक एक प्लेटफ़ॉर्म से दूसरे प्लेटफ़ॉर्म पर चले गए हैं, पुराने प्लेटफ़ॉर्म के लिए लिखी गई विरासत सॉफ़्टवेयर का समर्थन करने के लिए थ्रॉक्स आवश्यक है।
(मेरे द्वारा जोर दिया गया)
फ़ंक्शन कॉल में Algol60 पास-बाय-नाम तर्क मूल्यांकन के संदर्भ में "थंक" का सबसे पहला उपयोग मुझे पता है कि देर से 50 के दशक से है। अल्गोल मूल रूप से एक विनिर्देशन भाषा थी, प्रोग्रामिंग भाषा नहीं थी, और कुछ प्रश्न थे कि कंप्यूटर पर पास-बाय-नाम कैसे लागू किया जा सकता है।
इसका समाधान यह था कि अनिवार्य रूप से लंबोदर के प्रवेश बिंदु को पास किया जाए। जब कैलली ने पैरामीटर का मूल्यांकन किया, तो नियंत्रण के माध्यम से गिर गया - थंक! - कॉल करने वाले के संदर्भ में जहां लैम्ब्डा का मूल्यांकन किया गया था और यह कैलेले में पैरामीटर का मान बन गया है।
टैग किए गए हार्डवेयर में, जैसे कि बर्रोज़ मशीनें, मूल्यांकन निहित था: एक तर्क को डेटा मान के रूप में पारित किया जा सकता है जैसा कि साधारण पास-बाय-वैल्यू में, या पास-बाय-नाम के लिए थंक द्वारा, तर्क मेटाडेटा में अलग-अलग टैग के साथ किया जाता है। । लोड ऑपरेशन हार्डवेयर ने टैग की जाँच की और या तो साधारण मान लौटाया या स्वचालित रूप से लैंबडा थंक को आमंत्रित किया।
प्रति केली सिम्पसन की परिभाषा, एक thunk का सार घटक के लिए एक रास्ता है समय एसिंक्रोनस कोड से बाहर।