'থাঙ্ক' কী?


130

আমি এটি প্রোগ্রামিংয়ে (বিশেষত সি ++ ডোমেনে) ব্যবহৃত হয়ে দেখেছি এবং এটি কী তা সম্পর্কে কোনও ধারণা নেই। সম্ভবত এটি একটি নকশার প্যাটার্ন, তবে আমি ভুল হতে পারি। কেউ কি একটি বংশের একটি ভাল উদাহরণ দিতে পারেন?


10
ঠিক একটি এফওয়াইআই হিসাবে, একটি থানকে কখনও কখনও 'ট্রাম্পোলিন' (সাধারণ ক্ষেত্রে, সম্ভবত সি ++ ডোমেনেও বলা হয় না) বলা হয়।
মাইকেল বুড়

@ মিশেলবার, আমি কেবলমাত্র "ট্রাম্পোলিন" শব্দটি ব্যবহার করেছি ডেটোরস এবং সেই প্রসঙ্গে ট্রামপোলিনটি শাঁস নয়।
ব্যবহারকারী 34660

1
শব্দটি এমন এক ধরণের জিনিস যার নির্দিষ্ট সংজ্ঞা থাকে না সুতরাং এটি সংজ্ঞায় পরিবর্তিত হয়।
ব্যবহারকারী 34660

উত্তর:


132

একটি thunkসাধারণত কোডের একটি ছোট অংশকে বোঝায় যা একটি ফাংশন হিসাবে ডাকা হয়, কিছু ছোট কাজ করে এবং JUMPতার কলারে ফিরে না গিয়ে অন্য জায়গায় (সাধারণত একটি ফাংশন) যায় s জেএমপি টার্গেট ধরে নেওয়া একটি সাধারণ ফাংশন, যখন এটি ফিরে আসবে, এটি থাঙ্কের কলারে ফিরে আসবে।

থানস কার্যকরভাবে প্রচুর দরকারী জিনিস কার্যকরভাবে প্রয়োগ করতে ব্যবহৃত হতে পারে

  • প্রোটোকল অনুবাদ - একটি কলিং কনভেনশন ব্যবহার করে এমন কোড থেকে কল করে যখন কোনও ভিন্ন কলিং কনভেনশন thunkব্যবহার করে , একটি যুক্তি যথাযথভাবে অনুবাদ করতে ব্যবহার করা যেতে পারে। এটি কেবলমাত্র যদি রিটার্ন কনভেনশনগুলি সুসংগত হয় তবে কাজ করে তবে প্রায়শই এটি ঘটে

  • ভার্চুয়াল ফাংশন হ্যান্ডলিং - যখন সি ++ তে বহুগুণ-উত্তরাধিকারসূত্রে বেস শ্রেণীর ভার্চুয়াল ফাংশনটি কল করার সময় thisপয়েন্টারটিকে সঠিক জায়গায় চিহ্নিত করতে এটির একটি ফিক্স-আপ হওয়া দরকার । এ এটি thunkকরতে পারে।

  • গতিশীল সমাপ্তি - আপনি যখন একটি গতিশীল ক্লোজার তৈরি করেন, ক্লোজার ফাংশনটি যেখানে তৈরি হয়েছিল সেই প্রসঙ্গে পৌঁছাতে সক্ষম হওয়া প্রয়োজন। একটি ছোট thunkতৈরি করা যেতে পারে (সাধারণত স্ট্যাকের উপরে) যা কিছু নিবন্ধভুক্ত (গুলি) এর প্রাসঙ্গিক তথ্য সেট করে এবং তারপরে কোডটির একটি স্ট্যাটিক টুকরোয় যায় যা বন্ধের ফাংশনটি কার্যকর করে। এখানে থঙ্কটি কার্যকরভাবে কল সাইট দ্বারা সরবরাহ করা হয়নি এমন ফাংশনে এক বা একাধিক লুকানো অতিরিক্ত যুক্তি সরবরাহ করে।


