اصل آرٹیکل: http://www.winestockwebdesign.com/Essays/Lisp_Curse.html
لسپ ایک زحمت
رودلف وینسٹوک کی طرف سے
6 ، اکتوبر 2017 N.B. کو تازہ کاری کیا گیا : براہ کرم اسے ہیکرز نیوز کے لیئے جمع کرنا بند کردیں! اس مضمون کی تلاش کے لیئے ہیکر نیوز کو دیکھیں– پہلے اندراج کے لیئے نوٹ چیک کریں: ہر کوئی آجائے! چلیں ایک بار پھر مردہ گھوڑے کو شکست دیں! اگر آپ ہیکر نیوز ای کریڈٹ (e-credit)حاصل کرنا چاہتے ہیں تو اس کے بجائے ایٹرنل مین فریم The Eternal Mainframe جمع کرنے کی کوشش کریں-
یہ مضمون تاحال لسپ پروگرامنگ زبان (Lisp Programming Language) کی لسپ برادری کی صلاحیت کے ساتھ ہم آہنگ کرنے کی ابھی تک کسی دوسرے کی کوشش کہ وہ اپنا پہلا A1-Winter achievement دوبارہ پیدا کرسکے- بغیر کسی شک کے لسپ خیالات کا ایک موثر ذریعہ رہا ہے- اس حقیقت اور مختلف لسپ کی مشینوں کے معمار کی عقلمندی کے ساتھ اور ایک صدی کے بعد موجود لسپ کی حیات نو نے اس بات کا اظہار کیا ہے کہ اس کے حامیوں کی تنگ خیالی کا کوئی نہ کوئی جواز ضرور ہوگا- اگرچہ وہ اس قابل نہیں کہ لسپ کی اس طاقت کا ترجمہ ایک تحریک کو زیر کردینے والے زورحرکت کے طور پر کرسکیں۔
اس مضمون میں، میں نے اس بات کی دلیل دی ہے کہ لسپ کے وضاحتی طاقت اصل میں زور حرکت کی کمی کی وجہ سے ہے۔
لیسپ کی طاقت ہی اس کی بد ترین دشمن ہے۔
یہاں اس کو ثابت کرنے کے لیئے ایک سوچ کا تجربہ ہے۔ دو پروگرامنگ زبانوں کو لیجیئے، ان میں سے کوئی بھی مقصد کا تعین کرنے والا نہ ہو۔ آپ کا مشن اگر آپ کو قبول کرنے کا انتخاب ہوتا ہے تو انہیں انفرادی اعتراض کرنا ہے، اصل زبانوں کے ساتھ ان کی پسماندگی سے مطابقت رکھتے ہوئے کچھ کنارے کے معاملات کو ماڈیول کرتے ہیں۔ اس فکر کے تجربے میں کسی پروگرامنگ زبان کی جوڑی نے یہ کر دکھایا جائے کہ یہ کچھ زبانوں کے ساتھ دوسروں کے مقابلے میں آسان ہے۔ یہاں ایک چھوٹی سی مثال ہے : انٹرکال (Intercal) اور پیسکل (Pascal) –
اب یہ خیال اس تجربے کو مزید دلچسپ بناتا ہے: خیال کریں کہ C اور اسکیم پروگرامنگ زبان کے ساتھ مدنظر رخ کا تعین کریں- اسکیم پر مبنی منصوبہ سازی سوفومور (Sophomore) کے کام کی تقویض ہے- دوسری جانب Bjorne Stroustrup کے پروگرامنگ چاپس (Chops) میں اعتراض کرنے کی شناخت شامل کرنے کی ضرورت ہے۔
اس کے وصف اور کوشش کے پھیلاؤ کے نتائج کی وجہ لسپ کی زحمت کی صورت میں ہے۔
لسپ (Lisp) اتنی طاقتور ہے کہ وہ مسائل جو دوسرے پروگرامنگ زبان میں تکنیکی مسائل سمجھے جاتے ہیں وہ لسپ (Lisp) میں معاشرتی مسائل تصوّر کئیے جاتے ہیں۔
اسکیم کے کیس کو دوبارہ تصوّر کریں۔ مقصد کے تعیّن پر مبنی اسکیم بنانا اتنا آسان ہے کہ بہت سے اسکیم ہیکرز نے ایسا کردیا ہے۔ اس مقام پر زیادہ سے زیادہ انفرادی اسکیم ہیکرز نے ایسا کیا ہے- 1990 میں، یہ مقصد کے تعیّن کے تحت اس زبان کے لیئے گودام کے اصل فہرست کے زیرانتظام ہے۔ انتخاب کے اختلاف نے اکیلے اس بات کی ضمانت دی ہے کہ ان میں سے کوئی بھی ایک اعلیٰ معیار حاصل نہ کرسکا- اب یہ اتنا برا نہیں کہ کچھ اسکیم کے نفاذ کے پاس اپنے مقصد کے تعیّن کے لیئے سہولیات موجود ہیں۔ بہرحال، یہ حقیقت ہے کہ ایسے پیکچیز اپنے انفرادی حصول کے لیئے بہت سے مسائل کی جانب لے گئی جس کا ذکر اولن شیورز (Olin Shivers) نے اسکیم شیل (Scheme Shell scsh) کی دستاویزات میں لکھا تھا۔
انفرادی ہیکرز کی جانب سے لکھے گئے پروگرام نے نوچنے کھرونچنے کے ماڈل کی پیروی کی طرف مائل کیا ہے۔ یہ پروگرام ان مسائل سے متعلق ضروری حصّے، جو خود ہیکرز کو ہیں، سلجھا دے گے، اس طرح یہ پروگرامز دوسروں کے لئیے مزید مفید ہوجائے گا- اس کے علاوہ، یہ پروگرام واحد ہیکروں کے اپنے قائم کردہ سیٹ اپ پر کام کرتا ہے، لیکن شاید یہ دوسرے اسکیم کے نفاذ یا اسی اسکیم کے نفاذ کے لیئے دوسرے دوسرے پلیٹ فارم پر دستاویزات کی کمی کی وجہ سے نقل پزیر نہ ہوں- بنیادی طور پر یہ منصوبے ہیکرز کے کثیر فارغ اوقات میں کیئے گئے ہیں، اس لیئے یہ پروگرام اصل زندگی میں ہیکرز کی ذمہ داریوں میں دخلاندازی کو سہتے ہیں۔ جیسے اولن شیورز (Olin Shivers) نے اس بات کو بیان کیا ہے، جس کا مطلب ہے کہ یہ واحد شخصی منصوبہ اس پروگرام کے اسّی فیصد 80٪ مسائل کو حل کرسکتا ہے۔
ڈاکلٹر مارک ترور (Dr. Mark Terver) کے مضمون The Bipolar Lisp Programmer کے پاس اس رجحان کی ایک مناسب وضاحت ہے۔ وہ ان واحد لسپ ہیکرز وولف کے بارے میں لکھتے ہیں اور ان
چیزوں کو مناسب طریقے سے ختم کرنے میں ناکام- اس جملے “ڈیزائن کو دور پھینکو” BBM کے لیئے مناسب بنایا گیا ہے- اور یہ لسپ کمیونٹی سے آتا ہے- لسپ آپ کو آسانی سے چیزوں کو چاک کرنے کی اجازت دیتا ہےتاکہ وہ اسانی سے بند کر دیں- میں نے دس سال پہلے اس کو اس وقت دیکھا تھا جب میں اپنے لسپ کے لیئے GUI کی تلاش میں تھا- کوئی مسئلہ نہیں ، وہاں مختلف پیشکشیں تھیں- مصیبت یہ تھی کہ 9 میں سے کوئی بھی مناسب طریقے سے مستند نہیں کی گئی تھیں اور نہ بگ کے بغیر تھیں- بنیادی طور پر ہر شخص نے اپنا ہی حل لاگو کیا تھا اور اس کے لیئے کام کیا تو وہ ٹھیک تھا- یہ BBM کا روّیہ تھا؛ اس نے میرے لیئے کام کیا اور میں سمجھ گیا- اسے کسی کی مدد کی ضرورت نہیں اور کسی سے مدد مانگنے کی بھی نہیں-
ایک بار پھر، C پروگرامنگ زبان کے خیالی تجربے کی سوچ پر غور کریں- C آبجیکٹ (C Object) کے تعیّن کو بنانے میں مشکلات کی وجہ سے، صرف دو سنجیدہ کوششاس مسئلے کو کسی بھی سطح پر کھینچ لایا : C++ اور آبجیکٹیو-C ۔ آبجیلٹیو C سب سے زیادہ Macintosh پر مشہور ہے، جبکہ C++ ہر جگہ راج کرتا ہے- اس کا مطلب ہے کہ، دئیے گئے پلیٹ فارم پر، اس سوال کا جواب پہلے ہی دے دیا گیا ہے کہ کس مقصد کے حصول کے لئیے C کی توسیع کو استعمال کر سکتے ہیں۔ اس کا مطلب ہے کہ ان زبانوں کے مقصد کے تعیّن کی سہولیات دستاویز کی گئی ہیں، جن کو معلوم ہے کہ یہ تروی کے ماحول میں ضم ہوجاتا ہے، وہ کوڈ لائبریریز ان کے ساتھ ہم آہنگ ہیں اور مزید آگے بھی ہوںگے۔
ڈاکٹر مارک ترور کا Bipolar Lispers پر مضمون اس نکتہ کو بناتا ہے:
اب معاہدے میں، CC نقطہ نظر بالکل مختلف ہے- حقیقی کامیابی حاصل کرنے کے لیئے موچنا(Tweezers) اور گلو(glue) سے کام کرنا بہت ہی مشکل ہو جائےگا- اپ اسے دستاویز کرنا چاہتے ہیں- کسی C منصوبے کی اہم سائز میں مدد کی ضرورت پر آپ ذمہ دار نہیں ہیں- تو آپ سماجی اور دوسروں کے ساتھ کام کرنے کے ذمہ دار ہیں- آپ کے لیئے کچھ حاصل کرنے کی ضرورت ہے جو آجر کے نقطہ نظر سے پرکشش ہو- دس لوگ جو بات کرتے ہیں، بہتر طریقے سے چیزوں کی دستاویز کریں اور ایک BBM کے لیئے بہتر اور افضل ہیکینگ ہے، پس جو صرف ایک اور BBM کی طرف سے کیا جاسکتا ہے- (اگرآپ حاصل کرسکتے ہیں)اس واقعہ کا امکان نہیں کہ وہ کچھ دیر بعد بغیر بوٹ(Boot) ہوئے نیچے چلاجائے گا۔
پس جو لوگ پہلے سے ہی C کو جانتے ہیں وہ یہ سوال نہ پوچھیں کہ “کونسا آبجیکٹ سسٹم ان کو سیکھنا چاہیئے؟” اس کے بجائے وہ ++C یا آبجیکٹیو Objective C) C) استعمال کرتے ہیں اس بات پر منحصر کہ ان کے ساتھی استعمال کرتے ہیں اور پھر آگے بڑھتے ہیں کہ “میں کس طرح مقصد کے تعیّن کے لیئے فیچر Feature X) X) استعمال کروں؟” جواب: “گوگل کریں اور اسے پایئں-”
حقیقی ہیکرز کو بلاشبہ طور پر، اس بات کا اندازہ ہے کہ یہ طویل التوجہ مقصد کا تعیّن نہیں جس کا اس کے حامیوں نے دعویٰ کیا ہے- حقیقی ہیکرز اعلیٰ، تصورات کی جانب بڑھ گئے ہیں۔ جیسے کہ ناقابل تغیّر معلوماتی ساخت، مثالی مداخلت، سست تشخیص، واحدیت تیر، نمونوں کا جوڑ، رکاوٹ پر مبنی پروگرامنگ اور اس سے بھی آگے- حقیقی ہیکرز نے، کچھ لمحوں کے لیئے یہ بھی جاننا کہ C اور ++C کچھ پروگرام کے لیئے بہتر ہے کہ خودمختار نہ ہوں- اگر لسپ کی زحمت اب بھی پکڑ رکھتی ہے۔
کچھ خوش لسپ کے محبت کرنے والوں نے موجودہ تعلیمی زبانوں کی پیداوار کا سروے کیا (Haskell, Ocaml, etcetera) اور پتہ چلا کہ وہ یہ کہتا چاہتے ہیں کہ کوئی خصوصیت جو وہ چایتے تھے پہلے سے لسپ میں موجود ہیں یا آسانی سے اس پر نافذ کی جاسکتی ہے ـــ اور بہتر بنائی جاسکتی ہے ـــــ لسپ مکروز کے ساتھ یہ شاید بالکل ٹھیک ہے۔
لسپ ہیکرز پر افسوس ہے۔
ڈاکٹر مارک ترور (Dr. Mark Tarver) نے مندرجہ بالا میں بارہا اقتباس کیا ہے کہ لسپ کی بولی Qi کہلائی جاتی ہے۔ یہ C لسپ کے اوپر بھاگئی دس ہزار مکروز کی لائنوں سے بھی کم ہے۔ یہ Haskell اور Ocaml کی زیادہ ترمنفرد خصوصیات کو نافذ کرتی ہے۔ کچھ حوالے سے Qi ان سب پر سبقت لے گیا۔ مثال کے طور پر Qi’s کے تخمینے کے انجن نے مکمل طور پر پانسہ ہی پلٹ دیا۔ دنیا میں جہاں اس وقت صفاتی لائق ٹیموں نے Haskell کو یہ لکھنے کی ضرورت محسوس کی وہاں ڈاکٹر ترور (Dr. Tarver) نے پوری Qi اکیلے لکھ ڈالی ۔
اس پیراگراف کو دوبارہ پڑھیں اور پھر اندازہ لگائیے۔
پڑھنے والوں کے لیئے مشق: خیال کریں کہ Haskell اور عام لسپ کے درمیان مضبوط دشمنی قائم ہوجائے- تو پھر کیا ہوگا؟
جواب: لسپ کی زحمت ٹھوکر مار کر داخل ہوگئی- ہو دوسرا یا تیسرا لسپ ہیکتراپنے سست تشخیص، پاکیزہ افعال، تیر، طریقہ کار کے جوڑ ملاتا، مختلف خلاصے اور آرام کے ساتھ اپنا عمل درآمد کرے گا – ان منصوبوں میں سے زیادہ تر فرد واحد (lone-wolf) آپریشن ہونگے – پس ان کے پاس اسّی فیصد 80% خصوصیات ہیں جو زیادہ تر لوگوں کی ضرورت ہے۔ (ہر صورت میں 80% مختلف)- وہ بری طرح سے دستاویز کرنے لگے۔ وہ لسپ نظام میں نقل پزیر نہیں ہوگے۔ ترک کرنے سے پہلے کچھ عظیم وعدے بھی دکھائے جائے گے۔ جبکہ اس منصوبے کو برقرار رکھنے والے اپنے بلوں کو ادا کرنے کے لیئے چلے جائیں گے۔ بہت سے Haskell کو مختلف زاویّوں سے چلست دینے کی کرے گے- (دوبارہ سے مختلف صورت میں مختلف طریقوں سے) لیکن comp.lang.lisp Usenet گروپ پر شعلہ انگیز جنگوں کی طرف سے ان کی قبولیت کو روک دیا جائے گا۔
آخری معرکہ: اتفاقاً پرانے لسپ ہیکرز کا مکروز کا مجموعہ ناقابل دستاویز، غیر نقل پزیر، نقص کے ساتھ ناقابل اعتماد Haskell کے 80% پر عملدرآمد ہوں کیونکہ لسپ Haskell سے کہیں زیادہ طاقتورہے –
اس کہانی کا سبق یہ ہے کہ ثانوی اور تیسرے درجے کے اثرات کا معاملہ ہے – ٹیکنالوجی صرف اس پر اثرانداز نہیں کرتی ہے کہ ہم تکنیکی مسائل کے بارے میں کیا کر سکتے ہیں جو ہمارے سماجی رویّے کو بھیہ اثرانداز کرتی ہے – یہ سماجی روّیہ غور کے تحت تکنیکی مسائل کو واپس لوٹ کر متاثر کر سکتا ہے –
لسپ اس سبق کا ایک دردناک قصیح مثال ہے – لسپ اس قدر طاقتور ہے کہ یہ انفرادی آزادی کے خونی ذہن کے نکتہ نظر کو فروغ دیتا ہے- اس آزادی نے لسپ مشین کے دنوں میں شاندار جدّت پیدا کی ہے- یہ آزادی بھی لسپ کے پرانے نظام کو بحال کرنے کوشش کو روک دیتا ہے- “لسپ OS ” منصوبے نے علامتی اور LMI کے انتقال کے بعد سے بڑے اہم پیمانے پر جمع ہوا ہے-
ان ثانوی اور سوئمی اثرات کا ایک نتیجہ یہ یے کہ اگرچہ لسپ لسپ سب سے زیادو اظہار زبان ہے- اس طرھ کہ نظریاتی طور پر زیادہ غیر معمولی زبان بنانے کے لیئے ناممکن ہے، لسپرز کو اب بھی دوسرے پروگراموں کی زبانوں سے سیکھنا ہوگا- Smalltalk لڑکوں نے سب کو سیکھا دیا ــــــ لسپ ہیکرز سمیت ــــــ مقصد کے تعیّن پر مبنی پروگرامنگ کے ایک یا دو چیزیں- ایک صاف پروگرامنگ زبان اور موزارٹ/ اوز (Mozart/Oz) کے طومار کو بھی اپنے آپ میں کچھ حیرت ہوگی۔
لسپ کی زحمت کا استانسلوف داٹسکوفسکی ( Stanislav Datskovisky) کے اصول سے تضّاد نہیں: آخر زیادہ تر اس بات کو ترجیح دیتے ہیں کہ کارکن بہترین طریقے سے پیداواری ہونے کے بجائے قابل تبادلہ ہوں۔ بالکل سچ – بڑی مشکل سے کسی نے انتظامی طیفہ کی زرپرستی کی عمودی بنادی۔ تاہم اس مضمون کی آخری سطریں مسائل کی حامل ہیں – باخبر ہونے کے لیئے:
“مفت سافٹ وئیر” کی دنیا کے طور پر یہ باہمی طور پر بیان میں صنعتی dogmas کی مخالفت کرتا ہے لیکن تمام عمل میں نہیں ہے- کیوبا کے فارم ہیل کی طرف سے ختم ہونے والا کوئی تصوّر کسی بھی شوقیہ عوام کے درمیان حقیقی کرشن حاصل نہیں کرسکا۔
زیریں حاشیہ میں وہ لنکس (Linux) کو مختلف نظریات کا پیچھا کرنے کے اس غیر رضامندی طریقے کی ایک مثال کے طور پر پیش کرتا ہے- یقیناً اس کے پاس نکتہ ہے- آپریٹنگ سسٹم (Operating System) پر آتی ہے(خاص کر، اشتعال انگیز کند ذہن کے لیئے بالاتررائے) اس کے پاس کوئی جواز نیہیں جب پروگرامنگ کی زبان پر بات آئے- Python اور Ruby بھی لسپ سے متاثر تھے- ان کے بہت سے مداح نے لسپ کے لیئے احترام کا اظہار کیا ہے اور ان کے کچھ مفادات میں لسپ کے دورترقی میں اضافے ہوئے- انصاف کے ساتھجاوا اسکرپٹ (JavaScript) کو اس طرح بیان کیا گیا ہے کہ “C’s کی پوشاک میں اسکیم ” بجائے اس بات کے آغاز سے جو کیوب فارم حیل ہے۔
اس کے باوجود یہ دونوں کارپوریٹ میں اثرورسوخ اور کھلے سورس عالم میں ہونے کے باوجود لسپ ابھی تک صرف ایک کسر کے ڈویلیپر ذہن کا حصّہ ہے جو اعلیٰ اسکرپٹنگ زبانوں کی موجودہ صورت ہے۔ اس نے اپنی طرف متوجّہ کیا ہے۔ ایم بی اے کے قریبی نظر والے اس کے لیئے صرف وضاحت نہیں ہوسکتے – لسپ کی زحمت کے پاس وضاحت کی زیادہ طاقت ہے۔
مزید یہ کہ لسپ کی زحمت کے مفت ترقی کے ماحول کی دستیابی نے اسے وضاحت کے قابل بنادیا-
اس کی نشاندہی کرنا شرمناک ہے۔ لیکن اسے کرنا ہی پڑے گا۔ لسپ مشین کے بارے میں بھول جائیں : یہاں تک کہ ہمارے پاس ترقی کا نظام موجود نہیں جو اوسطً Smalltalk ہیکرز کے پاس ہے۔ (“میں نے ہمیشہ یہ محسوس کیا ہے کہ لسپ ایک اعلیٰ زبان ہے اور Smalltalk ایک اعلیٰ ماحول” – رامن لیون (Ramon Leon
یہاں تک کہ وہ ہزاروں ڈالرز دیتے ہیں، لسپ ہیکرز اب تک Emacs کے ساتھ پھنسے ہوئے ہیں۔
جیمس گوسلنگ(James Gosling) جو کہ پہلی Emacs جو کہ یونیکس (Unix) سے چلتی ہے کہ لکھنے والے، نے بالکل ٹھیک اشارہ کیا ہے کہ Emacs بنیادی طور پر بیس سال میں تبدیل نہیں ہوا ہے- یہ اس لیئے ہے کیونکہ Emacs کے محافظ (Maintainers) اب تک اس ڈیزائن کے چوٹی کے کوڈ کی تہہ کر رہے ہیں جب Emacs کا منصوبہ MTI AI lab مین فارغ التحصیل ظالب علم تھا- یہ کہ Emacs کی ترقی اب بھی بالواسظہ طور پر قومی قرض سے خانقاہی ہو رہی تھی- ایک Slashdotter شاید اعتراض کرسکتا ہےکہ Emacs پہلے ہی سے کافی صلاحیت رکھتا ہے اور کچھ بھی کرسکتا ہے جو کہ کوئی دوسرا ترقی کے ماحول میں کرسکتا ہے ورنہ وہ جنہوں نے لسپ مشین استعمال کی ہیں کچھ بھی کہہ سکتے ہیں-
تو کیوں لسپ ہیکرز نے Smalltalk لڑکوں کو ان کا مناسب مقام پیش نہیں کیا؟ وہ کیوں ایک مفت ترقی کا نظام نہیں بناتے جو کہ ذہن کو LispM کی پرانی یادیں دیں یہاں تک کہ اگر وہ کسی دوسرے LispM کو دوبارہ پیش نہیں کرسکتے؟
ایسا نہ ہونے کی وجہ لسپ کی زحمت ہے- لسپ ہیکرز کی ایک بڑی تعداد کو ایک دوسرے سے تعاون کرنا پڑے گا- بڑی تعداد میں لوگ جو لسپ ہیکرز بن جاتے ہیں ان کو ایک دوسرے کے ساتھ تعاون کرنا پڑے گا- اور انہیں ایک ایسے ڈیزائن پر ایک دوسرے کے ساتھ تعاون کرنا ہوگا جو آغاز سے پہلے ہی نہیں دیا گیا تھا۔ اور وہاں کوئی۔ بیرونی نظم و ضبط نہیں ہوگا، جیسے وینچرسرمایہ دار یا دیگر کارپوریٹ ماسٹر، جو انہیں ٹریک پر رکھ سکیں۔
ہر پروجیکٹ کے ارکان۔ اختلافات، طرز اور فلسفے کے خلاف تنازعہ کے درمیان، ایف آئی آر کا تعلق ہے- ان سماجی مسائل کے خلاف اس حقیقت پرکہ اس کا کوئی بڑا منصوبہ دوسری صورت میں مکمل نہیں کیا جاسکتا، کاروائی کی جاتی ہے- “ہم سب کو مل کر پھانسی لگے گی یا پھر ہم الگ الگ پھانسی پر چڑھے گے”- لیکن لسپ کی وضاحت تلافی کرنے کے زور کو کمزور کردیتا ہے، اس لیئے کوئی بھی اپنے لیئے منصوبے شروع کرسکتے ہیں- اس طرح انفرادی ہیکرز یہ فیصلہ کر سکتے ہیں کہ یہ مصیبت کسی قابل نہیں۔ اس لیئے یا تو وہ اس منصوبے کو ترک کردیتے ہیں یا منصوبے کے آغاز ہونے میں شامل نہیں ہوتے- یہ ہے لسپ کی زحمت-
کوئی بھی کچھ نہ کچھ کرنے کے لیئے Emacs کو ہیک کرسکتے ہیں- اس طرح لسپ کی زحمت بدتر سے بہتر کا اتحادی ہے-
لسپ کی تخلیقاتی قوّت کے کچھ خامیاں بھی ہیں – ایسا کچھ نہیں کہ دوپہر کا کھانا مفت کا ہے-
اس مضمون نے ماہانہ ہیکر کے تیرہویں مسئلے کو ماہانہ فرنٹ صفحہ کا بنادیا-