Unreachable code
কম্পিউটার প্রোগ্রামিং-এ, অপ্রাপ্য কোড একটি প্রোগ্রামের সোর্স কোডের অংশ যা কখনই কার্যকর করা যায় না কারণ বাকি প্রোগ্রাম থেকে কোডে কোনও নিয়ন্ত্রণ প্রবাহের পথ নেই। অপ্রাপ্য কোডকে কখনও কখনও ডেড কোডও বলা হয়, যদিও ডেড কোড এমন কোডকেও বোঝাতে পারে যা কার্যকর করা হয় কিন্তু কোনও প্রোগ্রামের আউটপুটের উপর কোনও প্রভাব ফেলে না। অপ্রাপ্য কোডকে সাধারণত বিভিন্ন কারণে অবাঞ্ছিত বলে মনে করা হয়ঃ এটি অপ্রয়োজনীয়ভাবে মেমরি ব্যবহার করে এটি সিপিইউর নির্দেশ ক্যাশের অপ্রয়োজনীয় ব্যবহারের কারণ হতে পারে এটি তথ্যের অবস্থানও হ্রাস করতে পারে সময় এবং প্রচেষ্টা ব্যয় করা যেতে পারে যা কখনও ব্যবহার করা হয় না এমন কোড পরীক্ষা, রক্ষণাবেক্ষণ এবং নথিভুক্ত করতে ব্যয় করা যেতে পারে কখনও কখনও একটি স্বয়ংক্রিয় পরীক্ষা কোড ব্যবহার করে একমাত্র জিনিস। যাইহোক, অপ্রাপ্য কোডের কিছু বৈধ ব্যবহার থাকতে পারে, যেমন একটি ব্রেকপয়েন্টের পরে প্রোগ্রামটি বন্ধ হয়ে যাওয়ার সময় ডিবাগারের মাধ্যমে ম্যানুয়ালি কল করার বা ঝাঁপ দেওয়ার জন্য ফাংশনগুলির একটি লাইব্রেরি সরবরাহ করা। এটি প্রোগ্রামের অভ্যন্তরীণ অবস্থা পরীক্ষা এবং সুন্দর-মুদ্রণের জন্য বিশেষভাবে কার্যকর। পাঠানো পণ্যের মধ্যে এই ধরনের কোড থাকা যুক্তিসঙ্গত হতে পারে, যাতে একজন ডেভেলপার ক্লায়েন্টের চলমান দৃষ্টান্তের সাথে একটি ডিবাগার সংযুক্ত করতে পারে। অপ্রাপ্য কোড অনেক কারণে বিদ্যমান থাকতে পারে, যেমনঃ জটিল শর্তাধীন শাখাগুলিতে প্রোগ্রামিং ত্রুটি একটি অপ্টিমাইজিং কম্পাইলার দ্বারা সম্পাদিত অভ্যন্তরীণ রূপান্তরের ফলস্বরূপ; নতুন বা পরিবর্তিত কোড লিগ্যাসি কোড কোডের অসম্পূর্ণ পরীক্ষা অন্য প্রয়োগের দ্বারা বাতিল করা অপ্রাপ্য কোড যা একজন প্রোগ্রামার মুছে না ফেলার সিদ্ধান্ত নিয়েছে কারণ এটি পৌঁছনো কোডের সাথে মিশে গেছে সম্ভাব্যভাবে পৌঁছনো কোড যে বর্তমান ব্যবহারের ক্ষেত্রে কখনও সুপ্ত কোডের প্রয়োজন হয় না যা ইচ্ছাকৃতভাবে পরে প্রয়োজন হলে কোডটি কেবল ডিবাগিংয়ের জন্য ব্যবহার করা হয়। লিগ্যাসি কোড হল সেই কোড যা একসময় কার্যকর ছিল কিন্তু আর ব্যবহৃত বা প্রয়োজনীয় নয়। কিন্তু অপ্রাপ্য কোড একটি জটিল গ্রন্থাগার, মডিউল বা রুটিনের অংশও হতে পারে যেখানে এটি অন্যদের জন্য বা এমন পরিস্থিতিতে দরকারী যা কোনও নির্দিষ্ট পরিস্থিতিতে পূরণ হয় না। এই ধরনের শর্তসাপেক্ষ অপ্রাপ্য কোডের একটি উদাহরণ হতে পারে কম্পাইলারের রানটাইম লাইব্রেরিতে একটি সাধারণ স্ট্রিং ফরম্যাটিং ফাংশন প্রয়োগ করা, যাতে সমস্ত সম্ভাব্য আর্গুমেন্ট প্রক্রিয়াকরণের জন্য জটিল কোড থাকে, যার মধ্যে শুধুমাত্র একটি ছোট উপসেট ব্যবহার করা হয়। সংকলকরা সাধারণত সংকলনের সময় অব্যবহৃত কোড বিভাগগুলি সরাতে সক্ষম হবে না, কারণ আচরণটি মূলত রান টাইমে আর্গুমেন্টের মান দ্বারা নির্ধারিত হয়। উদাহরণস্বরূপ সি কোডের এই অংশেঃ int fhoo (int X, int Y) {ফেরত X + Y; int Z = X * Y;} সংজ্ঞাটি কখনই পৌঁছায় না কারণ ফাংশনটি সর্বদা তার আগে ফিরে আসে। অতএব, স্টোরেজ বরাদ্দ করা বা শুরু করার প্রয়োজন নেই। 2014 সালের ফেব্রুয়ারি থেকে অ্যাপলের এসএসএল/টিএলএস-এ একটি বড় নিরাপত্তা ত্রুটি ছিল যা আনুষ্ঠানিকভাবে এবং অনানুষ্ঠানিকভাবে "গোটো ফেল বাগ" নামে পরিচিত। প্রাসঙ্গিক কোড খণ্ডটি হলঃ স্ট্যাটিক ওএসএসটাটাস এসএসএলভেরিফাইসাইন্ডসারভারকিইএক্সচেঞ্জ (এসএসএলসি কনটেক্সট * সিটিএক্স, বূল ইসআরএসএ, এসএসএলবাফার সাইন্ডপারামস, উইনট8টি * সিগ্নেচার, ইউইনট16 সিগ্নেচারলেন) {ওএসএসটাটাস এরর; যদি ((এরর = SSLHashSHA1.update (& হ্যাশসিটিএক্স, & সার্ভারর্যান্ডম)! = 0) গোটো ব্যর্থ হয়; যদি (এরর = SSLHashSHA1.update (& হ্যাশসিটিএক্স, & সাইন্ডপারামস)! = 0) গোটো ব্যর্থ হয়; গোটো ব্যর্থ হয়; যদি (এরর = SSLHashSHA1.final (SSLHashSHA1.final) সি ভাষার বাক্যবিন্যাসে, দ্বিতীয়টি নিঃশর্ত, এবং তাই সর্বদা SSLHashSHA1.final-এ কলটি এড়িয়ে যায়। ফলস্বরূপ, ইআরআর এসএইচএ1 আপডেট অপারেশনের অবস্থা ধরে রাখবে এবং স্বাক্ষর যাচাইকরণ কখনই ব্যর্থ হবে না। এখানে, পৌঁছনো যায় না এমন কোডটি হল চূড়ান্ত ফাংশনের কল। ক্ল্যাং কম্পাইলার প্রয়োগ করার বিকল্প-সবকিছুতে পৌঁছনো যায় না এমন কোড বিশ্লেষণ অন্তর্ভুক্ত রয়েছে, যা এই কোডের জন্য একটি অ্যালার্ম ট্রিগার করবে। সি + +-এ, কিছু গঠন অনির্ধারিত আচরণের জন্য নির্দিষ্ট করা হয়। একটি সংকলক যে কোনও আচরণ বা কিছুই প্রয়োগ করতে পারে না এবং সাধারণত একটি অপ্টিমাইজিং সংকলক ধরে নেবে যে কোডটি পৌঁছানো যায় না। অ্যাক্সেসযোগ্য কোডের বিশ্লেষণ সনাক্তকরণ হল এমন কোড খুঁজে বের করার জন্য নিয়ন্ত্রণ প্রবাহ বিশ্লেষণের একটি রূপ যা কোনও সম্ভাব্য প্রোগ্রাম অবস্থায় পৌঁছানো যায় না। কিছু ভাষায় (যেমনঃ জাভা) অপ্রাপ্য কোডের কিছু ফর্ম স্পষ্টভাবে অনুমোদিত নয়। যে অপ্টিমাইজেশানটি পৌঁছনো যায় না এমন কোড সরিয়ে দেয় তাকে ডেড কোড এলিমিনেশন বলা হয়। একটি অপ্টিমাইজিং কম্পাইলার (যেমন, সাধারণ সাব-এক্সপ্রেশন নির্মূল) দ্বারা সম্পাদিত রূপান্তরগুলির ফলস্বরূপ কোড পৌঁছানো যায় না। বাস্তবে, বিশ্লেষণের পরিশীলিতকরণ অপ্রাপ্য কোডের পরিমাণের উপর উল্লেখযোগ্য প্রভাব ফেলে যা সনাক্ত করা হয়। উদাহরণস্বরূপ, ধ্রুবক ভাঁজ এবং সহজ প্রবাহ বিশ্লেষণ দেখায় যে নিম্নলিখিত কোডে যদি-বিবৃতির অভ্যন্তরে পৌঁছনো যায় নাঃ int N = 2 + 1; যদি (N = = 4) {/* পৌঁছনো যায় না */} তবে, নিম্নলিখিত কোডে সংশ্লিষ্ট ব্লকটি যাতে পৌঁছনো যায় না তা নির্ধারণ করার জন্য আরও বেশি পরিশীলনের প্রয়োজনঃ ডবল X = sqrt (2); যদি (X> 5) {/* পৌঁছনো যায় না */} অপ্রাপ্য কোড নির্মূল কৌশল ডেড কোড নির্মূল এবং অপ্রয়োজনীয় কোড নির্মূলের মতো অপ্টিমাইজেশনের একই শ্রেণীতে থাকে। অপ্রাপ্য বনাম প্রোফাইলিং কিছু ক্ষেত্রে, একটি ব্যবহারিক পদ্ধতি সহজ অপ্রাপ্যতার মানদণ্ডের সংমিশ্রণ এবং আরও জটিল মামলাগুলি পরিচালনা করার জন্য একটি প্রোফাইলারের ব্যবহার হতে পারে। সাধারণভাবে প্রোফাইলিং কোনও কোডের অপ্রাপ্যতা সম্পর্কে কিছু প্রমাণ করতে পারে না, তবে সম্ভাব্য অপ্রাপ্য কোড খুঁজে বের করার জন্য এটি একটি ভাল অনুসন্ধানমূলক হতে পারে। একবার কোনও সন্দেহজনক কোড পাওয়া গেলে, অন্যান্য পদ্ধতি, যেমন আরও শক্তিশালী কোড বিশ্লেষণ সরঞ্জাম, বা এমনকি হাতে বিশ্লেষণ, কোডটি সত্যিই পৌঁছানো যায় না কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। আরও দেখুন কোড কভারেজ রিডানডেন্ট কোড ডেড কোড অক্সবো কোড রেফারেন্স অ্যাপেল, এ. ডব্লিউ. 1998 মডার্ন কম্পাইলার ইমপ্লিমেন্টেশন ইন জাভা। কেমব্রিজ ইউনিভার্সিটি প্রেস। মাচনিক এস. এস. 1997 অ্যাডভান্সড কম্পাইলার ডিজাইন এবং বাস্তবায়ন। মরগান কফম্যান। কম্পাইলার অপ্টিমাইজেশান সফ্টওয়্যার অসঙ্গতি সোর্স কোড