کم فرام

کم فرام COMEFROM (یا COME FROM) ایک نادر اور مزاحیہ کنٹرول فلو اسٹرکچر ہے جو کچھ پروگرامنگ زبانوں میں پایا جاتا ہے۔ اس کا تصور گو ٹو بیان کے الٹ ہے — جہاں GOTO کنٹرول کو کسی مخصوص مقام پر بھیجتا ہے، وہیں COMEFROM اس کنٹرول کو کسی بھی لیبل یا لائن سے COMEFROM بیان کی جانب منتقل کرتا ہے۔

 تعارف 
COMEFROM تقریبًا ایک "خاموش GOTO" سمجھا جاتا ہے۔
یہ اس طرح کام کرتا ہے: اگر کوڈ میں ایک خاص لیبل 'x' ہے اور کہیں اور else پر COMEFROM x موجود ہے، تو جب پروگرام وہ لیبل x پہنچے گا تو بغیر کسی ظاہری ہدایت کے کنٹرول COMEFROM بیان کی طرف منتقل ہو جائے گا۔ یہ منتقلی بعض زبانوں میں:
 لیبل پر پہنچنے سے پہلے،
 یا بعد ہو سکتی ہے،
 یا مشروط (Conditional) بھی ہو سکتی ہے، جیسا کہ IF کے اندر GOTO ہوتا ہے۔ 

ان اصولوں کی وجہ سے:
 COMEFROM پروگرام کے عالمی ڈھانچے پر انحصار کرتا ہے (Global flow)، جب کہ گو ٹو GOTO صرف مقامی ڈھانچے پر فلو (Local flow) کرتا ہے۔
 یہ ڈیبگنگ کو بہت مشکل بنا دیتا ہے، کیونکہ کسی لیبل پر تنازع CONFLICT یا اچانک کنٹرول شفٹ کا پتہ صرف پروگرام کے مکمل مطالعے سے چلتا ہے۔

 تاریخی پس منظر 
 سب سے پہلے یہ تصور اسمبلی زبان میں مذاق کے طور پر 'CMFRM' کے نام سے نمودار ہوا۔
 1973ء میں ڈاٹا میشن جریدے میں لارینس اآر کلارک R. Lawrence Clark نے ایک مضمون لکھا: “We don't know where to GOTO if we don't know where we've COME FROM” (یعنی ہم کہاں جانا ہے (گوٹو) کا پتہ نہیں اگر ہم کو کم فرام (جہاں سے آے ہیں کا پتہ پتہ نہیں) انھوں نے COMEFROM کا عملی استعمال بھی بیان کیا۔ یہ مضمون اس وقت شائع ہوا جب ایڈسگیر ڈیجکسٹرا Edsger Dijkstra نے GOTO کے نقصان پر “Go To Statement Considered Harmful” (گوٹو کا بیانیہ نقصان دہ تصور کیا گیا ہے) نامی مضمون پیش کیا تھا۔
 C-INTERCAL (ایک مستند مزاحیہ زبان) میں COMEFROM اور اس کا کمپیوٹر زدہ "computed" فارم شامل کیا گیا تاکہ زبان کے پیچیدہ کنٹرول فلو کی مثالی مزاح متعارف ہو۔
 فورٹران میں 'اسائنڈ کم فرام' اور 'ڈونٹ' نامی کنٹرول اسٹرکچر کے تجربے بھی تجویز کیے گئے تھے۔

 پائتھن میں تجرباتی نفاذ 
1 اپریل 2004 کو ریچی ہینڈل Richie Hindle نے پائتھن کے لیے GOTO اور COMEFROM دونوں کا ایک مزاحیہ مگر فعال ماڈیول جاری کیا۔
یہ اس دن (April Fools’ Day) شائع ہوا تھا اور مقصد صرف تفریح تھا، لیکن ماڈیول مکمل طور پر فعال تھا اور صحیح طرح کام کرتا تھا۔ ذیل میں تفصیل ملاحظہ فرمائیں۔

 تکنیکی عمل 
