স্ট্যাটিক টাইপ-চেকিং খুব রক্ষণশীল হওয়ার একটি অ-স্বীকৃত উদাহরণ কী?


9

ইন প্রোগ্রামিং ভাষাতে ধারণা , জন মিচেল লিখেছেন যে স্ট্যাটিক টাইপ পরীক্ষণ অগত্যা স্থগিত সমস্যা হওয়ার কারণে রক্ষণশীল (মাত্রাতিরিক্ত কঠোর) হয়। তিনি একটি উদাহরণ হিসাবে দেন:

if (complicated-expression-that-could-run-forever)
   then (expression-with-type-error)
   else (expression-with-type-error)

কেউ কি এমন একটি অ-স্বাক্ষরিত উত্তর সরবরাহ করতে পারেন যা সত্যই ব্যবহারিক উদ্বেগ হতে পারে?

আমি বুঝতে পারি যে জাভা এই জাতীয় মামলার জন্য গতিশীল-পরীক্ষিত কাস্টগুলিকে মঞ্জুরি দেয়:

if (foo instanceof Person) {
    Person p = (Person) foo;
    :
}

তবে আমি ক্রস-ল্যাঙ্গুয়েজ ইস্যুটির চেয়ে জাভা ভাষার / সংকলকের ঘাটতির প্রয়োজনীয়তা বিবেচনা করি।


2
আপনি যে জাভা উদাহরণটি দিয়েছেন সেটি হ'ল স্থিতিশীল টাইপ-চেকিং খুব রক্ষণশীল হওয়ার একটি অ-অনুমোদিত example অন্য একটি উপায় রাখুন: উত্তরটি আপনার কোন ধরণের সিস্টেমের কথা মনে আছে তার উপর নির্ভর করে। যে উদাহরণটি আমরা সামনে আসি, সেখানে সর্বদা একটি টাইপ সিস্টেম থাকবে যা সেই উদাহরণটিকে পরিচালনা করতে পারে (টাইপ সিস্টেমটি উদাহরণটিতে খুব বেশি রক্ষণশীল নয়)। যে কোনও ধরণের সিস্টেমের জন্য, আমরা সর্বদা একটি উদাহরণ খুঁজে পাই যেখানে এটি খুব রক্ষণশীল। সুতরাং, আমি আপনাকে টাইপ সিস্টেম নির্দিষ্ট করা প্রয়োজন বলে মনে করি। জাভা টাইপ সিস্টেম যদি আপনার মনে মনে না থাকে তবে আপনি আরও কিছু নির্দিষ্ট বলে মনে করছেন? এমএল-স্টাইল টাইপ অনুমান?
ডিডাব্লু

কারও যুক্তি হতে পারে যে উদাহরণটি হ'ল "রক্ষণশীল" হওয়ায় স্থির কোড বিশ্লেষণগুলির মধ্যে একটি , NEC ধরণের চেকিং নয়। এটি "রক্ষণশীল" সংজ্ঞায়িত করতে সহায়ক হবে । যুক্তিযুক্তভাবে সমস্ত স্ট্যাটিক টাইপ সিস্টেমগুলি গতিশীল সিস্টেমের তুলনায় "রক্ষণশীল" হবে কারণ সংজ্ঞা অনুসারে সংকলনকালে পূর্ববর্তীগুলি আরও কঠোর ছিল । তবে যে কেউ তর্ক করতে পারে রানটাইমের সময় আরও কঠোর নয় কারণ গতিশীল চেকিং একই ধরণের (টাইপ-ভিত্তিক) ত্রুটিও ফিরে আসতে পারে। এবং যাইহোক, ভাষাগুলিতে রানটাইম ডায়নামিক চেক করা কাস্টগুলি কোনও ঘাটতি নয় , এগুলি সম্ভবত বেশিরভাগ স্থিতিযুক্ত চেক করা ভাষায়, সম্ভবত সম্ভাব্য এনেক ec
vzn

