এই বিবৃতিটি বুঝতে, আমাদের প্রথমে বুঝতে হবে একটি স্ট্যাটিক টাইপ সিস্টেম আমাদের কী কিনে। সংক্ষেপে, একটি স্ট্যাটিক টাইপ সিস্টেম আমাদের যা দেয় তা একটি গ্যারান্টি: যদি প্রোগ্রামের ধরণটি পরীক্ষা করে নেওয়া হয় তবে রানটাইম আচরণের একটি নির্দিষ্ট শ্রেণি ঘটতে পারে না।
অশুভ লাগছে। ভাল, একটি টাইপ চেকার একটি উপপাদ্য চেকারের অনুরূপ। (আসলে, কারি-হাওয়ার্ড-আইসোমরফিজম অনুসারে, তারা একই জিনিস)) একটি বিষয় যা তাত্ত্বিকতা সম্পর্কে খুব বিস্ময়কর তা হ'ল আপনি যখন কোনও উপপাদ্য প্রমাণ করেন, আপনি ঠিক উপপাদ্যটি যা বলেছিলেন তা প্রমাণ করেন, আর কিছু নয়। (এটি উদাহরণস্বরূপ, কেন, যখন কেউ "আমি এই প্রোগ্রামটি সঠিক প্রমাণিত করেছি" বলছেন, আপনার সর্বদা "দয়া করে 'সঠিক' সংজ্ঞা দিন" "জিজ্ঞাসা করা উচিত)) টাইপ সিস্টেমগুলির ক্ষেত্রেও এটি সত্য। যখন আমরা বলি "একটি প্রোগ্রাম টাইপ-নিরাপদ হয়", আমরা কি মানে না যে কোন সম্ভাব্য ত্রুটিটি ঘটতে পারে। আমরা কেবল এটিই বলতে পারি যে টাইপ সিস্টেম আমাদের প্রতিশ্রুতি দেয় ত্রুটিগুলি ঘটতে পারে না।
সুতরাং, প্রোগ্রামগুলিতে অসীমভাবে অনেকগুলি বিভিন্ন রানটাইম আচরণ থাকতে পারে। এর মধ্যে অসীম অনেকগুলি দরকারী, তবে অসীমভাবে অনেকগুলি "ভুল" ("সঠিকতা" এর বিভিন্ন সংজ্ঞার জন্য)। একটি স্ট্যাটিক টাইপ সিস্টেম আমাদের প্রমাণ করতে দেয় যে একটি নির্দিষ্ট সীমাবদ্ধ, নির্দিষ্ট সীমিত সেট those অসীম অনেকগুলি ভুল রানটাইম আচরণের ঘটতে পারে না।
বিভিন্ন ধরণের সিস্টেমের মধ্যে পার্থক্যটি মূলত যা, কতটি এবং কতগুলি জটিল রানটাইম আচরণ তারা প্রমাণিত করতে পারে না। জাভা এর মতো দুর্বল ধরণের সিস্টেমগুলি কেবলমাত্র খুব প্রাথমিক বিষয় প্রমাণ করতে পারে। উদাহরণস্বরূপ, জাভা প্রমাণ করতে পারে যে যে পদ্ধতিটি টাইপ করা হয় তাকে ফেরত পাঠাতে String
পারে না List
। তবে, উদাহরণস্বরূপ, এটি প্রমাণ করতে পারে না যে পদ্ধতিটি ফিরে আসবে না। এটি প্রমাণও করতে পারে না যে পদ্ধতিটি একটি ব্যতিক্রম ছুঁড়ে ফেলবে না। এবং এটি প্রমাণ করতে পারে না যে এটি ভুল ফিরিয়ে দেবে না String
- যে কোনও String
টাইপ চেকারকে সন্তুষ্ট করবে। (এবং, অবশ্যই, এমনকি null
ভাল হিসাবে এটি সন্তুষ্ট হবে।) এমনকি খুব সহজ বিষয় আছে যা জাভা প্রমাণ করতে হয়, যেই কারণে আমরা যেমন ব্যতিক্রম আছে ArrayStoreException
, ClassCastException
বা সবাই এর প্রিয়, NullPointerException
।
আগদার মতো আরও শক্তিশালী প্রকারের সিস্টেমগুলি "দুটি যুক্তির যোগফল প্রদান করবে" বা "একটি আর্গুমেন্ট হিসাবে তালিকার সাজানো সংস্করণটি ফিরিয়ে দেয়" এর মতো জিনিসগুলিও প্রমাণ করতে পারে।
এখন, কি এলম এর ডিজাইনার বিবৃতি বলতে তারা হয় কোন রানটাইম ব্যতিক্রম আছে এলম ধরন সিস্টেম অন্যান্য ভাষায় করতে পারে অভাবে (একটি উল্লেখযোগ্য অংশ) রানটাইম আচরণে প্রমাণ করিতে পারেন যে না ঘটবে না প্রমাণিত হবে এবং এইভাবে হতে পারে রানটাইমের সময়ে ভ্রান্ত আচরণের (যা সর্বোত্তম ক্ষেত্রে ব্যতিক্রম বোঝায়, আরও খারাপ ক্ষেত্রে ক্র্যাশ বোঝানো হয়, এবং সবচেয়ে খারাপ ক্ষেত্রে কোনও ক্র্যাশ, কোনও ব্যতিক্রম এবং কেবল একটি নিঃশব্দে ভুল ফলাফল)।
সুতরাং, তারা না বলার অপেক্ষা রাখে না "আমরা ব্যতিক্রম বাস্তবায়ন না"। তারা বলছেন "যে বিষয়গুলি সাধারণত ভাষাগুলিতে রানটাইম ব্যতিক্রম হবে যেগুলি এলমের কাছে আসা সাধারণত প্রোগ্রামারদের অভিজ্ঞতা থাকতে পারে, তারা টাইপ সিস্টেমে ধরা পড়ে"। অবশ্যই, ইদ্রিস, আগদা, গুরু, এপিগ্রাম, ইসাবেল / এইচএল, কক বা অনুরূপ ভাষা থেকে আসা কেউ এলমের তুলনায় তুলনামূলকভাবে দুর্বল হিসাবে দেখবেন see বিবৃতিটি সাধারণত জাভা, সি♯, সি ++, অবজেক্টিভ-সি, পিএইচপি, ইসমাস্ক্রিপ্ট, পাইথন, রুবি, পার্ল,… প্রোগ্রামারগুলিকে লক্ষ্য করে।