হিন্ডলি-মিলনার ধরণের অনুমিতি হিন্ডলি-মিলনার টাইপ সিস্টেমগুলির জন্য ব্যবহৃত হয়, সিস্টেম-এফ টাইপ সিস্টেমের একটি সীমাবদ্ধতা। এইচএম টাইপ সিস্টেমগুলির আকর্ষণীয় বৈশিষ্ট্যটি হ'ল তাদের প্যারামেট্রিক পলিমারফিজম (ওরফে জেনেরিকস) রয়েছে। এটিই একক বৃহত্তম ধরণের সিস্টেম বৈশিষ্ট্য যা গোলাং অস্বীকার করে।
হতাশাজনক সীমাবদ্ধতার সাথে, এইচএম-স্টাইলের ধরণের অনুমিতি অসম্ভব। অবিরত কোডটি দেখুন:
func f(a) {
return a.method()
}
কি ধরণের f
? আমরা লক্ষ্য হতে পারে a
একটি পদ্ধতি থাকা আবশ্যক, তাই আমরা একটি বেনামী ইন্টারফেস ব্যবহার করতে পারে: func f(a interface { method() ??? }) ???
। তবে, রিটার্নের ধরন কী তা আমাদের কোনও ধারণা নেই। প্রকারের ভেরিয়েবলের সাহায্যে আমরা প্রকারটি ঘোষিত করতে পারি
func f[T](a interface{ method() T }) T
তবে গোতে টাইপ ভেরিয়েবল নেই তাই এটি কাজ করবে না। অন্তর্নিহিত ইন্টারফেসগুলি প্রকারের অনুক্রমের কিছু দিককে আরও সহজ করে তোলে, তবে আমাদের কাছে এখন কোনও ফাংশন কলের রিটার্নের ধরণের সন্ধান করার কোনও উপায় নেই। এইচএম-সিস্টেমের অন্তর্নিহিত হওয়ার পরিবর্তে সমস্ত ফাংশন ঘোষিত হওয়া প্রয়োজন এবং প্রতিটি নামের মধ্যে কেবল একটি একক প্রকার থাকতে পারে (যেখানে গো-এর পদ্ধতিতে বিভিন্ন ইন্টারফেসে বিভিন্ন ধরণের থাকতে পারে)।
পরিবর্তে, গো এর জন্য প্রয়োজনীয় যে ফাংশনগুলি সর্বদা সম্পূর্ণ ঘোষিত হয়, তবে ভেরিয়েবলগুলিকে টাইপ ইনফারেন্স ব্যবহার করতে দেয়। এটি সম্ভব কারণ variable := expression
প্রোগ্রামের সেই মুহুর্তে একটি অ্যাসাইনমেন্টের ডান হাতের ইতিমধ্যে একটি পরিচিত টাইপ রয়েছে। এই জাতীয় ধরণের অনুমান সহজ, সঠিক এবং লিনিয়ার।
- ভেরিয়েবলের ধরণটি তত্ক্ষণাত্ ঘোষণার পয়েন্টে জানা যায়, যেখানে এইচএম অনুমিতিকে প্রথমে সম্পূর্ণ প্রোগ্রামটি টাইপ-পরীক্ষা করতে হয়। এটি ত্রুটি বার্তাগুলির মানতেও লক্ষণীয় প্রভাব ফেলে has
- এইচএম এর বিপরীতে গো-এর ধরণের অনুমিতি পদ্ধতির পরিবর্তনশীলের জন্য সর্বদা সুনির্দিষ্ট প্রকারটি নির্বাচন করা হবে যা সর্বাধিক সাধারণ ধরণের বাছাই করে। এটি পরিষ্কারভাবে সাব টাইপিংয়ের সাথে গো এর অন্তর্নিহিত ইন্টারফেসগুলির সাথেও কাজ করে।