Loading...

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

Original

दिसंबर 2001 (रेव. मई 2002)

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

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

लिसप ने नौ नए विचारों को अपनाया:

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

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

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

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

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

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

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

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

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

(अगर फू (= x 1) (= x 2))

या

(= x (अगर फू 1 2))

7. एक प्रतीक प्रकार। प्रतीक स्ट्रिंग्स से अलग होते हैं कि आप एक पॉइंटर की तुलना करके समानता का परीक्षण कर सकते हैं।

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

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

पढ़ने के समय कोड चलाने से उपयोगकर्ता लिसप के सिंटैक्स को फिर से प्रोग्राम कर सकते हैं; संकलन समय पर कोड चलाना मैक्रोज़ का आधार है; रनटाइम पर संकलन करना लिसप के उपयोग का आधार है एक्सटेंशन भाषा के रूप में Emacs जैसे कार्यक्रमों में; और रनटाइम पर पढ़ना कार्यक्रमों को s-अभिव्यक्तियों का उपयोग करके संवाद करने में सक्षम बनाता है, एक विचार जिसे हाल ही में XML के रूप में फिर से बनाया गया है।

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

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

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