13
এটি সর্বোত্তম ব্যাখ্যা, কারণ এটি সাধারণত বিভিন্ন জিনিস বাস্তবায়নের জন্য সাধারণত ব্যবহারের ক্ষেত্রে কী করে তার পরিবর্তে থাঙ্কটি কী তা ব্যাখ্যা করে । অন্যান্য উত্তরগুলি সাধারণ ধারণার পরিবর্তে সেই নির্দিষ্ট প্রয়োগগুলিতে খুব বেশি মনোযোগ দেয়।
সাসকিউ

অন্যান্য সংকলক সম্পর্কে নিশ্চিত না, তবে বিশেষত ভিজ্যুয়াল স্টুডিওগুলি থঙ্কগুলি খুব পছন্দ করে। আমার জ্ঞানের হিসাবে এটি ব্যবহার করে: অ্যাডজাস্টার থঙ্কস (সমন্বয় করতে this), ডিফল্ট / অনুলিপি কনস্ট্রাক্টর ক্লোজার্স ( ডিফল্ট প্যারামিটার সহ ব্যবহারকারী-সরবরাহকৃত সিআরটি সংহতকরণের জন্য, প্রধানত ডিএলএল রফতানি বা অ্যারে নির্মাণের জন্য), vcallথুনস (নিশ্চিত পয়েন্টার-থেকে নিশ্চিত করতে ) -মেম্বার-ফাংশনগুলি ভার্চুয়াল ফাংশনগুলির সাথে যথাযথভাবে কাজ করে), vtordispথুনস (ভার্চুয়াল ঘাঁটিগুলি থেকে ভার্চুয়াল ফাংশনগুলির উত্তরাধিকারী ও ওভাররাইড করা ক্লাসগুলির জন্য, এবং ব্যবহারকারী দ্বারা সরবরাহিত কর্টর এবং / অথবা ড্টর রয়েছে), নেটিভ র‍্যাপারস (পরিচালিত সি ++ / সি এলআই কল করতে
জাস্টিন টাইম - মনিকা

নেটিভ আইএসও সি ++ কোড থেকে ফাংশন) এবং " UDT returning" নামে পরিচিত এমন কিছু (যা অপারেটরদের দ্বারা প্রত্যাবর্তিত ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলি সামঞ্জস্য করার জন্য একটি থানক হিসাবে উপস্থিত বলে মনে হয়, তবে কীভাবে এটি উত্পন্ন করা যায় তা সম্পর্কে আমি নিশ্চিত নই; আমি মনে করি এটি অবমানিত হয়েছে)। অন্যরাও সম্ভবত আছেন। আমার ধারণা আপনি কখনও মাইক্রোসফ্ট বলতে পারবেন thunkনা; গর্বিত হবে।
জাস্টিন সময় - মনিকা

80

থংক শব্দটির কম্পিউটার বিজ্ঞানে কমপক্ষে তিনটি সম্পর্কিত অর্থ রয়েছে। একটি "থঙ্ক" হতে পারে:

  • বিলম্বিত গণনা সম্পাদনের জন্য কোডের একটি অংশ (বন্ধের সমান)
  • কিছু ভার্চুয়াল ফাংশন টেবিল প্রয়োগকরণের একটি বৈশিষ্ট্য (একটি র‌্যাপার ফাংশনের অনুরূপ)
  • সাধারণত সামঞ্জস্যের কারণে এক সিস্টেম-নির্দিষ্ট ফর্ম থেকে অন্যটিতে মেশিনের ডেটা ম্যাপিং

আমি সাধারণত এটি তৃতীয় প্রসঙ্গে ব্যবহার করতে দেখেছি।

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


3
মজাদার; আমি সাধারণত দ্বিতীয় রূপটি শুনি তবে আমার ধারণা এটি নির্ভর করে যে আপনি কী ধরনের কাজ বেশি প্রায়ই করেন
মাইকেল মরোজেক