COMEFROM کی بنیادی خاصیت یہ ہے کہ:
 جب پروگرام مخصوص لیبل پر پہنچتا ہے،
 تب اُس لیبل کے بارے میں کسی بھی COMEFROM بیان کا پتہ چلتا ہے،
 اور فوراً کنٹرول COMEFROM والے مقام پر منتقل ہو جاتا ہے۔

یہ طریقہ کار موڈیولر پروگرامنگ کے نظریے اور کنٹرول فلو کی آسانی کے برعکس ہے اور اس میں چھپی ناواضح کنٹرول ٹریسنگ (Hidden control jumps) کا فرق ہوتا ہے۔

 محدودیاں اور مفروضے 
 متعدد COMEFROM بیانات اگر ایک ہی لیبل کے لیے ہوں تو:
 کچھ زبانیں اس کو نامنظور کرتی ہیں،
 کچھ میں نفاذ غیر متوقع ہوتا ہے،
 کچھ میں ترتیب سے یا متوازی (Parallel/Concurrent) عمل ہوتا ہے۔
 ڈی بگنگ اور مینٹیننس کے لیے یہ اسٹرکچر انتہائی الجھا ہوا سمجھا جاتا ہے۔

 پروگرامروں کا تجریہ 
یہ بات حیران کن ہے کہ بعض لوگ استثنائیات (Exceptions) کو COMEFROM کے نفاذ کے طور پر پیش کرتے ہیں۔ایک کمپیوٹر پروگرامر مصنف نے COMEFROM کا تصور پہلی بار 1971 کے آس پاس مذاق پر مبنی اسمبلی زبان کی ہدایات کی ایک فہرست میں دیکھا تھا — جس میں "move and wrap core" اور "move and wrap secretary" جیسی دیگر طنزیہ اصطلاحات بھی شامل تھیں۔ بعد کے برسوں میں بھی یہ اصطلاح ایسی مزاحیہ فہرستوں میں کبھی کبھار دکھائی دی، مگر عملی گفتگو میں دوبارہ اس وقت سامنے آئی جب ایوار جیکبسن Ivar Jacobson نے اسے یوزکیسیز UseCases میں اپنے ایکسٹینشن 'extension' میکانزم کے نفاذ کے طور پر تجویز کیا۔ تاہم، کمرے میں موجود ہر فرد کو اس بات کا ادراک نہیں تھا کہ وہ دراصل یہ بھی کہہ رہے ہیں کہ ایکسٹینشن قابلِ نفاذ نہیں ہیں۔

واضح اور سادہ حقیقت کو بیان کرنے کے خطرے کے باوجود کہا جا سکتا ہے کہ ایکسٹینشن کبھی یہ ظاہر نہیں کرتے کہ وہ کہاں سے آئے ہیں — درحقیقت، ان کا بنیادی مقصد ہی یہی ہوتا ہے کہ وہ اپنے مقامِ آغاز کو چھپائیں۔ اس کے برعکس، COMEFROM کا مقصد ہی یہ ہوتا ہے کہ وہ واضح طور پر بتائے کہ وہ کہاں سے آیا ہے، اگرچہ جس جگہ سے کنٹرول منتقل ہو رہا ہے وہ اس حقیقت سے بے خبر ہوتا ہے۔

لہٰذا، کم فرام اور ایکسٹینشن ہینڈلنگ ایک دوسرے سے نہایت مختلف تصورات ہیں؛ اتنے مختلف کہ ان میں باہمی تبادلہ ممکن نہیں — آپ COMEFROM کو استعمال کرتے ہوئے ایکسٹینشن کا نفاذ ہرگز نہیں کر سکتے۔

 حوالہ جات 

 دیکھیں بھی 
 گو ٹو
 انٹر کال
 ایڈسگیر ڈیجکسٹرا
 ڈاٹا میشن

 بیرونی روابط 
 COMEFROM Information Page
 Datamation Article
 Joke Assembler Instruction List Including CMFRM
 comefrom support for Perl