Unreachable code
کمپیوٹر پروگرامنگ میں، ناقابل رسائی کوڈ کسی پروگرام کے سورس کوڈ کا حصہ ہوتا ہے جسے کبھی بھی انجام نہیں دیا جا سکتا کیونکہ باقی پروگرام سے کوڈ تک کوئی کنٹرول فلو کا راستہ موجود نہیں ہے۔ ناقابل رسائی کوڈ کو بعض اوقات ڈیڈ کوڈ بھی کہا جاتا ہے، حالانکہ ڈیڈ کوڈ اس کوڈ کا بھی حوالہ دے سکتا ہے جو عمل میں لایا جاتا ہے لیکن اس کا پروگرام کے آؤٹ پٹ پر کوئی اثر نہیں پڑتا ہے۔ ناقابل رسائی کوڈ کو عام طور پر کئی وجوہات کی بناء پر ناپسندیدہ سمجھا جاتا ہے: یہ غیر ضروری طور پر میموری کا استعمال کرتا ہے۔ یہ سی پی یو کے انسٹرکشن کیش کے غیر ضروری استعمال کا سبب بن سکتا ہے۔ یہ ڈیٹا لوکیٹی کو بھی کم کر سکتا ہے۔ وقت اور کوشش کو ٹیسٹنگ، برقرار رکھنے اور دستاویز کرنے میں خرچ کیا جا سکتا ہے جو کبھی استعمال نہیں ہوتا ہے۔ بعض اوقات کوڈ کا استعمال کرنے والی واحد چیز خودکار ٹیسٹ ہوتی ہے۔ تاہم، ناقابل رسائی کوڈ کے کچھ جائز استعمال ہو سکتے ہیں، جیسے ڈیبگر کے ذریعے دستی طور پر کال کرنے یا اس پر کودنے کے لیے افعال کی لائبریری فراہم کرنا جب کہ پروگرام بریک پوائنٹ کے بعد روک دیا جاتا ہے۔ یہ خاص طور پر پروگرام کی اندرونی حالت کی جانچ اور خوبصورت پرنٹنگ کے لیے مفید ہے۔ بھیجے گئے پروڈکٹ میں اس طرح کا کوڈ رکھنا سمجھ میں آسکتا ہے، تاکہ ڈویلپر کسی ڈیبگر کو کلائنٹ کے چل رہے مثال سے منسلک کر سکے۔ ناقابل رسائی کوڈ بہت سی وجوہات کی بناء پر موجود ہو سکتا ہے، جیسے: پیچیدہ مشروط شاخوں میں پروگرامنگ کی غلطیاں ایک بہتر مرتب کرنے والے کے ذریعہ انجام دی گئی اندرونی تبدیلیوں کا نتیجہ ؛ نئے یا ترمیم شدہ کوڈ لیگیسی کوڈ کی نامکمل جانچ کو ایک اور نفاذ ناقابل رسائی کوڈ نے ختم کر دیا جسے ایک پروگرامر نے حذف نہ کرنے کا فیصلہ کیا کیونکہ یہ قابل رسائی کوڈ کے ساتھ ملا ہوا ہے ممکنہ طور پر قابل رسائی کوڈ کہ موجودہ استعمال کے معاملات میں کبھی بھی غیر فعال کوڈ کی ضرورت نہیں ہوتی ہے جسے جان بوجھ کر رکھا جاتا ہے اگر بعد میں اس کی ضرورت ہو تو کوڈ صرف ڈیبگنگ کے لیے استعمال ہوتا ہے۔ میراث کوڈ وہ ہے جو کبھی مفید تھا لیکن اب استعمال نہیں ہوتا ہے یا اس کی ضرورت نہیں ہے۔ لیکن ناقابل رسائی کوڈ ایک پیچیدہ لائبریری، ماڈیول یا معمول کا حصہ بھی ہو سکتا ہے جہاں یہ دوسروں کے لیے مفید ہو یا ایسے حالات میں جو کسی خاص منظر نامے میں پورا نہیں ہوتے۔ اس طرح کے مشروط طور پر ناقابل رسائی کوڈ کی ایک مثال مرتب کرنے والے کی رن ٹائم لائبریری میں عام سٹرنگ فارمیٹنگ فنکشن کا نفاذ ہو سکتا ہے، جس میں تمام ممکنہ دلائل پر کارروائی کرنے کے لیے پیچیدہ کوڈ ہوتا ہے، جن میں سے صرف ایک چھوٹا سا ذیلی سیٹ اصل میں استعمال ہوتا ہے۔ مرتب کرنے والے عام طور پر مرتب کرنے کے وقت غیر استعمال شدہ کوڈ کے حصوں کو ہٹانے کے قابل نہیں ہوں گے، کیونکہ رویے کا تعین بڑی حد تک رن ٹائم پر دلائل کی اقدار سے ہوتا ہے۔ مثال کے طور پر سی کوڈ کے اس ٹکڑے میں: انٹو فو (انٹو ایکس، انٹو وائی) {ریٹرن ایکس + وائی ؛ انٹو زیڈ = ایکس * وائی ؛} تعریف کبھی نہیں پہنچتی کیونکہ فنکشن ہمیشہ اس سے پہلے لوٹتا ہے۔ لہذا، ضرورت کو نہ تو اسٹوریج مختص کیا جائے اور نہ ہی شروع کیا جائے۔ فروری 2014 سے ایپل کے ایس ایس ایل/ٹی ایل ایس میں ایک بڑی حفاظتی خامی تھی جسے باضابطہ طور پر اور غیر رسمی طور پر "گوٹو فیل بگ" کے نام سے جانا جاتا ہے۔ متعلقہ کوڈ کا ٹکڑا یہ ہے: جامد او ایس ایس ٹیٹس ایس ایس ایل وی ایریفائی سائنڈ سرور کی ایکسچینج (ایس ایس ایل کانٹیکسٹ * سی ٹی ایکس، بول isRsa، ایس ایس ایل بفر سائنڈ پیرمز، uint8 _ t * سگنیچر، UInt16 سگنیچر لین) {OSStatus err ؛ اگر ((err = SSLHashSHA1.update (& hashCtx, & ServerRandom)! = 0) گوٹو فیل ؛ اگر (err = SSLHashSHA1.update (& hashCtx, & سائنڈ پیرمز)! = 0) گوٹو فیل ؛ گوٹو فیل ؛ اگر (err = SSLHashSHA1.final ( سی زبان کے نحو میں، دوسرا غیر مشروط ہے، اور اس لیے ہمیشہ کال کو SSLHashSHA1.final پر چھوڑ دیتا ہے۔ نتیجے کے طور پر، غلطی SHA1 اپ ڈیٹ آپریشن کی حیثیت برقرار رکھے گی، اور دستخط کی تصدیق کبھی ناکام نہیں ہوگی۔ یہاں، ناقابل رسائی کوڈ حتمی فنکشن کی کال ہے۔ کلیانگ مرتب کو آپشن کے ساتھ لاگو کرنا-ہر چیز میں ناقابل رسائی کوڈ تجزیہ شامل ہے، جو اس کوڈ کے لیے الارم کو متحرک کرے گا۔ C + + میں، کچھ تعمیرات کو غیر متعین رویے کے لیے متعین کیا جاتا ہے۔ ایک مرتب کسی بھی رویے کو نافذ کرنے کے لیے آزاد ہے یا کوئی نہیں، اور عام طور پر ایک بہتر مرتب کرنے والا فرض کرے گا کہ کوڈ ناقابل رسائی ہے۔ ناقابل رسائی کوڈ کا تجزیہ پتہ لگانا کوڈ کو تلاش کرنے کے لیے کنٹرول فلو تجزیہ کی ایک شکل ہے جس تک کسی بھی ممکنہ پروگرام کی حالت میں کبھی نہیں پہنچا جا سکتا۔ کچھ زبانوں میں (مثال کے طور پر جاوا) ناقابل رسائی کوڈ کی کچھ شکلوں کی واضح طور پر اجازت نہیں ہے۔ ناقابل رسائی کوڈ کو ہٹانے والی اصلاح کو ڈیڈ کوڈ کے خاتمے کے نام سے جانا جاتا ہے۔ کوڈ ایک بہتر مرتب کرنے والے کے ذریعہ انجام دی گئی تبدیلیوں کے نتیجے میں ناقابل رسائی ہو سکتا ہے (مثال کے طور پر، عام ذیلی اظہار کا خاتمہ)۔ عملی طور پر تجزیہ کی نفاست کا پتہ لگانے والے ناقابل رسائی کوڈ کی مقدار پر نمایاں اثر پڑتا ہے۔ مثال کے طور پر، مستقل فولڈنگ اور سادہ بہاؤ کے تجزیے سے پتہ چلتا ہے کہ مندرجہ ذیل کوڈ میں آئی ایف اسٹیٹمنٹ کا اندرونی حصہ ناقابل رسائی ہے: آئی این ٹی این = 2 + 1 ؛ اگر (این = = 4) {/* ناقابل رسائی */} تاہم، یہ معلوم کرنے کے لیے بہت زیادہ نفاست کی ضرورت ہے کہ متعلقہ بلاک مندرجہ ذیل کوڈ میں ناقابل رسائی ہے: ڈبل ایکس = ایس کیو آر ٹی (2) ؛ اگر (ایکس> 5) {/* ناقابل رسائی */} ناقابل رسائی کوڈ کے خاتمے کی تکنیک ڈیڈ کوڈ کے خاتمے اور بے کار کوڈ کے خاتمے کی طرح اصلاح کی اسی کلاس میں ہے۔ رسائی نہ ہونا بمقابلہ پروفائلنگ کچھ معاملات میں، ایک عملی نقطہ نظر آسان رسائی نہ ہونے کے معیار اور زیادہ پیچیدہ معاملات کو سنبھالنے کے لیے پروفائلر کے استعمال کا مجموعہ ہو سکتا ہے۔ پروفائلنگ عام طور پر کوڈ کے کسی ٹکڑے کی ناقابل رسائی کے بارے میں کچھ بھی ثابت نہیں کرسکتی ہے، لیکن ممکنہ طور پر ناقابل رسائی کوڈ تلاش کرنے کے لیے ایک اچھی تحقیق ہو سکتی ہے۔ ایک بار کوڈ کا مشتبہ ٹکڑا مل جانے کے بعد، دوسرے طریقے، جیسے کہ زیادہ طاقتور کوڈ تجزیہ ٹول، یا یہاں تک کہ ہاتھ سے تجزیہ، یہ فیصلہ کرنے کے لیے استعمال کیا جا سکتا ہے کہ آیا کوڈ واقعی ناقابل رسائی ہے۔ کوڈ کوریج ریڈینڈینٹ کوڈ ڈیڈ کوڈ آکسبو کوڈ حوالہ جات ایپل، اے ڈبلیو 1998 جدید مرتب کا نفاذ جاوا میں بھی دیکھیں۔ کیمبرج یونیورسٹی پریس۔ مچنیک ایس ایس 1997 ایڈوانسڈ مرتب ڈیزائن اور نفاذ۔ مورگن کافمین۔ مرتب اصلاح سافٹ ویئر بے ضابطگیاں ماخذ کوڈ