سؤال

لقد رأيت أنه يستخدم في البرمجة (على وجه التحديد في مجال C ++) وليس لدي أي فكرة عما هو عليه. من المفترض أنه نمط تصميم ، لكنني قد أكون مخطئًا. هل يمكن لأي شخص إعطاء مثال جيد على thunk؟

هل كانت مفيدة؟

المحلول

أ thunk عادةً ما يشير إلى قطعة صغيرة من الكود تسمى كدالة ، ويفعل شيئًا صغيرًا ، وبعد ذلك JUMPS إلى موقع آخر (عادة ما تكون وظيفة) بدلاً من العودة إلى المتصل. على افتراض أن هدف القفز هو وظيفة طبيعية ، عند عودته ، سيعود إلى المتصل.

يمكن استخدام Thunks لتنفيذ الكثير من الأشياء المفيدة بكفاءة

  • ترجمة البروتوكول - عند الاتصال من الكود الذي يستخدم اتفاقية استدعاء واحدة إلى الكود الذي يستخدم اتفاقية استدعاء مختلفة ، أ thunk يمكن استخدامها لترجمة الحجج بشكل مناسب. هذا يعمل فقط إذا كانت اتفاقيات العودة متوافقة ، ولكن هذا هو الحال في كثير من الأحيان

  • معالجة الوظائف الافتراضية-عند استدعاء وظيفة افتراضية لفئة قاعدة مضاعفة في C ++ ، يجب أن يكون هناك إصلاح this مؤشر للحصول عليه للإشارة إلى المكان الصحيح. أ thunk تستطيع فعلها.

  • الإغلاق الديناميكي - عندما تقوم ببناء إغلاق ديناميكي ، يجب أن تكون وظيفة الإغلاق قادرة على الوصول إلى السياق الذي تم إنشاؤه فيه. صغير thunk يمكن بناؤه (عادة على المكدس) الذي يقوم بإعداد معلومات السياق في بعض السجلات (السجلات) ثم يقفز إلى قطعة رمز ثابتة تنفذ وظيفة الإغلاق. تقوم Thunk هنا بتوفير وسيطات إضافية مخفية أو أكثر إلى الوظيفة التي لا يتم توفيرها بواسطة موقع الاتصال.

نصائح أخرى

كلمة thunk لديها ما لا يقل عن ثلاثة معاني ذات الصلة في علوم الكمبيوتر. قد يكون "thunk":

  • قطعة من الكود لإجراء حساب تأخر (على غرار الإغلاق)
  • ميزة من بعض تطبيقات جدول الوظائف الافتراضية (على غرار وظيفة الغلاف)
  • رسم خرائط لبيانات الجهاز من نموذج خاص بالنظام إلى آخر ، عادة لأسباب توافق

لقد رأيت عادة أنها تستخدم في السياق الثالث.

http://en.wikipedia.org/wiki/thunk

بعض المترجمين للغات الموجهة للكائنات مثل C ++ ينشئ وظائف تسمى "thunks" كتحسين لمكالمات الوظائف الافتراضية في وجود ميراث متعدد أو افتراضي.

مأخوذ من: http://en.wikipedia.org/wiki/thunk#thunks_in_object-oriented_programming

يشير مصطلح thunk في الأصل إلى الآلية المستخدمة من قبل مؤسسة الرادار الملكي تنفيذ التمرير في اسمهم Algol60 المترجم. بشكل عام ، يشير إلى أي طريقة للحث على السلوك الديناميكي عند الرجوع إلى كائن ثابت على ما يبدو. تم اختراع المصطلح من قبل براين ويشمان ، الذي طُلب منه أن يشرح "بتمريرة" ، "حسنًا ، تخرج لتحميل القيمة من الذاكرة ثم فجأة - هناك - هناك تقوم بتقييم تعبير".

تم وضع Thunks في الأجهزة (راجع KDF9 ، Burroughs Mainframes). هناك عدة طرق لتنفيذها في البرامج ، وجميع الماكينة واللغة والمترجم.

