Loading...

लिस्प को अलग बनाया क्या

Original

दिसंबर 2001 (संशोधित मई 2002)

(यह लेख LL1 मेलिंग सूची पर कुछ प्रश्नों के जवाब में लिखा गया था। यह अब Revenge of the Nerds में शामिल है।)

जब मैकार्थी ने लिस्प को लेट 1950 के दशक में डिज़ाइन किया, तो यह मौजूदा भाषाओं, जिनमें से सबसे महत्वपूर्ण फोर्ट्रान था, से एक कट्टर विचलन था।

लिस्प में नौ नई विचारधाराएं शामिल थीं:

1. शर्तीय कथन। एक शर्तीय कथन एक यदि-तब-अन्यथा संरचना है। हम अब इन्हें स्वीकार करते हैं। मैकार्थी ने लिस्प को विकसित करते समय इन्हें आविष्कृत किया था। (उस समय फोर्ट्रान में केवल एक शर्तीय गो था, जो मूल हार्डवेयर में शाखा निर्देश पर आधारित था।) मैकार्थी, जो एल्गोल समिति में थे, ने एल्गोल में शर्तीय कथन डाले, जहां से वे अन्य भाषाओं में फैल गए।

2. एक कार्य प्रकार। लिस्प में, कार्य प्रथम श्रेणी के वस्तु हैं - वे पूर्णांक, स्ट्रिंग आदि के समान एक डेटा प्रकार हैं, और उनका एक सादृश्य प्रतिनिधित्व है, वे चरों में संग्रहीत किए जा सकते हैं, तर्क के रूप में पारित किए जा सकते हैं, और इत्यादि।

3. पुनर्कृत। पुनर्कृत गणितीय अवधारणा के रूप में लिस्प से पहले से मौजूद था, लेकिन लिस्प पहली प्रोग्रामिंग भाषा थी जिसने इसका समर्थन किया। (यह कार्यों को प्रथम श्रेणी के वस्तु बनाने में अंतर्निहित है।)

4. चरों की एक नई अवधारणा। लिस्प में, सभी चर प्रत्यक्षतः संकेतक हैं। मूल्य ही प्रकार वाले होते हैं, न कि चर, और चरों को असाइन या बाइंड करना मतलब है संकेतकों को कॉपी करना, न कि वे जिस पर इशारा करते हैं।

5. कचरा संग्रह।

6. अभिव्यक्तियों से बने कार्यक्रम। लिस्प कार्यक्रम अभिव्यक्तियों के पेड़ होते हैं, जिनमें से प्रत्येक एक मूल्य लौटाता है। (कुछ लिस्प में अभिव्यक्तियां एक से अधिक मूल्य लौटा सकती हैं।) यह फोर्ट्रान और अधिकांश उत्तरवर्ती भाषाओं से भिन्न है, जो अभिव्यक्तियों और कथनों के बीच अंतर करते हैं।

यह फोर्ट्रान में इस अंतर को रखना स्वाभाविक था क्योंकि (पंचकार्ड इनपुट प्रारूप में कोई आश्चर्य नहीं) भाषा पंक्ति-उन्मुख थी। आप कथनों को घुमा नहीं सकते थे। और इसलिए जबकि गणित के काम करने के लिए आप अभिव्यक्तियों की आवश्यकता थी, कुछ और भी मूल्य लौटाने का कोई मतलब नहीं था, क्योंकि उसका इंतजार करने वाला कुछ नहीं था।

यह सीमा ब्लॉक-संरचित भाषाओं के आगमन के साथ गायब हो गई, लेकिन तब तक बहुत देर हो चुकी थी। अभिव्यक्तियों और कथनों के बीच का अंतर प्रतिष्ठित हो चुका था। यह फोर्ट्रान से एल्गोल और उसके वंशजों में फैल गया।

जब एक भाषा पूरी तरह से अभिव्यक्तियों से बनी होती है, तो आप अभिव्यक्तियों को जैसा चाहें संयोजित कर सकते हैं। आप या तो कह सकते हैं (Arc वाक्यविन्यास का उपयोग करते हुए)

(if foo (= x 1) (= x 2))

या

(= x (if foo 1 2))

7. एक प्रतीक प्रकार। प्रतीक स्ट्रिंग से इस मामले में भिन्न हैं कि आप एक संकेतक की तुलना करके समानता की जांच कर सकते हैं।

8. कोड के लिए एक संकेत। पर्यवेक्षण के पेड़ का उपयोग करके।

9. हमेशा उपलब्ध पूरी भाषा। पठन-समय, संकलन-समय और रन-समय के बीच कोई वास्तविक अंतर नहीं है। आप पठन के दौरान कोड को संकलित या चलाया जा सकता है, संकलन के दौरान कोड को पढ़ा या चलाया जा सकता है, और रन-समय पर कोड को पढ़ा या संकलित किया जा सकता है।

पठन-समय पर कोड चलाना उपयोगकर्ताओं को लिस्प के वाक्य-विन्यास को पुनर्प्रोग्राम करने देता है; संकलन-समय पर कोड चलाना मैक्रो का आधार है; रन-समय पर संकलन करना लिस्प के एक्सटेंशन भाषा के रूप में उपयोग करने का आधार है; और रन-समय पर पठन एस-अभिव्यक्तियों का उपयोग करके कार्यक्रमों के बीच संचार करने की अवधारणा को सक्षम करता है, जिसे हाल ही में XML के रूप में पुनर्आविष्कृत किया गया है।

जब लिस्प पहली बार आविष्कृत किया गया था, तो ये सभी विचारधाराएं सामान्य प्रोग्रामिंग प्रथा से काफी दूर थीं, जो लेट 1950 के दशक में उपलब्ध हार्डवेयर द्वारा अधिकृत थी।

समय के साथ, एक उत्तरवर्ती लोकप्रिय भाषाओं में निहित मूल भाषा, लिस्प की ओर धीरे-धीरे विकसित हुई है। 1-5 अब व्यापक रूप से प्रचलित हैं। 6 मुख्यधारा में आना शुरू हो गया है। पायथन में 7 का एक रूप है, हालांकि इसके लिए कोई वाक्य-विन्यास नहीं लगता है। 8, जो (9 के साथ) लिस्प मैक्रो को संभव बनाता है, अभी भी लिस्प के लिए अद्वितीय है, शायद इसलिए कि (क) इसमें वे कोष्ठक हैं, या कुछ और भी बुरा, और (ख) यदि आप उस अंतिम वृद्धि की शक्ति को जोड़ते हैं, तो आप एक नई भाषा का आविष्कार करने का दावा नहीं कर सकते, बल्कि केवल लिस्प का एक नया वार्ता-लाप डिज़ाइन करने का।

वर्तमान समय के प्रोग्रामरों के लिए उपयोगी होने के बावजूद, लिस्प का वर्णन अन्य भाषाओं द्वारा अपनाए गए यादृच्छिक उपायों से भिन्नता के संदर्भ में करना विचित्र है। यह शायद नहीं था कि मैकार्थी ने इसे कैसे देखा होगा। लिस्प को फोर्ट्रान की गलतियों को ठीक करने के लिए डिज़ाइन नहीं किया गया था; यह अधिक गणना को एक्सियोमेटाइज़ करने के प्रयास का उपोत्पाद के रूप में आया था।