"স্ট্যাটিক টাইপিং" এবং "ডায়নামিক টাইপিং" এর মতো বাক্যাংশগুলি প্রচুর চারপাশে ছুঁড়ে দেওয়া হয় এবং লোকেরা বিভিন্নভাবে বিভিন্ন সংজ্ঞা ব্যবহার করতে থাকে, তাই আসুন আমরা কী বোঝাতে চাই তা স্পষ্ট করে শুরু করি।
সংকলন-সময় পরীক্ষা করা হয় এমন স্থিতিশীল ধরণের একটি ভাষা বিবেচনা করুন। তবে বলুন যে কোনও ধরণের ত্রুটি কেবল একটি অ-মারাত্মক সতর্কতা জেনারেট করে এবং রানটাইমের সময় সমস্ত কিছুই হাঁসের টাইপযুক্ত। এই স্থিতিশীল প্রকারগুলি কেবল প্রোগ্রামারের সুবিধার জন্য এবং কোডজেনকে প্রভাবিত করে না। এটি চিত্রিত করে যে স্থির টাইপিং নিজে থেকে কোনও সীমাবদ্ধতা চাপায় না এবং গতিশীল টাইপিংয়ের সাথে পারস্পরিক একচেটিয়া নয়। (উদ্দেশ্য-সি অনেকটা এরকম this)
তবে বেশিরভাগ স্ট্যাটিক টাইপ সিস্টেমগুলি এ জাতীয় আচরণ করে না। স্ট্যাটিক টাইপ সিস্টেমের দুটি সাধারণ বৈশিষ্ট্য যা সীমাবদ্ধতা আরোপ করতে পারে:
সংকলক একটি স্ট্যাটিক ধরণের ত্রুটিযুক্ত এমন একটি প্রোগ্রাম প্রত্যাখ্যান করতে পারে।
এটি একটি সীমাবদ্ধতা কারণ অনেক ধরণের নিরাপদ প্রোগ্রামে অগত্যা একটি স্ট্যাটিক ধরণের ত্রুটি থাকে।
উদাহরণস্বরূপ, আমার কাছে পাইথন স্ক্রিপ্ট রয়েছে যা পাইথন 2 এবং পাইথন 3 উভয় হিসাবে চালানো দরকার Some কিছু ফাংশন পাইথন 2 এবং 3 এর মধ্যে তাদের প্যারামিটারের ধরনগুলি পরিবর্তন করেছে, সুতরাং আমার কাছে কোড রয়েছে:
if sys.version_info[0] == 2:
wfile.write(txt)
else:
wfile.write(bytes(txt, 'utf-8'))
পাইথন 2 স্ট্যাটিক টাইপ পরীক্ষক পাইথন 3 কোড (এবং বিপরীতে) প্রত্যাখ্যান করবে, যদিও এটি কখনও কার্যকর হয় না। আমার টাইপ নিরাপদ প্রোগ্রামে একটি স্ট্যাটিক টাইপ ত্রুটি রয়েছে।
অন্য উদাহরণ হিসাবে, একটি ম্যাক প্রোগ্রাম বিবেচনা করুন যা ওএস এক্স 10.6 এ চালাতে চায় তবে 10.7-এ নতুন বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করুন। 10.7 টি পদ্ধতি রানটাইমের সময় উপস্থিত থাকতে পারে এবং নাও থাকতে পারে এবং সেগুলি সনাক্ত করার জন্য এটি প্রোগ্রামার আমার উপর। স্ট্যাটিক টাইপ চেকারটি হয় টাইপ সুরক্ষা নিশ্চিত করতে আমার প্রোগ্রামটি প্রত্যাখ্যান করতে বাধ্য হয়, বা রানটাইম সময়ে টাইপ ত্রুটি (ফাংশন অনুপস্থিত) উত্পাদন করার সম্ভাবনা সহ প্রোগ্রামটি গ্রহণ করে।
স্ট্যাটিক টাইপ পরীক্ষা করে ধরে নেওয়া হয় যে রানটাইম পরিবেশটি কমপাইল সময় তথ্য দ্বারা যথাযথভাবে বর্ণিত। তবে ভবিষ্যতের ভবিষ্যদ্বাণী করা বিপদজনক!
এখানে আরও একটি সীমাবদ্ধতা রয়েছে:
সংকলকটি এমন কোড তৈরি করতে পারে যা ধরে নেয় যে রানটাইম টাইপটি স্ট্যাটিক প্রকার।
স্থিতিশীল ধরণগুলি "সঠিক" ধরে নেওয়া অপ্টিমাইজেশনের জন্য অনেকগুলি সুযোগ সরবরাহ করে তবে এই অপটিমাইজেশনগুলি সীমাবদ্ধ হতে পারে। একটি ভাল উদাহরণ প্রক্সি অবজেক্টস, যেমন দূরবর্তী। বলুন যে আপনি একটি স্থানীয় প্রক্সি অবজেক্ট রাখতে চান যা অন্য প্রক্রিয়াতে কোনও পদ্ধতিতে প্রকৃত অবজেক্টে ফরোয়ার্ড করে। প্রক্সিটি জেনেরিক হলে (তাই এটি যে কোনও বস্তু হিসাবে মুখোমুখি হতে পারে) এবং স্বচ্ছ (যদি বিদ্যমান কোডটি এটি প্রক্সিটির সাথে কথা বলছে তা জানতে প্রয়োজন হয় না) হলে এটি দুর্দান্ত হবে। তবে এটি করার জন্য, সংকলকটি এমন কোড তৈরি করতে পারে না যা ধরে নেয় যে স্থির প্রকারগুলি সঠিক, উদাহরণস্বরূপ স্ট্যাটিটিক্যাল ইনলাইনিং পদ্ধতি কলগুলির মাধ্যমে, কারণ এটি ব্যর্থ হবে যদি বস্তুটি প্রক্সি হয়।
ক্রিয়াকলাপে এ জাতীয় রিমোটিংয়ের উদাহরণগুলির মধ্যে রয়েছে ওবিজির এনএসএক্সপিসিসিঙ্কেশন বা সি # এর স্বচ্ছ প্রক্সি (যার বাস্তবায়নের জন্য রানটাইমটিতে কয়েকটি হতাশার প্রয়োজন - একটি আলোচনার জন্য এখানে দেখুন )।
যখন কোডজেন স্থির ধরণের উপর নির্ভরশীল না থাকে এবং আপনার বার্তা ফরোয়ার্ড করার মতো সুবিধা থাকে আপনি প্রক্সি অবজেক্টস, ডিবাগিং ইত্যাদির সাহায্যে প্রচুর শীতল জিনিসগুলি করতে পারেন do
সুতরাং এটি কোনও ধরণের পরীক্ষককে সন্তুষ্ট করার প্রয়োজন না হলে আপনি করতে পারেন এমন কিছু উপাদানের নমুনা। সীমাবদ্ধতা স্থিতিশীল ধরণের দ্বারা আরোপিত হয় না, তবে কার্যকর স্ট্যাটিক ধরণের চেকিং দ্বারা।