সুইফ্টের কেন সাক্ষীর টেবিলের প্রয়োজন?


10

আমি সুইফ্টের প্রয়োগের বিশদটি পড়তে চেষ্টা করছি এবং একটি জিনিস যা আমি পেরে উঠতে পারি না তা হ'ল তার "সাক্ষীর সারণী"। দেখে মনে হচ্ছে তারা স্ট্রাক্টের জন্য আলাদা আলাদা vtable পয়েন্টার।

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


1
আপনি এই স্ট্রাক্ট সাক্ষী টেবিলের কিছু সংস্থানকে নির্দেশ করতে পারেন? আমি যেগুলি খুঁজে পেতে সক্ষম হয়েছি সেগুলি হ'ল প্রোটোকল সাক্ষীর সারণী।
জার্গ ডব্লু মিট্টাগ

উত্তর:


12

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

আপনি সুইফ্ট মেমরি লেআউট সম্পর্কে আরও শিখতে পারেন ।


সি # তেও একই ঘটনা ঘটে, যার সাথে আমি আরও পরিচিত। একটি ইন্টারফেস ভেরিয়েবল বা ক্ষেত্র / সদস্যকে নির্ধারিত একটি কাঠামো বাক্সযুক্ত, এবং কাঠামোর বক্সযুক্ত উপস্থাপনা শ্রেণীর উপস্থাপনার সাথে মেলে, যার অর্থ বক্সযুক্ত স্ট্রাক্টগুলির জন্য একটি ভেটেবল রয়েছে।

আমি প্রত্যাশা করব যে সি # এবং সুইফট উভয়ই সরাসরি কল করতে যখন আইটেমটি সংকলনের সময় স্ট্রাক্ট হিসাবে পরিচিত হয় এবং সংকলনের সময় ভিটিবেল প্রেরণ ব্যবহার করা হয়, তখন আইটেমটি কেবল ইন্টারফেস হিসাবে পরিচিত।


1
"আইটেমটি সংকলনের সময় কাঠামো হিসাবে পরিচিত হওয়ার সময় আমি সি # এবং সুইফট উভয়ই সরাসরি কল করার প্রত্যাশা করবো," হ্যাঁ, এটি একটি অনুবর্তন
আলেকজান্ডার -

উপরের লিঙ্কটি আর কাজ করে না। আপনি সম্ভবত github.com/apple/swift/blob/master/docs/ABI/TypeLayout.rst উল্লেখ করতে চান ।
মার্টিন আর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.