বিশেষত, মেশিন কোডের খুব সংক্ষিপ্ত ব্লক স্বয়ংক্রিয়ভাবে উত্পন্ন হওয়ার সাথে সম্পর্কিত - এমনকি প্রথম কেসটি সাধারণত একটি প্রাকম্পাইল বাস্তবায়ন ফাংশনটির প্রসঙ্গ দেয়।
সাইমন বুচান

21

থঙ্ক শব্দটি মূলত তাদের আলগোল 60 সংকলকটিতে রয়্যাল রাডার প্রতিষ্ঠার দ্বারা পাস-বাই-নাম প্রয়োগের ব্যবস্থার দ্বারা ব্যবহৃত ব্যবস্থাকে বোঝায় । একটি স্পষ্টত স্থির অবজেক্টের উল্লেখ করার সময় সাধারণভাবে এটি গতিশীল আচরণকে প্ররোচিত করার কোনও উপায়কে বোঝায়। এই শব্দটি আবিষ্কার করেছিলেন ব্রায়ান উইচম্যান, যিনি পাস-বাই-নাম ব্যাখ্যা করতে বললেন, "আচ্ছা আপনি স্মৃতি থেকে মানটি লোড করতে যান এবং হঠাৎ - থাঙ্ক - সেখানে আপনি একটি অভিব্যক্তি মূল্যায়ন করছেন।"

চিন্তাগুলি হার্ডওয়ারে রাখা হয়েছে (সিএফ। কেডিএফ 9, বুড়োস মেইনফ্রেমস)। এগুলি সফ্টওয়্যারগুলিতে প্রয়োগ করার বিভিন্ন উপায় রয়েছে, সমস্ত খুব মেশিন, ভাষা এবং নির্দিষ্ট সংকলক।

এই শব্দটি পাস-বাই-নাম ছাড়িয়ে সাধারণীকরণ করা হয়েছে, দৃশ্যত বা নামমাত্র স্থির ডেটা রেফারেন্সটি গতিশীল আচরণকে প্ররোচিত করে এমন কোনও পরিস্থিতিতে অন্তর্ভুক্ত করার জন্য। সম্পর্কিত পদগুলির মধ্যে "ট্রাম্পোলিন" এবং "ভবিষ্যত" অন্তর্ভুক্ত রয়েছে।


2
ব্যুৎপত্তির জন্য ধন্যবাদ। আমি প্রোগ্রামিং পদগুলিকে ঘৃণা করি যার সংজ্ঞাটি একটি টেবিলের মধ্যে একটি স্বেচ্ছাসেবী চেহারা বলে মনে হচ্ছে।
রস রজার্স

17

একাধিক বা ভার্চুয়াল উত্তরাধিকারের উপস্থিতিতে ভার্চুয়াল ফাংশন কলগুলির অপ্টিমাইজেশান হিসাবে "থঙ্কস" নামক ফাংশন তৈরি করে যেমন অবজেক্ট-ওরিয়েন্টেড ভাষার জন্য কিছু সংকলক।

থেকে নেওয়া: http://en.wikedia.org/wiki/Thunk#Thunks_in_object- ওরিয়েন্টেড_প্রগ্রামিং


7

ব্যবহারে যথেষ্ট পার্থক্য রয়েছে। প্রায় সর্বজনীনভাবে, একটি থাঙ্ক একটি ফাংশন যা (কমপক্ষে ধারণাগতভাবে) অস্বাভাবিকভাবে ছোট এবং সাধারণ। এটি সাধারণত কোনও ধরণের অ্যাডাপ্টার যা আপনাকে কোনও কিছু বা অন্য (কিছু ডেটা, অন্য কোনও ক্রিয়াকলাপ ইত্যাদির) জন্য সঠিক ইন্টারফেস দেয় তবে কমপক্ষে অন্য কিছু করার মতো দেখা যায়।

