String interning
کمپیوٹر سائنس میں، سٹرنگ انٹرننگ ہر الگ سٹرنگ ویلیو کی صرف ایک کاپی کو محفوظ کرنے کا ایک طریقہ ہے، جو غیر متغیر ہونا چاہیے۔ انٹرننگ سٹرنگ کچھ سٹرنگ پروسیسنگ کے کاموں کو زیادہ وقت یا جگہ کے لحاظ سے موثر بناتی ہے، اس قیمت پر کہ جب سٹرنگ بنائی جائے یا انٹرن کی جائے تو مزید وقت درکار ہوتا ہے۔ الگ الگ اقدار کو سٹرنگ انٹرن پول میں محفوظ کیا جاتا ہے۔ ہر سٹرنگ کی واحد کاپی کو اس کا انٹرن کہا جاتا ہے اور عام طور پر سٹرنگ کلاس کے طریقہ کار کے ذریعے دیکھا جاتا ہے، مثال کے طور پر جاوا میں String.intern ()۔ جاوا میں تمام مرتب وقت کے مستقل سٹرنگ اس طریقہ کار کا استعمال کرتے ہوئے خود بخود انٹرن ہوتے ہیں۔ سٹرنگ انٹرننگ کو کچھ جدید آبجیکٹ پر مبنی پروگرامنگ زبانوں کی حمایت حاصل ہے، جن میں جاوا، ازگر، پی ایچ پی (5.4 سے)، لوا اور. NET زبانیں شامل ہیں۔ لیسپ، اسکیم، جولیا، روبی اور سمال ٹاک ان زبانوں میں شامل ہیں جن کی علامت کی قسم بنیادی طور پر اندرونی تار ہیں۔ نیو جرسی کے معیاری ایم ایل کی لائبریری میں ایٹم کی ایک قسم ہے جو ایک ہی کام کرتی ہے۔ آبجیکٹیو-سی کے سلیکٹر، جو بنیادی طور پر طریقہ کار کے ناموں کے طور پر استعمال ہوتے ہیں، اندرونی تار ہوتے ہیں۔ سٹرنگ کے علاوہ دیگر اشیاء کو انٹرن کیا جا سکتا ہے۔ مثال کے طور پر، جاوا میں، جب ابتدائی اقدار کو ریپر آبجیکٹ میں باکس کیا جاتا ہے، تو کچھ اقدار (کوئی بھی بولین، کوئی بھی بائٹ، 0 سے 127 تک کا کوئی چار، اور −128 اور 127 کے درمیان کا کوئی بھی مختصر یا انٹی) کو انٹرن کیا جاتا ہے، اور ان اقدار میں سے کسی ایک کے باکسنگ کے کسی بھی دو تبادلوں کا نتیجہ ایک ہی آبجیکٹ میں آنے کی ضمانت دی جاتی ہے۔ ہسٹری Lisp نے اپنی علامتوں کے لیے اندرونی تاروں کا تصور متعارف کرایا۔ تاریخی طور پر، سٹرنگ انٹرن پول کے طور پر استعمال ہونے والے ڈیٹا ڈھانچے کو اوبلسٹ (جب اسے منسلک فہرست کے طور پر لاگو کیا گیا تھا) یا اوبری (جب اسے صف کے طور پر لاگو کیا گیا تھا) کہا جاتا تھا۔ جدید Lisp بولیاں عام طور پر علامتوں کو تاروں سے الگ کرتی ہیں۔ دی گئی تار کو انٹرن کرنے سے موجودہ علامت واپس آتی ہے یا ایک نئی علامت بنتی ہے، جس کا نام وہ تار ہے۔ علامتوں میں اکثر اضافی خصوصیات ہوتی ہیں جو تاروں میں نہیں ہوتی ہیں (جیسے متعلقہ اقدار کے لیے اسٹوریج، یا نیم سپیسنگ): یہ فرق غلطی سے ایک اندرونی تار کا غیر ضروری طور پر اندرونی تار سے موازنہ کرنے سے روکنے کے لیے بھی مفید ہے، جو استعمال کے نمونوں کے لحاظ سے وقفے وقفے سے ناکامیوں کا باعث بن سکتا ہے۔ محرک سٹرنگ انٹرننگ سٹرنگ کے موازنہ کو تیز کرتی ہے، جو بعض اوقات ایپلی کیشنز میں کارکردگی کی رکاوٹ ہوتی ہے (جیسے کہ مرتب کرنے والے اور متحرک پروگرامنگ زبان کے رن ٹائم) جو کسی شے کی صفات اور طریقوں کو دیکھنے کے لیے سٹرنگ کیز کے ساتھ ملحقہ صفوں پر بہت زیادہ انحصار کرتے ہیں۔ انٹرننگ کے بغیر، دو الگ الگ تاروں کا موازنہ کرنے میں دونوں کے ہر کردار کی جانچ پڑتال شامل ہو سکتی ہے۔ یہ کئی وجوہات کی بناء پر سست ہے: یہ سٹرنگ کی لمبائی میں فطری طور پر O (n) ہے۔ اس کے لیے عام طور پر میموری کے کئی علاقوں سے ریڈز کی ضرورت ہوتی ہے، جس میں وقت لگتا ہے۔ اور ریڈز پروسیسر کیش کو بھر دیتے ہیں، جس کا مطلب ہے کہ دیگر ضروریات کے لیے کم کیش دستیاب ہے۔ اندرونی تاروں کے ساتھ، اصل انٹرن آپریشن کے بعد ایک سادہ آبجیکٹ شناخت ٹیسٹ کافی ہوتا ہے۔ یہ عام طور پر پوائنٹر مساوات ٹیسٹ کے طور پر لاگو ہوتا ہے، عام طور پر صرف ایک مشین کی ہدایت جس میں میموری کا کوئی حوالہ نہیں ہوتا ہے۔ سٹرنگ انٹرننگ میموری کے استعمال کو بھی کم کرتی ہے اگر ایک ہی سٹرنگ ویلیو کی بہت سی مثالیں ہوں ؛ مثال کے طور پر، اسے نیٹ ورک سے یا اسٹوریج سے پڑھا جاتا ہے۔ اس طرح کے تاروں میں جادوئی نمبر یا نیٹ ورک پروٹوکول کی معلومات شامل ہو سکتی ہیں۔ مثال کے طور پر، ایکس ایم ایل پارسر میموری کو بچانے کے لیے ٹیگز اور صفات کے ناموں کو انٹرن کر سکتے ہیں۔ جاوا آر ایم آئی سیریلائزیشن آبجیکٹ اسٹریمز پر آبجیکٹ کی نیٹ ورک ٹرانسفر ان سٹرنگز کو منتقل کر سکتی ہے جو زیادہ مؤثر طریقے سے انٹرن کیے جاتے ہیں، کیونکہ سٹرنگ آبجیکٹ کا ہینڈل سیریلائزیشن پر ڈپلیکیٹ آبجیکٹ کی جگہ استعمال ہوتا ہے۔ مسائل ملٹی تھریڈنگ اگر اندرونی تار غیر متغیر نہیں ہیں، تو خرابیوں کا ایک ذریعہ یہ ہے کہ ملٹی تھریڈنگ کے ساتھ ملا کر سٹرنگ انٹرننگ میں دشواری ہو سکتی ہے۔ بہت سے نظاموں میں، سٹرنگ انٹرنز کو ایڈریس اسپیس کے اندر تمام دھاگوں میں عالمی ہونا ضروری ہے (یا کسی بھی سیاق و سباق میں جو پوائنٹروں کا اشتراک کر سکتے ہیں)، اس طرح انٹرن پول (زبانیں) عالمی وسائل ہیں جنہیں محفوظ ہم وقت رسائی کے لیے ہم آہنگ کیا جانا چاہیے۔ اگرچہ یہ صرف سٹرنگ کی تخلیق کو متاثر کرتا ہے (جہاں انٹرن پول کو چیک کیا جانا چاہیے اور اگر ضروری ہو تو اس میں ترمیم کی جانی چاہیے)، اور ڈبل چیک شدہ لاکنگ کو ان پلیٹ فارمز پر استعمال کیا جا سکتا ہے جہاں یہ ایک محفوظ اصلاح ہے، انٹرن پول میں ترمیم کرتے وقت باہمی اخراج کی ضرورت مہنگی ہو سکتی ہے۔ مواد کو سٹرنگ کی جگہ کو متعدد تالابوں میں تقسیم کرکے بھی کم کیا جا سکتا ہے، جنہیں ایک دوسرے سے آزادانہ طور پر ہم آہنگ کیا جا سکتا ہے۔ غیر استعمال شدہ اندرونی تاروں کو دوبارہ حاصل کرنا اندرونی تاروں کے بہت سے نفاذ (دستی طور پر یا دوسری صورت میں) تاروں کو دوبارہ حاصل کرنے کی کوشش نہیں کرتے ہیں جو اب استعمال نہیں ہوتے ہیں۔ ایسی ایپلی کیشنز کے لیے جہاں اندرونی تاروں کی تعداد کم یا مقررہ ہے، یا جو قلیل مدتی ہیں، نظام کے وسائل کا نقصان قابل برداشت ہو سکتا ہے۔ لیکن طویل عرصے سے چلنے والے نظاموں کے لیے جہاں رن ٹائم پر بڑی تعداد میں سٹرنگ انٹرن بنائے جاتے ہیں، غیر استعمال شدہ انٹرن کو دوبارہ حاصل کرنے کی ضرورت پیدا ہو سکتی ہے۔ اس کام کو کچرا جمع کرنے والا سنبھال سکتا ہے، حالانکہ اس کے صحیح طریقے سے کام کرنے کے لیے سٹرنگ انٹرنز کے کمزور حوالہ جات کو انٹرن پول میں محفوظ کرنا ضروری ہے۔ فلائی ویٹ پیٹرن نوٹ حوالہ جات بیرونی لنکس بصری جے #سٹرنگ کلاس۔ نیٹ سٹرنگ کلاس گووا جاوا لائبریری-انٹرنر-نان-پرمینجن String.intern اور کمزور اور مضبوط حوالہ جات کے نفاذ کے ساتھ دیگر غیر متغیر اقسام کی حمایت کرتا ہے سافٹ ویئر آپٹیمائزیشن انٹرننگ