উত্তর:


7

অ্যালগরিদম আদৌ প্রকাশ করা যায় না বা না তার চেয়ে আমি সবসময় এটিকে সুবিধার বিষয় হিসাবে দেখেছি। আমি যদি সত্যি মিচেলের কনট্রিভড প্রোগ্রামের মতো প্রোগ্রামগুলি চালাতে চাইতাম তবে আমি কেবল আমার স্ট্যাটিচ্যালি টাইপ করা ভাষায় যথাযথ টুরিং মেশিন সিমুলেটরটি লিখতাম।

একটি স্ট্যাটিক টাইপ সিস্টেমের কৌশলটি হ'ল ক্ষেত্রে যে ক্ষেত্রে নমনীয়তা আপনাকে আরও সহজেই রক্ষণাবেক্ষণযোগ্য কোড লিখতে দেয় সেই ক্ষেত্রে উপযুক্ত ধরণের নমনীয়তা সরবরাহ করা।

প্রোগ্রাম কাঠামোগত কৌশলগুলির কয়েকটি উদাহরণ এখানে রয়েছে যা কখনও কখনও স্থিতিযুক্ত ভাষার চেয়ে গতিময়ভাবে পরিচালনা করা সহজ বলে মনে করা হয়।

জেনারিক্স এবং ধারক

এমএল (সি। 1973) এবং সিএলইউর (সি। 1974) এর আগে স্ট্যাটিকভাবে টাইপ করা ভাষাগুলিতে স্ট্রিংগুলির একটি লাল-কালো গাছ, পূর্ণসংখ্যার একটি লাল-কালো গাছ, ভাসমানের একটি লাল-কালো গাছ তৈরি করা কঠিন ছিল না a নির্দিষ্ট ধরণের উপাদানগুলির লাল-কালো গাছ Foo। তবে, লাল-কালো গাছের একক বাস্তবায়ন তৈরি করা কঠিন (সম্ভবত অসম্ভব) ছিল যা উভয়ই স্থিরভাবে পরীক্ষা করা হয়েছিল এবং যা এইগুলির মধ্যে যে কোনও একটি ডেটা পরিচালনা করতে পারে। সমস্যার আশেপাশের উপায়গুলি হ'ল (১) টাইপ সিস্টেমটি সম্পূর্ণভাবে বিচ্ছিন্ন করা (উদাহরণস্বরূপ: ব্যবহার করে byvoid * সি), (২) নিজেকে কোনও ধরণের ম্যাক্রো প্রিপ্রোসেসর লিখুন এবং তারপরে ম্যাক্রোগুলি লিখুন যা আপনার প্রয়োজনীয় প্রতিটি নির্দিষ্ট ধরণের কোড তৈরি করে বা (3) ল্যাস্প / স্মলটালক (এবং জাভা) এক্সট্র্যাক্টের ধরণটি পরীক্ষা করার পদ্ধতি ব্যবহার করুন গতিশীলভাবে বস্তু।

এমএল এবং সিএলইউ যথাক্রমে অনুমিত এবং স্পষ্টভাবে ঘোষিত (স্থিতিশীল) প্যারামিটারাইজড ধরণের ধারণার প্রবর্তন করে, যা আপনাকে জেনেরিক, স্ট্যাটিকালি টাইপড, ধারক প্রকারের লেখার অনুমতি দেয়।

সাব টাইপ পলিমারফিজম

