Intentional programming
کمپیوٹر پروگرامنگ میں، انٹینشنل پروگرامنگ ایک پروگرامنگ پیراڈائم ہے جسے چارلس سیمنی نے تیار کیا ہے جو سافٹ ویئر سورس کوڈ میں عین ارادے کو انکوڈ کرتا ہے جو پروگرامرز (یا صارفین) اپنے کام کا تصور کرتے وقت ذہن میں رکھتے ہیں۔ تجریدی کی مناسب سطح کا استعمال کرنے سے جس پر پروگرامر سوچ رہا ہے، کمپیوٹر پروگرام بنانا اور برقرار رکھنا آسان ہو جاتا ہے۔ ارادوں کے خدشات کو الگ کرنے اور ان پر کس طرح کام کیا جا رہا ہے، سافٹ ویئر زیادہ ماڈیولر ہو جاتا ہے اور زیادہ دوبارہ قابل استعمال سافٹ ویئر کوڈ کی اجازت دیتا ہے۔ انٹینشنل پروگرامنگ کو مائیکروسافٹ کے سابق چیف آرکیٹیکٹ چارلس سیمونئی نے تیار کیا تھا، جنہوں نے مائیکروسافٹ ریسرچ میں ایک ٹیم کی قیادت کی، جس نے نمونہ تیار کیا اور آئی پی (انٹینشنل پروگرامنگ کے لیے) نامی ایک مربوط ترقیاتی ماحول (آئی ڈی ای) بنایا جس نے نمونہ کا مظاہرہ کیا۔ مائیکروسافٹ نے ارادے سے پروگرامنگ کے نمونے کو تیار نہ کرنے کا فیصلہ کیا، کیونکہ 2000 کی دہائی کے اوائل میں مائیکروسافٹ جاوا کو اپنانے کا مقابلہ کرنے کے لیے C #اور. NET کو جاری کر رہا تھا۔ چارلس سیمونئی نے مائیکروسافٹ کی منظوری سے فیصلہ کیا کہ وہ اپنے خیال کو مائیکروسافٹ سے نکال کر خود اسے تجارتی بنائیں۔ انہوں نے اسے آگے بڑھانے کے لیے کمپنی انٹینشنل سافٹ ویئر کی بنیاد رکھی۔ مائیکروسافٹ نے انٹینشنل پروگرامنگ پیٹنٹ کا لائسنس دیا جو سیمونئی نے مائیکروسافٹ میں رہتے ہوئے حاصل کیا تھا، لیکن کوئی سورس کوڈ نہیں، انٹینشنل سافٹ ویئر کو۔ مائیکروسافٹ ریسرچ میں تیار کردہ انٹینشنل پروگرامنگ کا ایک جائزہ کتاب جنریٹو پروگرامنگ: میتھڈز، ٹولز اینڈ ایپلی کیشنز کے باب 11 میں دیا گیا ہے۔ ڈویلپمنٹ سائیکل جیسا کہ سیمونئی نے تصور کیا ہے، انٹینشنل پروگرامنگ پیراڈائم کے ذریعے ایک نئی ایپلی کیشن تیار کرنا مندرجہ ذیل ہے۔ ایک پروگرامر ڈبلیو وائی ایس آئی ڈبلیو وائی جی جیسا ماحول بناتا ہے جو کسی دشواری والے ڈومین (جیسے پیداواری ایپلی کیشنز یا لائف انشورنس) کے لیے اسکیما اور کاروباری علم کے اشارے کی حمایت کرتا ہے۔ اس کے بعد صارفین اس ماحول کو اپنے ارادوں کو پکڑنے کے لیے استعمال کرتے ہیں، جو اعلی سطح کے خلاصہ پر ریکارڈ کیے جاتے ہیں۔ ماحول ان ارادوں پر کام کر سکتا ہے اور صارف کو بامعنی طور پر بہتر دستاویزات بنانے میں مدد کر سکتا ہے جن پر اسپریڈشیٹ کی طرح کارروائی اور عمل کیا جا سکتا ہے۔ ریکارڈ شدہ علم ایک تشخیص کار کے ذریعہ انجام دیا جاتا ہے یا حتمی پروگرام تیار کرنے کے لیے مرتب کیا جاتا ہے۔ یکے بعد دیگرے تبدیلیاں صرف ڈبلیو وائی ایس آئی ڈبلیو وائی جی کی سطح پر کی جاتی ہیں۔ ورڈ پروسیسرز، اسپریڈشیٹس یا پریزنٹیشن سافٹ ویئر کے برعکس، ایک ارادی ماحول میں اظہار کیے جانے والے ارادوں کی ساخت اور الفاظ کے لیے زیادہ تعاون ہوتا ہے، اور انٹرایکٹو دستاویزات تشکیل دے سکتا ہے جو صارف جو حاصل کرنے کی کوشش کر رہا ہے اسے زیادہ بھرپور طریقے سے پکڑتا ہے۔ ایک خاص معاملہ تب ہوتا ہے جب مواد پروگرام کوڈ ہوتا ہے، اور ماحول ایک ذہین آئی ڈی ای بن جاتا ہے۔ سورس کوڈ اسٹوریج اور پریزنٹیشن کو الگ کرنا انٹینشنل پروگرامنگ کے فوائد کی کلید یہ ہے کہ ڈومین کوڈ جو ارادوں کو پکڑتا ہے وہ سورس کوڈ ٹیکسٹ فائلوں میں نہیں، بلکہ ٹری پر مبنی اسٹوریج میں محفوظ ہوتا ہے (بائنری یا ایکس ایم ایل ہو سکتا ہے)۔ اسٹوریج فارمیٹ کے ساتھ ماحول کا سخت انضمام ڈیٹا بیس کو معمول پر لانے کی کچھ اچھی خصوصیات کو سورس کوڈ میں لاتا ہے۔ ہر تعریف کو ایک منفرد شناخت دے کر، اور متغیرات اور آپریٹرز کے نام کو بالکل ایک جگہ پر محفوظ کرکے کٹوتی کو ختم کیا جاتا ہے۔ اس سے بیانات اور حوالوں میں اندرونی طور پر فرق کرنا آسان ہو جاتا ہے، اور ماحول انہیں مختلف انداز میں دکھا سکتا ہے۔ کسی پروگرام میں وائٹ اسپیس کو بھی سورس کوڈ کے حصے کے طور پر محفوظ نہیں کیا جاتا ہے، اور کسی پروجیکٹ پر کام کرنے والا ہر پروگرامر سورس کا انڈینٹیشن ڈسپلے منتخب کر سکتا ہے۔ مزید بنیاد پرست تصورات میں بیان کی فہرستوں کو گھونسلے والے خانوں کے طور پر دکھانا، مشروط تاثرات کو منطق کے دروازوں کے طور پر ترمیم کرنا، یا چینی زبان میں ناموں کو دوبارہ پیش کرنا شامل ہیں۔ یہ نظام سی + + اور جاوا جیسی مقبول زبانوں کے لیے ایک عام زبان کا استعمال کرتا ہے، جبکہ ماحول کے صارفین کو ایفل اور دیگر زبانوں کے خیالات کے ساتھ ملانے اور ان کا موازنہ کرنے دیتا ہے۔ اکثر ڈومین مخصوص زبانوں کے ذریعے زبان پر مبنی پروگرامنگ کے طور پر اسی تناظر میں ذکر کیا جاتا ہے، اور پہلو پر مبنی پروگرامنگ، آئی پی جنریٹو پروگرامنگ میں کچھ پیش رفت فراہم کرنے کا ارادہ رکھتی ہے۔ یہ تکنیکیں ڈویلپرز کو کسی بھی نئی زبانوں کے لیے مکمل مرتب اور ایڈیٹر لکھنے میں سرمایہ کاری کیے بغیر ڈومین مخصوص تعمیرات پر قبضہ کرنے کے لیے زبان کے ماحول کو بڑھانے کی اجازت دیتی ہیں۔ پروگرامنگ کی مثال ایک جاوا پروگرام جو 1 سے 10 تک کے نمبروں کو گھوبگھرالی بریکٹ کے نحو کا استعمال کرتے ہوئے لکھتا ہے، اس طرح نظر آسکتا ہے: کے لیے (انٹی i = 1 ؛ i <= 10 ؛ i + +) {System.out.println ("نمبر ہے" + i) ؛} اوپر دیے گئے کوڈ میں زیادہ تر پروگرامنگ زبانوں کی ایک مشترکہ تعمیر شامل ہے، باؤنڈڈ لوپ، اس صورت میں جس کی نمائندگی فار کنسٹرکٹ کرتا ہے۔ کوڈ، جب مرتب کیا جاتا ہے، لنک کیا جاتا ہے اور چلایا جاتا ہے، تو یہ 10 بار لوپ کرے گا، اسے پرنٹ کرنے کے بعد ہر بار i کی قیمت میں اضافہ کرے گا۔ لیکن یہ کوڈ پروگرامر کے ارادوں پر قبضہ نہیں کرتا، یعنی "1 سے 10 تک کے نمبروں کو پرنٹ کرنا"۔ اس سادہ سی صورت میں، کوڈ کو برقرار رکھنے کے لیے کہا گیا پروگرامر ممکنہ طور پر یہ جان سکتا ہے کہ اس کا کیا ارادہ ہے، لیکن یہ ہمیشہ اتنا آسان نہیں ہوتا ہے۔ بہت سی لائنوں، یا صفحات پر پھیلے لوپس کو سمجھنا بہت مشکل ہو سکتا ہے، خاص طور پر اگر اصل پروگرامر غیر واضح لیبل استعمال کرتا ہے۔ روایتی طور پر کوڈ کے ارادے کی نشاندہی کرنے کا واحد طریقہ سورس کوڈ کے تبصرے شامل کرنا تھا، لیکن اکثر تبصرے شامل نہیں کیے جاتے ہیں، یا غیر واضح ہوتے ہیں، یا اصل میں بیان کردہ سورس کوڈ کے ساتھ مطابقت پذیری سے باہر ہو جاتے ہیں۔ جان بوجھ کر پروگرامنگ کے نظام میں مندرجہ بالا لوپ کو کسی حد تک ظاہر کیا جا سکتا ہے، جیسا کہ "1 سے 10 تک کے نمبروں کو پرنٹ کریں"۔ اس کے بعد نظام ماخذ کوڈ تیار کرنے کے ارادوں کو استعمال کرے گا، ممکنہ طور پر اوپر کے کوڈ سے بہت ملتا جلتا ہے۔ کلیدی فرق یہ ہے کہ جان بوجھ کر پروگرامنگ سسٹم سیمنٹک سطح کو برقرار رکھتے ہیں، جس کا سورس کوڈ میں فقدان ہے، اور جو بڑے پروگراموں میں پڑھنے کی اہلیت کو ڈرامائی طور پر آسان بنا سکتا ہے۔ اگرچہ زیادہ تر زبانیں بعض قسم کی تجریدی کو پکڑنے کے لیے میکانزم پر مشتمل ہوتی ہیں، لیکن آئی پی، زبانوں کے لیسپ خاندان کی طرح، مکمل طور پر نئے میکانزم کے اضافے کی اجازت دیتا ہے۔ اس طرح، اگر کوئی ڈویلپر سی جیسی زبان سے شروعات کرتا ہے، تو وہ مرتب کرنے والے ڈویلپرز کے ان کو شامل کرنے کا انتظار کیے بغیر سی + + جیسی خصوصیات کے ساتھ زبان کو بڑھا سکے گا۔ مشابہت کے لحاظ سے، پروگرامرز محض کلاسوں اور طریقہ کار کے بجائے اظہار کے بہت سے زیادہ طاقتور طریقہ کار استعمال کر سکتے ہیں۔ شناخت آئی پی شناخت کے تصور پر مرکوز ہے۔ چونکہ زیادہ تر پروگرامنگ زبانیں ماخذ کوڈ کو سادہ متن کے طور پر پیش کرتی ہیں، اس لیے اشیاء کی تعریف ناموں سے کی جاتی ہے، اور ان کی انفرادیت کا اندازہ مرتب کرنے والے کو لگانا پڑتا ہے۔ مثال کے طور پر، ایک ہی علامتی نام مختلف متغیرات، طریقہ کار، یا یہاں تک کہ اقسام کے نام کے لیے استعمال کیا جا سکتا ہے۔ کوڈ میں جو کئی صفحات پر پھیلا ہوا ہے-یا، عالمی سطح پر نظر آنے والے ناموں کے لیے، متعدد فائلیں-یہ بتانا بہت مشکل ہو سکتا ہے کہ کون سی علامت اصل آبجیکٹ سے مراد ہے۔ اگر کوئی نام تبدیل کیا جاتا ہے، تو اس کوڈ کی جہاں اسے استعمال کیا جاتا ہے احتیاط سے جانچ پڑتال کی جانی چاہیے۔ اس کے برعکس، آئی پی سسٹم میں، تمام تعریفیں نہ صرف علامتی نام تفویض کرتی ہیں، بلکہ اشیاء کو منفرد نجی شناخت کار بھی تفویض کرتی ہیں۔ اس کا مطلب یہ ہے کہ آئی پی ڈویلپمنٹ ماحول میں، متغیر یا طریقہ کار کا ہر حوالہ صرف ایک نام نہیں ہے-یہ اصل وجود کا ایک لنک ہے۔ اس کا بڑا فائدہ یہ ہے کہ اگر کسی ادارے کا نام تبدیل کیا جاتا ہے، تو پروگرام میں اس کے تمام حوالہ جات درست رہتے ہیں (حوالہ جاتی سالمیت کے نام سے جانا جاتا ہے)۔ اس کا مطلب یہ بھی ہے کہ اگر ایک ہی نام مختلف نیم اسپیسز میں منفرد تعریفوں کے لیے استعمال کیا جاتا ہے (جیسے کہ ". to _ स्ट्रिंग ()")، تو ایک ہی نام کے لیکن مختلف شناخت والے حوالہ جات کا نام تبدیل نہیں کیا جائے گا، جیسا کہ بعض اوقات موجودہ ایڈیٹرز میں سرچ/ریپلیس کے ساتھ ہوتا ہے۔ یہ خصوصیت پروگرام کے کثیر لسانی ورژن رکھنا بھی آسان بناتی ہے۔ اس میں تمام تعریفوں کے لیے انگریزی زبان کے ناموں کا ایک مجموعہ اور ساتھ ہی جاپانی زبان کے ناموں کا ایک مجموعہ بھی ہو سکتا ہے جسے اپنی مرضی سے تبدیل کیا جا سکتا ہے۔ پروگرام میں ہر متعین شے کے لیے ایک منفرد شناخت ہونے سے خودکار ری فیکٹرنگ کے کاموں کو انجام دینے کے ساتھ ساتھ ورژننگ سسٹمز میں کوڈ چیک ان کو آسان بنانا بھی آسان ہو جاتا ہے۔ مثال کے طور پر، بہت سے موجودہ کوڈ تعاون کے نظام میں (جیسے. Git)، جب دو پروگرامر اس تنازعہ میں تبدیلیاں کرتے ہیں (یعنی۔ اگر ایک پروگرامر کسی فنکشن کا نام بدلتا ہے جبکہ دوسرا اس فنکشن کی لائنوں میں سے ایک کو تبدیل کرتا ہے)، تو ورژننگ سسٹم سوچے گا کہ ایک پروگرامر نے ایک نیا فنکشن بنایا ہے جبکہ دوسرے نے ایک پرانے فنکشن میں ترمیم کی ہے۔ آئی پی ورژننگ سسٹم میں، یہ معلوم ہوگا کہ ایک پروگرامر نے محض ایک نام تبدیل کیا جبکہ دوسرے نے کوڈ تبدیل کیا۔ تفصیل آئی پی سسٹمز کی سطحیں بھی تفصیل کی کئی سطحیں پیش کرتی ہیں، جو پروگرامر کو "زوم ان" یا آؤٹ کرنے کی اجازت دیتی ہیں۔ مندرجہ بالا مثال میں، پروگرامر ایک ایسی سطح حاصل کرنے کے لیے زوم آؤٹ کر سکتا ہے جو کچھ اس طرح کہے: <<نمبروں کو 1 سے 10 تک پرنٹ کریں>> اس طرح آئی پی سسٹم بڑی حد تک خود دستاویزی ہوتے ہیں، جس سے پروگرامر مجموعی طور پر پروگرام کی ایک اچھی اعلی سطحی تصویر رکھ سکتا ہے۔ اسی طرح کے کام ایسے منصوبے ہیں جو اعلی سطح کے خلاصہ کے ساتھ کوڈ بنانے کے لیے اسی طرح کے خیالات کا استحصال کرتے ہیں۔ ان میں شامل ہیں: تصور پروگرامنگ زبان پر مبنی پروگرامنگ (ایل او پی) ڈومین مخصوص زبان (ڈی ایس ایل) پروگرام کی تبدیلی سیمنٹک پر مبنی پروگرامنگ (ایس او پی) خواندہ پروگرامنگ ماڈل پر مبنی فن تعمیر (ایم ڈی اے) سافٹ ویئر فیکٹری میٹاپروگرامنگ لیسپ (پروگرامنگ زبان) بھی دیکھیں آٹومیٹک پروگرامنگ آبجیکٹ ڈیٹا بیس پروگرامنگ مظاہرے کے ذریعے آرٹیفاکٹور سیمنٹک ریزولوشن ٹری اسٹرکچر ایڈیٹر حوالہ جات بیرونی لنکس انٹینشنل سافٹ ویئر-چارلس سیمنی کی کمپنی دی ڈیتھ آف کمپیوٹر لینگویجز، دی برتھ آف انٹینشنل پروگرامنگ، چارلس سیمنی کی تکنیکی رپورٹ (1995) انٹینشنل پروگرامنگ-انوویشن ان دی لیگیسی ایج، چارلس سیمنی کی گفتگو (1996) Edge.org چارلس سیمنی کے ساتھ انٹرویو - جان بوجھ کر پروگرامنگ کے ٹولز کی عمومی کلاس پر مارٹن فاؤلر کا مضمون اس کی ایک مثال ہے۔ "کچھ بھی آپ کر سکتے ہیں، میں میٹا کر سکتا ہوں" منگل، 9 جنوری 2007، سکاٹ روزن برگ، ٹیکنالوجی کا جائزہ اس دن کا انتظار کر رہا ہے جب ہر کوئی سافٹ ویئر لکھتا ہے، دی نیویارک ٹائمز، 28 جنوری 2007 کیا پروگرامنگ خفیہ کاری کی ایک شکل ہے؟، چارلس سیمنی (2005) کے ذریعہ مناسب سطحوں کا خلاصہ، چارلس سیمنی (2005) کے ذریعہ پروگراموں کے معلومات کے مندرجات، چارلس سیمنی (2005) کے ذریعہ فیچر ایکس کو نقصان دہ سمجھا گیا، چارلس سیمنی (2005) کے نوٹیشنز اینڈ پروگرامنگ لینگویجز، چارلس سیمنی (2005) کے ذریعہ ڈویلپر سے ذاتی مشاہدات، مارک ایڈیل (2005) کے ذریعہ مائیکروسافٹ ریسرچ کا تعلیمی ویڈیو ان کے ارادے پروگرامنگ سسٹم (اے ایس) کو متعارف کراتا ہے۔