ছেদ ও ইউনিয়নের ধরণের ব্যবহারিক সমস্যাগুলি কী কী?


22

আমি একটি সাধারণ স্ট্যাটিকালি টাইপড ফাংশনাল প্রোগ্রামিং ভাষা শেখার অভিজ্ঞতা হিসাবে ডিজাইন করছি।

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

  • <Union String Integer>
  • <Union Integer Foo>
  • উপরের দুটি ধরণের ছেদটি একটি সমতল হবে Integer
  • দুই প্রকারের মিলন হবে <Union String Integer Foo>

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

টাইপ সিস্টেমে এই জাতীয় বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করার পক্ষে কি কি?

উত্তর:


26

এখানে কিছু বিষয় মনে রাখতে হবে:

  • যদিও আমরা সাধারণত মনে করি আমরা সেট-তাত্ত্বিক চৌরাস্তা এবং ইউনিয়ন দ্বারা আমরা কী বোঝি তা আমরা জানি তবে সঠিকভাবে ছেদ এবং ইউনিয়নের ধরণগুলি কী বিভিন্ন তা বিভিন্ন ক্ষেত্রে দেখা গেছে । সুতরাং, আপনি কোনও বাস্তবায়ন শুরু করার আগে এটি পিন করে ফেলার উপযুক্ত।
  • ছেদগুলি এবং ইউনিয়নগুলি বোঝার জন্য যে উপাদানটি আমি ভীষণ গুরুত্বপূর্ণ বলে মনে করি তা হ'ল টাইপ শোধনাগার ধারণা , মূলত এই ধারণাটি যে কোনও প্রোগ্রামের একটি নির্দিষ্ট অন্তর্নিহিত "আরকি টাইপ " থাকে (যেমন, " foo একটি পূর্ণসংখ্যা থেকে পূর্ণসংখ্যার কাজ"), যা করতে পারে তারপরে আরও সুনির্দিষ্ট বৈশিষ্ট্যগুলি প্রকাশ করার জন্য পরিমার্জন করা হবে (উদাঃ, " foo এমনকি পূর্ণসংখ্যার এমনকি বিজোড় পূর্ণসংখ্যাকে বিজোড় পূর্ণসংখ্যার সাথেও নেয়")। হাতে পরিশোধিতকরণের ধারণার সাথে, মূল সম্পত্তি যা ছেদ এবং ইউনিয়নগুলিকে পণ্য এবং অঙ্কগুলির থেকে পৃথক করে, তা হ'ল দুটি ধরণের ছেদ / ইউনিয়ন কেবল তখনই তৈরি করা যায় যখন তারা একই প্রত্নতত্বকে পরিমার্জন করবে। অন্য কথায়, চৌরাস্তা এবং ইউনিয়নগুলির জন্য টাইপ গঠনের নিয়মগুলি এভাবে প্রকাশ করা যেতে পারে (পড়ুন "SASA
    SATASTASATASTA
    SATBSTABSATBS+TA+B
  • যেহেতু চৌরাস্তা এবং ইউনিয়নগুলি কোনও প্রোগ্রামের রান-টাইম আচরণ সম্পর্কে আরও সুনির্দিষ্ট ধারণা তৈরি করতে ব্যবহার করা যায়, তাই টাইপিং মূল্যায়নের ক্রমের সংবেদনশীল হয়ে ওঠে এটি স্বাভাবিক। উদাহরণস্বরূপ, নীচে কাগজপত্র (2) এবং (4) ব্যাখ্যা করেছে যে কেন "স্পষ্ট" (এবং মোটামুটি স্ট্যান্ডার্ড) ছেদ এবং ইউনিয়নগুলির জন্য টাইপিং এবং সাব-টাইপিং বিধিগুলি এমএল-জাতীয় ভাষার জন্য প্রকৃতভাবে বাউন্ডারি নয় (পার্শ্ব প্রতিক্রিয়াগুলির উপস্থিতি এবং অ- পরিসমাপ্তি)। তোমাকে সতর্ক করা হইছে!
  • অনুরূপ কারণে, গ্লোবাল ধরণের অনুমিতি সাধারণত অযৌক্তিক বা অনস্বীকার্য হয়ে ওঠে। প্রকৃতপক্ষে, "প্রিন্সিপাল টাইপ" এর সম্পূর্ণ ধারণাটি তাত্ক্ষণিকভাবে একটি লাল-হেরিং, যেহেতু কোনও ফাংশন অনেকগুলি বিভিন্ন বৈশিষ্ট্য পূরণ করতে পারে যা এর উদ্দেশ্যযুক্ত ব্যবহারের সাথে অপ্রাসঙ্গিক (যেমন, " foo 7-এর চেয়ে বেশি সংখ্যার পূর্ণসংখ্যার জন্য প্রধান পূর্ণসংখ্যার গ্রহণ করে)"। পরিবর্তে, চৌরাস্তা এবং ইউনিয়নগুলিতে ব্যবহারিক পন্থাগুলি (দেখুন (3) , (4) ) সাধারণত অনুমান এবং পরীক্ষার সংমিশ্রণের উপর ভিত্তি করে।

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

সংক্ষিপ্ত পাঠের তালিকা:

  1. জন সি রেইনল্ডস দ্বারা প্রোগ্রামিং ল্যাঙ্গুয়েজ ফোরসিথের ডিজাইন
  2. রোয়ান ডেভিস এবং ফ্র্যাঙ্ক ফেনিংয়ের ছেদগুলির প্রকার এবং গণনার প্রভাব ut
  3. রোয়ান ডেভিস দ্বারা ব্যবহারিক পরিশোধন-প্রকারের পরীক্ষা করা (গবেষণামূলক)
  4. জোশুয়া ডানফিল্ড এবং ফ্র্যাঙ্ক ফেনিংয়ের ত্রিদেশীয় টাইপচেকিং

দুর্দান্ত উত্তর, অনেক ধন্যবাদ। লিঙ্কগুলি বিশেষভাবে কার্যকর এবং আলোকিত হয়েছে - সুতরাং আমাকে সঠিক দিক নির্দেশ করার জন্য ধন্যবাদ!
মাইকেরা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.