সিমুলা (c (সি। ১৯6767 ) এবং হোপের (সি। 1977) এর আগে স্ট্যাটিকভাবে টাইপ করা ভাষাগুলিতে গতিশীল প্রেরণ এবং স্ট্যাটিকভাবে উভয়ই সম্ভব ছিল না যে আপনি প্রতিটি উপ- টাইপের ক্ষেত্রে কেসটি কভার করেছেন। অনেক ভাষায় কিছু ট্যাগযুক্ত ইউনিয়ন ছিল , তবে তাদের caseবা switchবিবৃতি, বা তাদের জাম্প টেবিলগুলি, প্রতিটি সম্ভাব্য ট্যাগটি coveredেকে রেখেছিল তা নিশ্চিত করা প্রোগ্রামারের দায়িত্ব ছিল was

সিমুলা মডেলের নিম্নলিখিত ভাষা (সি ++, জাভা, সি #, আইফেল) সাবক্লাসিং সহ বিমূর্ত ক্লাস সরবরাহ করে যেখানে সংকলকটি পরীক্ষা করতে পারে যে প্রতিটি সাবক্লাস প্যারেন্ট ক্লাস দ্বারা ঘোষিত সমস্ত পদ্ধতি কার্যকর করেছে। হপ মডেল অনুসরণকারী ভাষাগুলির (এসএমএল / এনজে থেকে হাস্কেলের মাধ্যমে সমস্ত এমএল রূপগুলি) বীজগণিত উপ-টাইপ রয়েছে যেখানে সংকলকটি পরীক্ষা করতে পারে যে প্রতিটি typecaseবিবৃতিতে সমস্ত উপ-প্রকার অন্তর্ভুক্ত রয়েছে।

বানর প্যাচিং এবং অ্যাস্পেক্ট ওরিয়েন্টেড প্রোগ্রামিং

ডায়নামিক টাইপ সিস্টেমগুলি বিভিন্ন প্রোটোটাইপিং কৌশলগুলি আরও সহজ করে তোলে। যে ভাষাগুলিতে স্ট্রিং থেকে ফাংশনগুলিতে হ্যাশ ম্যাপ দ্বারা প্রকারের প্রতিনিধিত্ব করা হয় (উদাহরণস্বরূপ, পাইথন, জাভাস্ক্রিপ্ট, রুবি) প্রতিটি মডিউলের যে কোনও নির্দিষ্ট ধরণের উপর নির্ভর করে তার আচরণটি বিশ্বব্যাপী পরিবর্তন করা বেশ সহজ, কেবল হ্যাশ ম্যাপকে প্রতিনিধিত্ব করে প্রতিনিধিত্ব করে টাইপ করুন।

যদিও বানর প্যাচিংকে প্রোগ্রামগুলি বজায় রাখা শক্ততর করার পক্ষে স্পষ্ট উপায় রয়েছে তবে এমন কিছু উপায় রয়েছে যাতে এটি "মন্দ" না হয়ে "ভাল" জন্য ব্যবহার করা যেতে পারে। বিশেষত দিক ভিত্তিক প্রোগ্রামিংয়ের মাধ্যমে কেউ ভার্চুয়ালাইজড ফাইল সিস্টেমে নির্দেশ করতে ফাইল টাইপ পরিবর্তন করে "ফ্রি" এর জন্য ইউনিট-পরীক্ষামূলক অবকাঠামোগত নির্মাণের অনুমতি দিতে বা সাধারণ ব্যতিক্রম প্রকারের সংশোধন করার মতো কৌশলগুলি ব্যবহার করতে পারে one প্রতিবার লগ বার্তা প্রিন্ট করুন যখন তারা আরও ভাল ডিবাগিবিলিটির জন্য ধরা পড়ে।

জেনারিক্স এবং সাব টাইপ পলিমারফিজমের বিপরীতে যেখানে মূল স্ট্যাটিক চেকিং আইডিয়াগুলি ১৯ 1970০ এর দশকে পাওয়া গেল, দিক ওরিয়েন্টেড প্রোগ্রামিংয়ের স্থির চেকিং (আমার মনে হয়) একটি সক্রিয় গবেষণা ক্ষেত্র। 2001 সাল থেকে AspectJ নামে একটি ভাষা আছে তা ছাড়া আমি এ সম্পর্কে খুব বেশি কিছু জানি না ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.