लिस्प की जड़ें
Originalमई 2001
(मैंने इस लेख को अपने लिए यह समझने में मदद करने के लिए लिखा कि मैकार्थी ने वास्तव में क्या खोजा। आपको लिस्प में प्रोग्रामिंग करने के लिए इन चीजों को जानने की आवश्यकता नहीं है, लेकिन यह उन लोगों के लिए सहायक होना चाहिए जो लिस्प के सार को समझना चाहते हैं - इसके मूल और इसके अर्थात्मक केंद्र दोनों के संदर्भ में। इसका एक ऐसा केंद्र होना लिस्प की विशिष्ट विशेषताओं में से एक है, और यही कारण है कि, अन्य भाषाओं के विपरीत, लिस्प के बोलियाँ हैं।)
1960 में, जॉन मैकार्थी ने एक अद्भुत पेपर प्रकाशित किया जिसमें उन्होंने प्रोग्रामिंग के लिए कुछ ऐसा किया जैसा यूक्लिड ने ज्यामिति के लिए किया था। उन्होंने दिखाया कि, कुछ सरल ऑपरेटरों और कार्यों के लिए एक संकेतन दिए जाने पर, आप एक पूरी प्रोग्रामिंग भाषा बना सकते हैं। उन्होंने इस भाषा को लिस्प कहा, "सूची प्रसंस्करण" के लिए, क्योंकि उनके एक प्रमुख विचार था कि कोड और डेटा दोनों के लिए एक सरल डेटा संरचना सूची का उपयोग किया जाए।
यह समझना महत्वपूर्ण है कि मैकार्थी ने क्या खोजा, न केवल कंप्यूटर के इतिहास में एक मील का पत्थर के रूप में, बल्कि यह दिखाने के लिए कि प्रोग्रामिंग हमारे अपने समय में किस दिशा में बढ़ रही है। मुझे लगता है कि अब तक प्रोग्रामिंग के दो वास्तव में साफ, सुसंगत मॉडल रहे हैं: C मॉडल और लिस्प मॉडल। ये दोनों उच्च भूमि के बिंदु प्रतीत होते हैं, उनके बीच दलदली निम्न भूमि है। जैसे-जैसे कंप्यूटर अधिक शक्तिशाली होते गए हैं, नए विकसित हो रहे भाषाएँ लिस्प मॉडल की ओर लगातार बढ़ रही हैं। पिछले 20 वर्षों में नए प्रोग्रामिंग भाषाओं के लिए एक लोकप्रिय नुस्खा यह रहा है कि C मॉडल को लेकर उसमें धीरे-धीरे लिस्प मॉडल से लिए गए भागों को जोड़ा जाए, जैसे रनटाइम टाइपिंग और गार्बेज कलेक्शन।
इस लेख में मैं यह समझाने की कोशिश करूंगा कि मैकार्थी ने क्या खोजा। बिंदु केवल यह नहीं है कि किसी दिलचस्प सैद्धांतिक परिणाम के बारे में जानें जिसे किसी ने चालीस साल पहले निकाला था, बल्कि यह दिखाना है कि भाषाएँ किस दिशा में बढ़ रही हैं। लिस्प के बारे में असामान्य बात - वास्तव में, लिस्प की परिभाषित गुणवत्ता - यह है कि इसे अपने भीतर लिखा जा सकता है। यह समझने के लिए कि मैकार्थी का इस बारे में क्या मतलब था, हम उनके कदमों को फिर से चलेंगे, उनके गणितीय संकेतन को चल रहे कॉमन लिस्प कोड में अनुवादित करेंगे।