Strong and weak typing
কম্পিউটার প্রোগ্রামিং-এ, প্রোগ্রামিং ভাষাগুলিকে কথ্য ভাষায় শ্রেণীবদ্ধ করার অনেক উপায়ের মধ্যে একটি হল ভাষার টাইপ সিস্টেম এটিকে দৃঢ়ভাবে টাইপ করা বা দুর্বলভাবে টাইপ করা (আলগাভাবে টাইপ করা) করে। যাইহোক, পদগুলির অর্থ কী তার কোনও সুনির্দিষ্ট প্রযুক্তিগত সংজ্ঞা নেই এবং বিভিন্ন লেখক পদগুলির অন্তর্নিহিত অর্থ এবং মূলধারার প্রোগ্রামিং ভাষাগুলির টাইপ সিস্টেমের "শক্তি"-র আপেক্ষিক র্যাঙ্কিং সম্পর্কে একমত নন। এই কারণে, যে লেখকরা টাইপ সিস্টেম সম্পর্কে দ্ব্যর্থহীনভাবে লিখতে চান তারা প্রায়শই "টাইপ সেফটি"-এর মতো নির্দিষ্ট অভিব্যক্তির পক্ষে "স্ট্রং টাইপিং" এবং "দুর্বল টাইপিং" শব্দগুলি এড়িয়ে চলেন। সাধারণত, একটি দৃঢ়ভাবে টাইপ করা ভাষায় সংকলনের সময় আরও কঠোর টাইপিং নিয়ম থাকে, যা বোঝায় যে সংকলনের সময় ত্রুটি এবং ব্যতিক্রম হওয়ার সম্ভাবনা বেশি। এই নিয়মগুলির বেশিরভাগই পরিবর্তনশীল অ্যাসাইনমেন্ট, ফাংশন রিটার্ন মান, পদ্ধতি আর্গুমেন্ট এবং ফাংশন কলিংকে প্রভাবিত করে। গতিশীলভাবে টাইপ করা ভাষাগুলিও (যেখানে টাইপ চেকিং রান টাইমে হয়) দৃঢ়ভাবে টাইপ করা যেতে পারে। গতিশীলভাবে টাইপ করা ভাষাগুলিতে, ভেরিয়েবলের পরিবর্তে মানগুলির প্রকার রয়েছে। একটি দুর্বল টাইপ করা ভাষার টাইপিং নিয়মগুলি শিথিল এবং অপ্রত্যাশিত বা এমনকি ভুল ফলাফল তৈরি করতে পারে বা রানটাইমে অন্তর্নিহিত টাইপ রূপান্তর করতে পারে। গতিশীলভাবে টাইপ করা (সাধারণত "দুর্বলভাবে টাইপ করা") ভাষাগুলির প্রবক্তারা এই ধরনের উদ্বেগকে অতিরঞ্জিত বলে মনে করেন এবং বিশ্বাস করেন যে স্ট্যাটিক টাইপিং আসলে একটি তাত্পর্যপূর্ণভাবে বৃহত্তর সমস্যা এবং অদক্ষতার প্রবর্তন করে। একটি ভিন্ন কিন্তু সম্পর্কিত ধারণা হল সুপ্ত টাইপিং। 1974 সালে, বি. লিসকভ এবং এস. জিলিস একটি দৃঢ়ভাবে টাইপ করা ভাষাকে সংজ্ঞায়িত করেছিলেন যেখানে "যখনই কোনও বস্তু একটি কলিং ফাংশন থেকে একটি কলড ফাংশনে পাস করা হয়, তখন তার ধরণ অবশ্যই কলড ফাংশনে ঘোষিত প্রকারের সাথে সামঞ্জস্যপূর্ণ হতে হবে"। 1977 সালে, কে. জ্যাকসন লিখেছিলেন, "দৃঢ়ভাবে টাইপ করা ভাষায় প্রতিটি তথ্য ক্ষেত্রের একটি স্বতন্ত্র প্রকার থাকবে এবং প্রতিটি প্রক্রিয়া এই ধরনের পরিপ্রেক্ষিতে তার যোগাযোগের প্রয়োজনীয়তা উল্লেখ করবে।" "শক্তিশালী" বা "দুর্বল"-এর সংজ্ঞা বিভিন্ন ভাষার নকশার সিদ্ধান্তকে "শক্তিশালী" বা "দুর্বল" টাইপিংয়ের প্রমাণ হিসাবে উল্লেখ করা হয়েছে। এর মধ্যে অনেকগুলিই টাইপ সুরক্ষার উপস্থিতি বা অনুপস্থিতি, মেমরি সুরক্ষা, স্ট্যাটিক টাইপ-চেকিং বা ডায়নামিক টাইপ-চেকিং হিসাবে আরও সঠিকভাবে বোঝা যায়। "স্ট্রং টাইপিং" সাধারণত প্রোগ্রামিং ভাষার প্রকারের ব্যবহারকে বোঝায় যাতে কোডের অপরিবর্তনীয় বিষয়গুলি ধরা যায় এবং এর সঠিকতা নিশ্চিত করা যায় এবং নির্দিষ্ট শ্রেণীর প্রোগ্রামিং ত্রুটিগুলি অবশ্যই বাদ দেওয়া যায়। এইভাবে এই লক্ষ্যগুলি অর্জনের জন্য অনেক "শক্তিশালী টাইপিং" শাখা ব্যবহার করা হয়। অন্তর্নিহিত ধরনের রূপান্তর এবং "টাইপ পানিং" কিছু প্রোগ্রামিং ভাষা এক ধরনের মান ব্যবহার করা সহজ করে তোলে যেন এটি অন্য ধরনের মান। এটিকে কখনও কখনও "দুর্বল টাইপিং" হিসাবে বর্ণনা করা হয়। উদাহরণস্বরূপ, আহজ মারুচ পর্যবেক্ষণ করেছেন যে "বলপ্রয়োগ তখন ঘটে যখন আপনার একটি স্থিতিশীলভাবে টাইপ করা ভাষা থাকে এবং আপনি একটি প্রকারের ব্যবহারকে বাধ্য করার জন্য ভাষার বাক্য গঠনমূলক বৈশিষ্ট্যগুলি ব্যবহার করেন যেন এটি একটি ভিন্ন প্রকার (সি-তে অকার্যকর *-এর সাধারণ ব্যবহার বিবেচনা করুন)। বলপ্রয়োগ সাধারণত দুর্বল টাইপিংয়ের একটি লক্ষণ। অন্যদিকে, রূপান্তর সঠিক ধরনের একটি একেবারে নতুন বস্তু তৈরি করে। আরেকটি উদাহরণ হিসাবে, জিসিসি এটিকে টাইপ-প্যানিং হিসাবে বর্ণনা করে এবং সতর্ক করে যে এটি কঠোর আলিয়াজিং ভেঙে দেবে। থিয়াগো ম্যাকিইরা বেশ কয়েকটি সমস্যা নিয়ে আলোচনা করেছেন যা তখন উদ্ভূত হতে পারে যখন টাইপ-প্যানিং সংকলককে অনুপযুক্ত অপ্টিমাইজেশন করতে বাধ্য করে। এমন অনেক ভাষার উদাহরণ রয়েছে যা অন্তর্নিহিত ধরনের রূপান্তরের অনুমতি দেয়, তবে একটি টাইপ-নিরাপদ পদ্ধতিতে। উদাহরণস্বরূপ, সি + + এবং সি #উভয়ই প্রোগ্রামগুলিকে সুনির্দিষ্ট শব্দার্থবিজ্ঞানের মাধ্যমে একটি মানকে এক প্রকার থেকে অন্য প্রকারে রূপান্তর করার জন্য অপারেটরদের সংজ্ঞায়িত করার অনুমতি দেয়। যখন একটি সি + + সংকলক এই ধরনের রূপান্তরের মুখোমুখি হয়, তখন এটি অপারেশনটিকে ফাংশন কলের মতো আচরণ করে। এর বিপরীতে, একটি মানকে সি প্রকারে রূপান্তর করা একটি অনিরাপদ ক্রিয়াকলাপ যা সংকলকের কাছে অদৃশ্য। পয়েন্টার কিছু প্রোগ্রামিং ভাষা পয়েন্টারগুলিকে সংখ্যাসূচক মান হিসাবে প্রকাশ করে এবং ব্যবহারকারীদের তাদের উপর গাণিতিক সঞ্চালন করার অনুমতি দেয়। এই ভাষাগুলিকে কখনও কখনও "দুর্বলভাবে টাইপ করা" হিসাবে উল্লেখ করা হয়, কারণ ভাষার টাইপ সিস্টেমকে বাইপাস করতে পয়েন্টার পাটিগণিত ব্যবহার করা যেতে পারে। ট্যাগবিহীন ইউনিয়ন কিছু প্রোগ্রামিং ভাষা ট্যাগবিহীন ইউনিয়নগুলিকে সমর্থন করে, যা এক ধরনের মানকে অন্য ধরনের মান হিসাবে দেখার অনুমতি দেয়। স্ট্যাটিক টাইপ-চেকিং লুকা কার্ডেলির নিবন্ধ টাইপফুল প্রোগ্রামিং-এ, একটি "শক্তিশালী টাইপ সিস্টেম" এমন একটি হিসাবে বর্ণনা করা হয়েছে যেখানে অনিয়ন্ত্রিত রানটাইম টাইপ ত্রুটির কোনও সম্ভাবনা নেই। অন্য লেখায়, অনিয়ন্ত্রিত রান-টাইম ত্রুটির অনুপস্থিতিকে নিরাপত্তা বা প্রকার নিরাপত্তা হিসাবে উল্লেখ করা হয়; টনি হোয়ারের প্রাথমিক গবেষণাপত্রগুলি এই সম্পত্তি নিরাপত্তাকে বলে। প্রোগ্রামিং ভাষাগুলির মধ্যে বৈচিত্র্য এই সংজ্ঞাগুলির মধ্যে কিছু পরস্পরবিরোধী, অন্যগুলি নিছক ধারণাগতভাবে স্বাধীন, এবং এখনও অন্যগুলি অন্যান্য, আরও "উদার" (কম শক্তিশালী) সংজ্ঞাগুলির বিশেষ ক্ষেত্রে (অতিরিক্ত সীমাবদ্ধতা সহ)। এই সংজ্ঞাগুলির মধ্যে ব্যাপক বৈচিত্র্যের কারণে, বেশিরভাগ প্রোগ্রামিং ভাষা সম্পর্কে দাবি করা সম্ভব যে সেগুলি হয় দৃঢ়ভাবে বা দুর্বলভাবে টাইপ করা হয়েছে। উদাহরণস্বরূপঃ জাভা, পাস্কাল, অ্যাডা এবং সি-এর জন্য একটি ঘোষিত প্রকারের ভেরিয়েবলের প্রয়োজন হয় এবং অন্যান্য গাণিতিক প্রকারের জন্য গাণিতিক মানের স্পষ্ট কাস্টের ব্যবহারকে সমর্থন করে। জাভা, সি #, অ্যাডা এবং পাস্কালকে কখনও কখনও সি-এর চেয়ে বেশি জোরালোভাবে টাইপ করা হয়, এমন একটি দাবি যা সম্ভবত সি আরও বেশি ধরণের অন্তর্নিহিত রূপান্তরকে সমর্থন করে এবং পয়েন্টারের মানগুলিকে স্পষ্টভাবে কাস্ট করার অনুমতি দেয় যখন জাভা এবং পাস্কাল তা করে না। জাভাকে পাস্কেলের চেয়ে আরও দৃঢ়ভাবে টাইপ করা হিসাবে বিবেচনা করা যেতে পারে কারণ জাভাতে স্ট্যাটিক টাইপ সিস্টেম এড়ানোর পদ্ধতিগুলি জাভা ভার্চুয়াল মেশিনের টাইপ সিস্টেম দ্বারা নিয়ন্ত্রিত হয়। সি #এবং VB.NET এই ক্ষেত্রে জাভার অনুরূপ, যদিও তারা স্পষ্টভাবে কোড বিভাগগুলিকে একটি "অনিরাপদ প্রসঙ্গে" রেখে গতিশীল টাইপ চেকিং নিষ্ক্রিয় করার অনুমতি দেয়। প্যাসকেলের টাইপ সিস্টেমকে "খুব শক্তিশালী" হিসাবে বর্ণনা করা হয়েছে, কারণ একটি অ্যারে বা স্ট্রিংয়ের আকার তার ধরণের অংশ, যা কিছু প্রোগ্রামিং কাজকে খুব কঠিন করে তোলে। তবে, ডেলফি এই সমস্যার সমাধান করে। স্মলটক, রুবি, পাইথন এবং সেলফ এই অর্থে "দৃঢ়ভাবে টাইপ করা" হয় যে টাইপিং ত্রুটিগুলি রানটাইমে প্রতিরোধ করা হয় এবং তারা সামান্য অন্তর্নিহিত টাইপ রূপান্তর করে, তবে এই ভাষাগুলি স্ট্যাটিক টাইপ চেকিংয়ের কোনও ব্যবহার করে নাঃ সংকলক টাইপ সীমাবদ্ধতার নিয়মগুলি পরীক্ষা বা প্রয়োগ করে না। হাঁস টাইপিং শব্দটি এখন এই গোষ্ঠীর ভাষাগুলির দ্বারা ব্যবহৃত গতিশীল টাইপিং দৃষ্টান্ত বর্ণনা করতে ব্যবহৃত হয়। লিস্প পরিবারের ভাষাগুলির সবগুলিই "দৃঢ়ভাবে টাইপ করা" এই অর্থে যে রানটাইমে টাইপিং ত্রুটি প্রতিরোধ করা হয়। কমন লিস্প বা ক্লোজুরের মতো কিছু লিস্প উপভাষা বিভিন্ন ধরনের ঘোষণাকে সমর্থন করে এবং কিছু সংকলক (সি. এম. ইউ কমন লিস্প (সি. এম. ইউ. সি. এল) এবং সম্পর্কিত) বিভিন্ন অপ্টিমাইজেশান এবং সংকলন সময় প্রকারের চেকের সীমিত রূপগুলি সক্ষম করতে টাইপ অনুমানের সাথে এই ঘোষণাগুলি একসাথে ব্যবহার করে। স্ট্যান্ডার্ড এমএল, এফ #, ওসিএএমএল, হাস্কেল, গো এবং রাস্ট স্ট্যাটিকভাবে টাইপ-চেক করা হয়, তবে সংকলক স্বয়ংক্রিয়ভাবে বেশিরভাগ মানের জন্য একটি সুনির্দিষ্ট প্রকার নির্ধারণ করে। অ্যাসেম্বলি ভাষা এবং ফোর্থকে টাইপ না করা হিসাবে চিহ্নিত করা যেতে পারে। কোনও টাইপ চেকিং নেই; ফাংশনগুলিতে দেওয়া ডেটা উপযুক্ত ধরণের কিনা তা নিশ্চিত করা প্রোগ্রামারের উপর নির্ভর করে। যে কোনও ধরনের রূপান্তরের প্রয়োজন স্পষ্ট। আরও দেখুন প্রোগ্রামিং ভাষাগুলির তুলনা ডেটা প্রকারের মধ্যে টাইপিং সমস্যাগুলির আরও পুঙ্খানুপুঙ্খ আলোচনা অন্তর্ভুক্ত রয়েছে চুক্তি দ্বারা নকশা (অন্তর্নিহিত চুক্তি ফর্ম হিসাবে শক্তিশালী টাইপিং) সুপ্ত টাইপিং মেমরি সুরক্ষা প্রকার সুরক্ষা প্রকার সিস্টেম দৃঢ়-টাইপ সনাক্তকারী রেফারেন্স টাইপ সিস্টেম