লিনিয়ার বাউন্ডেড অটোমেটার পক্ষে সি ++ প্রোগ্রাম কিনা তা পরীক্ষা করা সম্ভব নয় এবং এলএমএর পক্ষে এসএমএল প্রোগ্রামগুলি ভাল-টাইপ করা হয়েছে কিনা তা যাচাই করার সম্ভাবনা নেই। সি ++ এর একটি টুরিং-সম্পূর্ণ টাইপ সিস্টেম রয়েছে, যেহেতু আপনি স্বেচ্ছাসেবী প্রোগ্রামগুলিকে টেমপ্লেট রূপক হিসাবে কোড করতে পারেন।
এসএমএল আরও আকর্ষণীয়। এটিতে নির্ধারণযোগ্য প্রকারের চেকিং রয়েছে তবে সমস্যাটি এক্সপটিম-সম্পূর্ণ। অতএব জটিলতার শ্রেণিবিন্যাসে খুব আশ্চর্যজনক পতন না হলে কোনও এলবিএ এটি পরীক্ষা করতে পারে না। এর কারণ হ'ল এসএমএলের জন্য টাইপ অনুমানের প্রয়োজন হয় এবং প্রোগ্রামগুলির পরিবারগুলি রয়েছে যার প্রকারের আকারটি প্রোগ্রামের আকারের চেয়ে অনেক দ্রুত বৃদ্ধি পায়। উদাহরণ হিসাবে, নিম্নলিখিত প্রোগ্রামটি বিবেচনা করুন:
fun delta x = (x, x) (* this has type 'a -> ('a * 'a), so its return value
has a type double the size of its argument *)
fun f1 x = delta (delta x) (* Now we use functions to iterate this process *)
fun f2 x = f1 (f1 x)
fun f3 x = f2 (f2 x) (* This function has a HUGE type *)
সি বা পাসকালের মতো সহজ ধরণের সিস্টেমগুলির জন্য, আমি বিশ্বাস করি যে কোনও এলবিএর দ্বারা এটি পরীক্ষা করা সম্ভব।
প্রোগ্রামিং ভাষার গবেষণার প্রথম দিনগুলিতে, মানুষ কখনও কখনও প্রোগ্রামিং ভাষার জন্য টাইপ সিস্টেমগুলি নির্দিষ্ট করতে ভ্যান উইঙ্গার্ডেন ব্যাকরণ (ওরফে দ্বি-স্তরের ব্যাকরণ) ব্যবহার করত। আমি বিশ্বাস করি আলগোল 68 এভাবে নির্দিষ্ট করা হয়েছিল। যাইহোক, আমাকে বলা হয়েছে যে কৌশলটি মূলত বাস্তববাদী কারণে ছেড়ে দেওয়া হয়েছিল: লোকেরা ব্যাকরণ রচনা করা বেশ কঠিন বলে প্রমাণিত হয়েছিল যেগুলি তারা কী নির্দিষ্ট করে বলে মনে করেছিল! (সাধারণত, ব্যাকরণবিদরা তাদের ইচ্ছার চেয়ে বৃহত্তর ভাষাগুলি লেখেন))
আজকাল লোকেরা টাইপ সিস্টেমগুলি নির্দিষ্ট করতে স্কিমেটিক ইনফারেন্স নিয়ম ব্যবহার করে, যা হর্ন ক্লজগুলির সংগ্রহের নূন্যতম নির্দিষ্ট পয়েন্ট হিসাবে ভবিষ্যদ্বাণীগুলি নির্দিষ্ট করার একটি উপায়। প্রথম অর্ডার হর্ন তত্ত্বগুলির জন্য সন্তুষ্টি সাধারনত অনস্বীকার্য, সুতরাং আপনি যদি টাইপ থিওরিস্টদের দ্বারা করা সমস্ত কিছু ক্যাপচার করতে চান তবে আপনি যে ব্যাকরণগত ফর্মালিজমটি বেছে নেবেন তা সত্যই সুবিধাজনক চেয়ে শক্তিশালী হবে।
আমি জানি টাইপ সিস্টেমগুলি প্রয়োগ করতে অ্যাট্রিবিউট ব্যাকরণ ব্যবহার করার বিষয়ে কিছু কাজ হয়েছে । তারা দাবি করেন যে এই পছন্দটির জন্য কিছু সফ্টওয়্যার ইঞ্জিনিয়ারিং সুবিধা রয়েছে: যথা, ব্যাকরণ নিয়ন্ত্রণের তথ্যের বৈশিষ্ট্যগুলি খুব কঠোরভাবে প্রবাহিত হয় এবং আমাকে বলা হয় যে এটি প্রোগ্রাম বোঝা সহজ করে তোলে।