টাইপ ইরেজর ভাল
আসুন ঘটনাগুলিতে আটকে থাকি
এখনও পর্যন্ত অনেক উত্তর টুইটার ব্যবহারকারীর সাথে অত্যধিক উদ্বিগ্ন। ম্যাসেঞ্জারে নয় বার্তাগুলির প্রতি মনোনিবেশ রাখতে এটি সহায়ক। এখানে এখনও উল্লেখ করা অংশগুলি সহ একটি মোটামুটি সামঞ্জস্যপূর্ণ বার্তা রয়েছে:
জাভা ব্যবহারকারীরা টাইপ মোছা সম্পর্কে অভিযোগ করার সময় মজার বিষয় হয়, যা জাভা সঠিক হয়েছিল এবং এটি ভুল হয়ে যাওয়া সমস্ত বিষয় উপেক্ষা করে।
আমি বিশাল সুবিধাগুলি পাই (যেমন প্যারামিট্রিকটি) এবং শূন্য ব্যয় (কথিত ব্যয়টি কল্পনার সীমা)।
নতুন টি একটি ভাঙা প্রোগ্রাম। এটি "সমস্ত প্রস্তাবনা সত্য" এই দাবির পক্ষে বিস্ময়কর। আমি এর মধ্যে বড় নই।
একটি লক্ষ্য: যুক্তিসঙ্গত প্রোগ্রাম
এই টুইটগুলি এমন একটি দৃষ্টিকোণ প্রতিফলিত করে যা আমরা মেশিনকে কিছু করতে পারি কিনা সে বিষয়ে আগ্রহী নয় , তবে আমরা কীভাবে মেশিনটিকে আমাদের চাই কিছু করতে পারে তা যুক্তিযুক্ত কিনা তা আরও বেশি। ভাল যুক্তি একটি প্রমাণ। প্রুফগুলি আনুষ্ঠানিক স্বরলিপি বা কিছু কম ফর্মালতে নির্দিষ্ট করা যেতে পারে। স্পেসিফিকেশন ভাষা নির্বিশেষে এগুলি অবশ্যই স্পষ্ট এবং কঠোর হতে হবে। অনানুষ্ঠানিক স্পেসিফিকেশন সঠিকভাবে গঠন করা অসম্ভব না, তবে প্রায়শই ব্যবহারিক প্রোগ্রামিংয়ে ত্রুটিযুক্ত হয়। আমরা অনানুষ্ঠানিক যুক্তিযুক্ত সমস্যাগুলির সমাধান করতে স্বয়ংক্রিয় এবং অনুসন্ধানের পরীক্ষার মতো প্রতিকার দিয়ে শেষ করি। এটি এই বলে না যে পরীক্ষার অভ্যন্তরীণভাবে একটি খারাপ ধারণা, তবে উদ্ধৃত টুইটার ব্যবহারকারী আরও অনেক ভাল উপায় আছে বলে পরামর্শ দিচ্ছেন।
সুতরাং আমাদের লক্ষ্য হ'ল সঠিক প্রোগ্রামগুলি যা আমরা পরিষ্কারভাবে এবং কঠোরতার সাথে এমনভাবে যুক্তি করতে পারি যা মেশিনটি কীভাবে প্রোগ্রামটি বাস্তবায়িত করবে with এটি যদিও একমাত্র লক্ষ্য নয়। আমরা আমাদের যুক্তিটিও চাই একটি ডিগ্রি প্রকাশের জন্য। উদাহরণস্বরূপ, আমরা কেবলমাত্র প্রচুর যুক্তি দিয়েই প্রকাশ করতে পারি। প্রথম-আদেশের যুক্তির মতো কিছু থেকে সর্বজনীন (∀) এবং অস্তিত্বের (∃) পরিমাণ নির্ধারণ করা ভাল।
যুক্তির জন্য টাইপ সিস্টেম ব্যবহার করা
টাইপ সিস্টেমগুলি দ্বারা এই লক্ষ্যগুলি খুব সুন্দরভাবে সম্বোধন করা যেতে পারে। কারি-হাওয়ার্ডের চিঠিপত্রের কারণে এটি বিশেষত স্পষ্ট । এই চিঠিপত্রটি প্রায়শই নিম্নলিখিত সাদৃশ্য দিয়ে প্রকাশ করা হয়: প্রবণতাগুলি প্রমাণ হিসাবে প্রকার হিসাবে প্রোগ্রামগুলি হয়।
এই চিঠিপত্র কিছুটা গভীর। আমরা যৌক্তিক অভিব্যক্তি নিতে পারি এবং প্রকারের চিঠির মাধ্যমে তাদের অনুবাদ করতে পারি। তারপরে যদি আমাদের একই ধরণের স্বাক্ষরযুক্ত একটি প্রোগ্রাম থাকে যা সংকলন করে, আমরা প্রমাণিত করেছি যে লজিক্যাল এক্সপ্রেশনটি সর্বজনীন সত্য (একটি টোটোলজি)। কারণ এই চিঠিপত্রটি দ্বি-মুখী। প্রকার / প্রোগ্রাম এবং উপপাদ্য / প্রুফ ওয়ার্ল্ডগুলির মধ্যে রূপান্তরটি যান্ত্রিক এবং অনেক ক্ষেত্রে স্বয়ংক্রিয়ভাবে তৈরি হতে পারে।
কারি-হাওয়ার্ড একটি প্রোগ্রামের স্পেসিফিকেশনগুলির সাথে আমরা কী করতে চাই তাতে দুর্দান্ত অভিনয় করে।
টাইপ সিস্টেমগুলি জাভাতে কার্যকর?
এমনকি কারি-হাওয়ার্ড বোঝার পরেও কিছু লোক সহজেই কোনও টাইপ সিস্টেমের মূল্য বর্জন করা সহজ মনে করে
- সঙ্গে কাজ করা অত্যন্ত কঠিন
- (কারি-হাওয়ার্ডের মাধ্যমে) সীমিত অভিব্যক্তির সাথে যুক্তির সাথে মিল রাখে
- ভাঙ্গা (যা "দুর্বল" বা "শক্তিশালী" হিসাবে সিস্টেমের বৈশিষ্ট্য লাভ করে)।
প্রথম পয়েন্টটি সম্পর্কে, সম্ভবত IDE গুলি জাভা টাইপ সিস্টেমের সাথে কাজ করার জন্য যথেষ্ট সহজ করে তোলে (এটি অত্যন্ত বিষয়গত)।
দ্বিতীয় বিষয়টির বিষয়ে, জাভা প্রায় প্রথম অর্ডার যুক্তির সাথে মিলিত হয়। জেনেরিক্স সর্বজনীন মাপদণ্ডের সমতুল্য টাইপ সিস্টেম ব্যবহার করে। দুর্ভাগ্যক্রমে, ওয়াইল্ডকার্ডগুলি আমাদের অস্তিত্বের পরিমাপের একটি ছোট অংশ দেয়। তবে সর্বজনীন মাপদণ্ডটি বেশ ভাল শুরু। সমস্ত সম্ভাব্য তালিকাগুলির List<A>
জন্য সর্বজনীনভাবে কাজ করার জন্য এটি বলতে সক্ষম হওয়ায় এটি খুব ভাল কারণ এ সম্পূর্ণরূপে নিয়ন্ত্রণহীন। এটি টুইটার ব্যবহারকারী "প্যারামিট্রিকটি" এর সাথে সম্মানের সাথে কী কথা বলছে বাড়ে।
প্যারামিট্রিকটির বিষয়ে প্রায়শই একটি উদ্ধৃত কাগজ হ'ল ফ্রিপ ওয়েডলারের উপপাদাগুলি বিনামূল্যে! । এই কাগজটি সম্পর্কে মজার বিষয়টি হ'ল একমাত্র ধরণের স্বাক্ষর থেকে, আমরা কিছু খুব আকর্ষণীয় আক্রমণকারী প্রমাণ করতে পারি। যদি আমরা এই আক্রমণকারীদের জন্য স্বয়ংক্রিয় পরীক্ষাগুলি লিখি তবে আমরা আমাদের সময়কে অনেক বেশি অপচয় করব। উদাহরণস্বরূপ, List<A>
একা স্বাক্ষর টাইপ থেকেflatten
<A> List<A> flatten(List<List<A>> nestedLists);
আমরা যে কারণ করতে পারেন
flatten(nestedList.map(l -> l.map(any_function)))
≡ flatten(nestList).map(any_function)
এটি একটি সহজ উদাহরণ, এবং আপনি সম্ভবত এটি অনানুষ্ঠানিকভাবে সম্পর্কে যুক্তিযুক্ত হতে পারেন, তবে এটি এমনকি আরও সুন্দর যখন আমরা এই জাতীয় প্রমাণগুলি প্রথাগতভাবে টাইপ সিস্টেম থেকে নিখরচায় পেয়ে যাই এবং সংকলক দ্বারা পরীক্ষা করা হয়।
মুছে ফেলা অপব্যবহারের কারণ হতে পারে
ভাষা প্রয়োগের দৃষ্টিকোণ থেকে, জাভা এর জেনেরিকগুলি (যা সর্বজনীন ধরণের সাথে সামঞ্জস্যপূর্ণ) আমাদের প্রোগ্রামগুলি কী করে তার প্রমাণ পেতে ব্যবহৃত প্যারামিট্রিসিটিতে খুব ভারীভাবে খেল play এটি উল্লিখিত তৃতীয় সমস্যার দিকে যায়। প্রমাণ এবং নির্ভুলতার এই সমস্ত লাভের জন্য ত্রুটিগুলি ছাড়াই একটি শব্দ টাইপ সিস্টেম প্রয়োগ করা দরকার। জাভাতে অবশ্যই কিছু ভাষা বৈশিষ্ট্য রয়েছে যা আমাদের যুক্তিগুলি ছিন্ন করতে দেয়। এর মধ্যে রয়েছে তবে সীমাবদ্ধ নয়:
- একটি বাহ্যিক সিস্টেমের সাথে পার্শ্ব প্রতিক্রিয়া
- প্রতিবিম্ব
মুছে ফেলা জেনেরিকগুলি প্রতিবিম্বের সাথে সম্পর্কিত বিভিন্নভাবে। ক্ষয় না করে রানটাইমের তথ্য রয়েছে যা বাস্তবায়নের সাথে বহন করে যা আমরা আমাদের অ্যালগরিদমগুলি ডিজাইন করতে ব্যবহার করতে পারি। এর অর্থ কী তা স্থিরভাবে, যখন আমরা প্রোগ্রামগুলির বিষয়ে যুক্তি করি তখন আমাদের সম্পূর্ণ চিত্র থাকে না। প্রতিবিম্ব আমরা স্ট্যাটিকালি যে কারণে প্রমাণ করি তার যথার্থতার মারাত্মক হুমকি দেয়। এটা কোন কাকতালীয় প্রতিফলন বিভিন্ন ধরণের ত্রুটিও বাড়ে।
তাহলে কী কী উপায়গুলি যে মুছে ফেলা জেনেরিকগুলি "দরকারী" হতে পারে? টুইটে উল্লিখিত ব্যবহারগুলি বিবেচনা করুন:
<T> T broken { return new T(); }
টি-তে কোনও নো-আরগ কনস্ট্রাক্টর না থাকলে কী হবে? কিছু ভাষায় আপনি যা পান তা বাতিল। অথবা সম্ভবত আপনি নাল মান এড়িয়ে যান এবং সরাসরি একটি ব্যতিক্রম বাড়াতে যান (যা নাল মানগুলি যাইহোক নেতৃত্ব দেয়)। যেহেতু আমাদের ভাষা টিউরিং সম্পূর্ণ, কারণ কোন কলটি broken
নো-আর্গ নির্মাণকারীদের সাথে "নিরাপদ" প্রকারগুলিকে জড়িত করবে এবং কোনটি তা করবে না সে সম্পর্কে तर्क করা অসম্ভব । আমাদের কর্মসূচি সর্বজনীনভাবে কাজ করে তা আমরা হারিয়ে ফেলেছি।
মুছে ফেলার অর্থ আমরা যুক্তিযুক্ত হয়েছি (সুতরাং আসুন মুছুন)
সুতরাং আমরা যদি আমাদের প্রোগ্রামগুলি সম্পর্কে যুক্তি বোধ করতে চাই তবে আমাদের দৃ strongly়ভাবে পরামর্শ দেওয়া হচ্ছে যে ভাষা বৈশিষ্ট্যগুলি আমাদের যুক্তিকে দৃ strongly়ভাবে হুমকি দেয়। একবার আমরা এটি করি, তবে কেন রান টাইমে টাইপগুলি বাদ দিবেন না? তাদের দরকার নেই। কোনও ক্যাসেট ব্যর্থ হবে না বা অনুরোধের পরে যে পদ্ধতিগুলি অনুপস্থিত হতে পারে সে সন্তুষ্টির সাথে আমরা কিছু দক্ষতা এবং সরলতা পেতে পারি।
মুছে ফেলা যুক্তি উত্সাহ দেয়।