আমি এই সম্পর্কে কিছুটা ভেবেছি মূল ইস্যুটি হ'ল সাধারণভাবে, আমরা জানি না যে বহুবর্ষের ধরণের মান কত বড়। আপনার কাছে এই তথ্য না থাকলে আপনাকে কোনওভাবে এটি পেতে হবে। মনোমরফিজেশনটি পলিমারফিজমকে দূরে সরিয়ে বিশেষ করে আপনার জন্য এই তথ্যটি পেয়েছে। বক্সিং প্রতিটি আকারের জ্ঞাত আকারের উপস্থাপনের মাধ্যমে এই তথ্যটি পেয়েছে।
তৃতীয় বিকল্প হ'ল ধরণের মধ্যে এই তথ্যের উপর নজর রাখা। মূলত, আপনি যা করতে পারেন তা প্রতিটি ডাটা আকারের জন্য আলাদা ধরণের প্রবর্তন করা, এবং তারপরে পলিমারফিক ফাংশনগুলি নির্দিষ্ট আকারের সমস্ত ধরণের উপরে সংজ্ঞায়িত করা যায় can আমি নীচে যেমন একটি সিস্টেম স্কেচ করব।
KindsType constructorsκA::=n::=|∀a:κ.A|α|A×B|A+B|A→BrefA|Pad(k)|μα:κ.A
এখানে, উচ্চ স্তরের ধারণাটি হ'ল ধরণের ধরণ আপনাকে জানায় যে স্মৃতিতে কোনও অবজেক্ট রাখার জন্য কতগুলি শব্দ লাগে। যে কোনও আকারের জন্য, সেই নির্দিষ্ট আকারের সমস্ত ধরণের উপর বহুবচন হওয়া সহজ। যেহেতু প্রতিটি ধরণের - এমনকি পলিমারফিকও রয়েছে - এখনও একটি পরিচিত আকার রয়েছে তাই সংকলন সি এর চেয়ে শক্ত কিছু নয় isn't
দয়াকর নিয়মগুলি এই ইংরেজিকে গণিতে রূপান্তরিত করে এবং এর মতো দেখতে হবে: pha pha qu qu qu
α:n∈ΓΓ⊢α:nΓ,α:n⊢A:mΓ⊢∀α:n.A:m
Γ⊢A:nΓ⊢B:mΓ⊢A×B:n+mΓ⊢A:nΓ⊢B:nΓ⊢A+B:n+1
Γ⊢A:mΓ⊢B:nΓ⊢A→B:1Γ⊢A:nΓ⊢refA:1
Γ⊢Pad(k):kΓ,α:n⊢A:nΓ⊢μα:n.A:n
সুতরাং ফোরাল কোয়ান্টিফায়ার আপনার প্রয়োজন মতো ধরণের দিতে হবে। তেমনিভাবে, পেয়ারিং করা একটি আনবক্সড জুড়ি টাইপ, যা কেবল মেমরির পাশে একটি দেয় (সি স্ট্রাক্ট টাইপের মতো)। অসম্পূর্ণ ইউনিয়নগুলি একই আকারের দুটি মান নিয়ে যায় এবং তার পরে বৈষম্যমূলক ট্যাগের জন্য একটি শব্দ যুক্ত করে। ফাংশনগুলি ক্লোজার হয় যা পরিবেশ এবং কোডের একটি রেকর্ডে একটি পয়েন্টার দ্বারা যথারীতি উপস্থাপিত হয়।A×BAB
তথ্যসূত্রগুলি আকর্ষণীয় - পয়েন্টারগুলি সর্বদা একটি শব্দ হয় তবে তারা যে কোনও আকারের মানগুলিতে নির্দেশ করতে পারে। এটি প্রোগ্রামাররা
বক্সিংয়ের মাধ্যমে স্বেচ্ছাচারিত বস্তুগুলিতে পলিমারফিজম প্রয়োগ করতে দেয় , তবে
তাদের এটি করার প্রয়োজন হয় না। পরিশেষে, একবার স্পষ্ট আকারে খেলতে গেলে, প্রায়শই প্যাডিং প্রকারটি প্রবর্তন করতে দরকারী, যা স্থান ব্যবহার করে তবে কিছুই করে না। (সুতরাং আপনি যদি কোন int এবং একজোড়া ints এর বিভাজন ইউনিয়ন নিতে চান তবে আপনাকে প্রথম INT প্যাডিং যুক্ত করতে হবে, যাতে অবজেক্টের বিন্যাসটি সমান হয় is)
রিকার্সিভ টাইপগুলির স্ট্যান্ডার্ড গঠনের নিয়ম রয়েছে, তবে নোট করুন যে পুনরাবৃত্তির ঘটনাগুলি একই আকারের হতে হবে, যার অর্থ সাধারণত আপনার দয়া করে কাজটি করার জন্য একটি পয়েন্টারে আটকে থাকতে হয়। উদাহরণস্বরূপ, তালিকাটি ডেটাটাইপ হিসাবে প্রদর্শিত হতে পারে
μα:1.ref(Pad(2)+int×α)
সুতরাং এটি একটি খালি তালিকার মান, বা কোনও সংযুক্ত তালিকার একটি ইন্টের জোড়া এবং একটি পয়েন্টারকে নির্দেশ করে।
এই জাতীয় সিস্টেমে টাইপ চেক করা খুব কঠিন নয়; জোশুয়া ডানফিল্ডের সাথে আমার আইসিএফপি পেপারের অ্যালগরিদম, উচ্চতর র্যাঙ্ক পলিমারফিজমের জন্য সম্পূর্ণ এবং সহজ দ্বিদ্বিধায়ক টাইপচেকিং প্রায় কোনও পরিবর্তন ছাড়াই এই ক্ষেত্রে প্রযোজ্য।