এটি প্রায়শই সিনট্যাকটিক চিনির একধরণের মতো (কমপক্ষে সাধারণত ব্যবহৃত হিসাবে) সিনট্যাকটিক চিনির জিনিসগুলি মানব পাঠক যেভাবে দেখতে চায় তার দৃষ্টি আকর্ষণ করবে এবং সংকলকটি যেভাবে চায় সেভাবে কিছু তৈরি করা উচিত এটা দেখ.


2
আমার কাছে সিনট্যাকটিক চিনির বিপরীতে শোনাচ্ছে :)
লেজারালালান

2
সংকলকগুলির জন্য সিনট্যাকটিক চিনি তখন? প্রায়, তবে বেশিরভাগ ক্ষেত্রে সিনট্যাকটিক চিনির সম্পূর্ণ ভিন্ন।
ডানকান

2
সম্ভবত একটি সিনট্যাকটিক সৌরনার?
জাস্টিন সময় - মনিকা

7

এই প্রশ্নটি ইতিমধ্যে এসওকে জিজ্ঞাসা করা হয়েছে, দেখুন:

স্কিম বা সাধারণভাবে ব্যবহৃত একটি 'থঙ্ক' কী?

আমি যা বলতে পারি তা থেকে, এটি ল্যাম্বডা স্টেটমেন্টের অনুরূপ, যেখানে আপনি এটির মূল্যায়ন না করা পর্যন্ত আপনি মানটি ফিরিয়ে দিতে চান না; অথবা এটি কোনও প্রপার্টি গেটারের সাথেও তুলনা করা যেতে পারে যা কোনও ভেরিয়েবলের মতোই ইন্টারফেস ফর্মটি উপস্থিত হওয়ার সাথে সাথে মান ফেরত দেওয়ার জন্য ডিজাইন দ্বারা কিছু কোড কার্যকর করে তবে এর সাথে বহুবর্ষীয় আচরণও থাকে যা উত্তরাধিকারসূত্রে বা অদৃশ্য হয়ে যায় কিনা সংকলন-সময় বা পরিবেশগত বৈশিষ্ট্যের উপর ভিত্তি করে রানটাইমে কোনও মান মূল্যায়ন ও ফিরিয়ে আনতে পারে এমন ফাংশন পয়েন্টারটি অদলবদল করে।


5

আমার কাছে termতিহাসিকভাবে পরিচিত হিসাবে এটির ডি-ফ্যাক্টোর ব্যবহারের সাথে মেলে না এই শব্দটির কোনও সাধারণ 'কম্পিউটার বিজ্ঞান' সংজ্ঞা খুঁজে পেয়ে আমি ব্যথিত হয়েছিলাম। প্রথম বাস্তব জীবনের মুখোমুখি আমি স্মরণ করতে পারি যে এটিকে আসলে ওএস / ২ দিন এবং 16-32 বিট ট্রানজিশনে বলা হয়েছিল। এটি প্রদর্শিত হচ্ছে "ক্ষুধা" আজকের প্রয়োগে বিড়ম্বনার মতো।

আমার মোটামুটি সাধারণ বোধগম্যতা হ'ল থাঙ্ক একটি জড় রুটিন যা উল্লিখিত historicalতিহাসিক ক্ষেত্রে যেমন সিস্টেমের মধ্যে কিছু মৌলিক সীমানা জুড়ে কিছুই বা রুট করে না।

সুতরাং ইন্দ্রিয়টি এক পরিবেশ থেকে অন্য পরিবেশে (রূপকভাবে / একটি উপমা হিসাবে) একটি "থঙ্ক" শব্দ হিসাবে ফেলে দেওয়ার সিনডেসিয়ার মতো।