لقد أصبح المصطلح معممًا إلى ما هو أبعد من التمرير ، ليشمل أي موقف يؤدي فيه مرجع البيانات الثابتة على ما يبدو أو اسميًا إلى سلوك ديناميكي. تشمل المصطلحات ذات الصلة "الترامبولين" و "المستقبل".

هناك تباين كبير في الاستخدام. عالميا تقريبا ، thunk هي وظيفة (على الأقل من الناحية المفاهيمية) صغيرة وبسيطة بشكل غير عادي. عادةً ما يكون هناك نوع من المحول الذي يمنحك الواجهة الصحيحة لشيء أو آخر (بعض البيانات ، وظيفة أخرى ، وما إلى ذلك) ولكن على الأقل يُنظر إليه على أنه لا يفعل سوى القليل.

إنه يشبه تقريبًا شكل من أشكال السكر النحوي ، باستثناء أنه (على الأقل كما هو مستخدم عادةً) من المفترض أن يجعل السكر النحوي يبدو بالطريقة التي يريدها القارئ البشري برؤيتها ، وتوصل إلى جعل شيء يبدو بالطريقة التي يريدها المترجم رؤيته.

سأبحث عن هذا ، لكنني فكرت الصيد كانت العملية التي يستخدمها معالج 32 بت لتشغيل رمز قديم 16 بت.

اعتدت على استخدامه كقياس لكيفية قيامك بتقييد مدى سرعة التحدث والكلمات التي تستخدمها عند التحدث إلى الأشخاص الغبيين.

نعم ، إنه في رابط ويكيبيديا (الجزء حوالي 32 بت ، وليس لي تطهير).

https://en.wikipedia.org/wiki/thunk

يتعلق الكثير من الأدبيات على قابلية التشغيل المتداخل بمختلف منصات Wintel ، بما في ذلك MS-DOS ، OS/2 ، [8] Windows [9] [10] و .NET ، وإلى الانتقال من معالجة ذاكرة 16 بت إلى 32 بت. مع ترحيل العملاء من منصة إلى أخرى ، كان Thunks ضروريًا لدعم البرامج القديمة المكتوبة للمنصات القديمة.

(تم التركيز من قبلي)

لقد تم طرح هذا السؤال بالفعل على ذلك ، انظر:

ما هو "thunk" ، كما هو مستخدم في المخطط أو بشكل عام؟

من ما يمكنني قوله ، إنه أقرب إلى بيان Lambda ، حيث قد لا ترغب في إعادة القيمة حتى تحتاج إلى تقييمها ؛ أو يمكن أيضًا مقارنتها بـ Getter الخاصية التي تنفذها بعض التعليمات البرمجية من أجل إرجاع قيمة مع وجود نموذج الواجهة الذي يشبه إلى حد كبير متغيرًا ، ولكن لديه أيضًا سلوك متعدد الأشكال يمكن تبديله سواء عن طريق الميراث أو من خلال تبديل مؤشر الوظيفة الذي من شأنه أن يقيم وإرجاع القيمة في وقت التشغيل بناءً على خصائص الترجمة أو الخصائص البيئية.

شعرت بالأسى لعدم العثور على "علوم الكمبيوتر" العامة لهذا المصطلح الذي يطابق استخدامه الفعلي كما هو معروف تاريخيا بالنسبة لي. أول لقاء واقعية يمكنني أن أتذكر المكان الذي كان يطلق عليه بالفعل في نظام التشغيل/يومين والانتقال 16-32 بت. يبدو أن "thunking" يشبه المفارقة في تطبيقها اليوم.

ما أفهمه العام هو أن thunk هو روتين كعب لا يفعل شيئًا أو طرقًا عبر بعض الحدود الأساسية بين الأنظمة كما في الحالات التاريخية المذكورة.

لذا فإن المعنى يشبه التخدير الذي تم إسقاطه من البيئة الواحدة إلى الأخرى التي تصنع (مجازيًا/كسيلي) صوت "thunk".

لكل كايل سيمبسون تعريف ، أ صوت التصادم هي وسيلة لتجريد مكون من الوقت من الكود غير المتزامن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top