প্রকার সিস্টেম ত্রুটিগুলি রোধ করে
টাইপ সিস্টেমগুলি অবৈধ প্রোগ্রামগুলি সরিয়ে দেয়। নিম্নলিখিত পাইথন কোডটি বিবেচনা করুন।
a = 'foo'
b = True
c = a / b
পাইথনে, এই প্রোগ্রামটি ব্যর্থ হয়; এটি একটি ব্যতিক্রম নিক্ষেপ। জাভা, সি #, হাস্কেলের মতো ভাষায় , যাই হোক না কেন, এটি কোনও আইনী প্রোগ্রামও নয়। আপনি সম্পূর্ণরূপে এই ত্রুটিগুলি এড়িয়ে যান কারণ ইনপুট প্রোগ্রামগুলির সেটগুলিতে কেবল এটি সম্ভব নয়।
একইভাবে, একটি আরও ভাল টাইপ সিস্টেম আরও ত্রুটিগুলি বিধি নিষেধ করে। যদি আমরা সুপার অ্যাডভান্সড টাইপ সিস্টেমে উঠে যাই তবে আমরা এ জাতীয় জিনিস বলতে পারি:
Definition divide x (y : {x : integer | x /= 0}) = x / y
এখন টাইপ সিস্টেমটি গ্যারান্টি দেয় যে কোনও বিভাজন দ্বারা 0 টি ত্রুটি নেই।
কি ধরণের ত্রুটি
কী ত্রুটি টাইপ সিস্টেমগুলি প্রতিরোধ করতে পারে তার একটি সংক্ষিপ্ত তালিকা এখানে
- সীমার বাইরে ত্রুটি
- এসকিউএল ইনজেকশন
- সাধারণকরণ 2, সুরক্ষার অনেকগুলি সমস্যা ( পার্লের জন্য কী ধরণের চেক করা দরকার )
- অনুক্রমের ত্রুটিগুলি (আরআরকে কল করতে ভুলে যাওয়া)
- মানগুলির একটি উপসেট ব্যবহার করতে বাধ্য করা (উদাহরণস্বরূপ, শুধুমাত্র 0 এর চেয়ে বড় পূর্ণসংখ্যা)
নেফেরিয়াস বিড়ালছানা (হ্যাঁ, এটি একটি রসিকতা ছিল)
- ক্ষতি-নির্ভুলতা ত্রুটি
- সফ্টওয়্যার লেনদেনের মেমরি (এসটিএম) ত্রুটি (এটির জন্য বিশুদ্ধতা প্রয়োজন, যার জন্য প্রকারেরও প্রয়োজন)
- সাধারণকরণ 8, পার্শ্ব প্রতিক্রিয়াগুলি নিয়ন্ত্রণ করে
- ডেটা কাঠামোর উপর আক্রমণকারীরা (একটি বাইনারি গাছ সুষম?)
- একটি ব্যতিক্রম ভুলে যাওয়া বা ভুলটি নিক্ষেপ করা
এবং মনে রাখবেন, এটি সংকলনের সময়ও রয়েছে। টাইপ ত্রুটিগুলি কেবল পরীক্ষা করার জন্য 100% কোড কভারেজ দিয়ে পরীক্ষা লেখার দরকার নেই, সংকলকটি কেবল এটি আপনার জন্য করে :)
কেস স্টাডি: টাইপড ল্যাম্বদা ক্যালকুলাস
ঠিক আছে, আসুন সব ধরণের সিস্টেমের মধ্যে সহজতম পরীক্ষা করা যাক, কেবল টাইপ করা ল্যাম্বদা ক্যালকুলাস ।
মূলত দুটি প্রকার রয়েছে,
Type = Unit | Type -> Type
এবং সমস্ত পদ হয় ভেরিয়েবল, ল্যাম্বডাস বা অ্যাপ্লিকেশন। এর উপর ভিত্তি করে, আমরা প্রমাণ করতে পারি যে কোনও ভাল টাইপ করা প্রোগ্রাম শেষ হয়। এমন কোনও পরিস্থিতি নেই যেখানে প্রোগ্রামটি স্থির হয়ে যায় বা চিরতরে লুপ হয়ে যায়। এটি স্বাভাবিক ল্যাম্বডা ক্যালকুলাসে প্রমাণযোগ্য নয় কারণ ভাল, এটি সত্য নয়।
এ সম্পর্কে চিন্তা করুন, আমরা গ্যারান্টির জন্য টাইপ সিস্টেমগুলি ব্যবহার করতে পারি যে আমাদের প্রোগ্রামটি চিরতরে লুপ করে না, বরং দুর্দান্ত?
গতিশীল প্রকারের মধ্যে দ্বীপ
ডায়নামিক টাইপ সিস্টেমগুলি স্ট্যাটিক টাইপ সিস্টেম হিসাবে অভিন্ন গ্যারান্টি দিতে পারে তবে রানটাইম সময় সংকলনের পরিবর্তে। প্রকৃতপক্ষে, এটি রানটাইম হওয়ার পরে, আপনি আসলে আরও তথ্য সরবরাহ করতে পারেন। আপনি কিছু গ্যারান্টি হারাতে পারেন, বিশেষত সমাপ্তির মতো স্থির সম্পত্তি সম্পর্কে।
তাই ডায়নামিক ধরণের কিছু নির্দিষ্ট প্রোগ্রামকে বাতিল করে দেয় না, বরং ব্যতিক্রম ছোঁড়ার মতো সুনির্দিষ্ট-সংজ্ঞায়িত ক্রিয়ায় ত্রুটিযুক্ত প্রোগ্রামগুলিকে রুট করে।
TLDR
সুতরাং দীর্ঘ এবং এটি সংক্ষিপ্ত, টাইপ সিস্টেমগুলি নির্দিষ্ট প্রোগ্রামকে বাতিল করে দেয়। প্রোগ্রামগুলির অনেকগুলি কোনওভাবে ভেঙে যায়, সুতরাং, টাইপ সিস্টেমের সাহায্যে আমরা এই ভাঙ্গা প্রোগ্রামগুলি এড়িয়ে চলে।