1
আকর্ষণীয় পরামর্শ। আমি এই শব্দের প্রকৃত ব্যুৎপত্তি সম্পর্কেও ভাবছিলাম এবং আমি "বুশ টেলিগ্রাফ" বাজানোর লোকদের কল্পনা করেছি, যেখানে স্রোতের মধ্যে থাকা একজন ব্যক্তি নিঃশব্দে (এবং অনেক ক্ষেত্রে অজান্তেই) বার্তাটি রূপান্তরিত করে।
সাসকিউ

5

আমি এটি সন্ধান করতে যাচ্ছি, কিন্তু আমি ভেবেছিলাম যে উত্তরাধিকার 16-বিট কোড চালানোর জন্য 32-বিট প্রসেসরের দ্বারা নিযুক্ত প্রক্রিয়াটি হ'ল থিংকিং

আপনি কীভাবে দ্রুত কথা বলেন এবং বোবা মানুষের সাথে কথা বলার সময় আপনি কী শব্দ ব্যবহার করেন তা কীভাবে সীমাবদ্ধ করতে হবে তার জন্য আমি এটিকে উপমা হিসাবে ব্যবহার করতাম।

হ্যাঁ, এটি উইকিপিডিয়া লিঙ্কে রয়েছে (অংশটি 32-বিট, আমার স্নাতকের নয় )।

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

আন্তঃব্যবহারযোগ্যতার অংশগুলির বেশিরভাগ সাহিত্য এমএস-ডস, ওএস / ২, [8] উইন্ডোজ [9] [10] এবং .NET সহ বিভিন্ন উইন্টেল প্ল্যাটফর্মের সাথে সম্পর্কিত এবং 16-বিট থেকে 32-বিট মেমরি সম্বোধনে রূপান্তরিত হয়েছে । গ্রাহকরা যেমন এক প্ল্যাটফর্ম থেকে অন্য প্ল্যাটফর্মে স্থানান্তরিত হয়েছে, পুরানো প্ল্যাটফর্মগুলির জন্য লিখিত লিগ্যাসি সফ্টওয়্যার সমর্থন করার জন্য থঙ্কগুলি প্রয়োজনীয় ছিল।

(আমার দ্বারা জোর দেওয়া)


1

আমি জানি "থঙ্ক" এর প্রথম দিকের ব্যবহারটি ফাংশন কলগুলিতে অ্যালগল 60 পাশ-নাম যুক্তি মূল্যায়নের প্রসঙ্গে 50 এর দশকের শেষ দিক থেকে। অ্যালগল মূলত প্রোগ্রামিং ভাষা নয়, একটি স্পেসিফিকেশন ভাষা ছিল এবং কম্পিউটারে পাস-বাই-নাম কীভাবে প্রয়োগ করা যেতে পারে সে সম্পর্কে কিছুটা প্রশ্ন ছিল।

সমাধানটি ছিল মূলত ল্যাম্বডা কী ছিল তা প্রবেশের পয়েন্টটি পাস করা। কলি যখন প্যারামিটারটি মূল্যায়ন করল, তখন নিয়ন্ত্রণটি পড়ে গেল - থ্যাঙ্ক! - কলারের প্রসঙ্গে যেখানে ল্যাম্বডা মূল্যায়ন করা হয়েছিল এবং এর ফলাফলটি কলিতে প্যারামিটারের মান হয়ে উঠেছে।

বুড়ো মেশিনের মতো ট্যাগযুক্ত হার্ডওয়্যারগুলিতে মূল্যায়ন অন্তর্নিহিত ছিল: একটি আর্গুমেন্ট সাধারণ পাস-বাই-ভ্যালু হিসাবে ডেটা মান হিসাবে বা পাস-নেমে থ্যাঙ্ক দিয়ে আর্গুমেন্ট মেটাডাটাতে বিভিন্ন ট্যাগ সহ পাস করা যেতে পারে an । একটি লোড অপারেশন হার্ডওয়্যার ট্যাগটি পরীক্ষা করে এবং হয় সাধারণ মানটি দেয় বা স্বয়ংক্রিয়ভাবে ল্যাম্বডা থাঙ্কটি শুরু করে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.