आम लिस्प की इन पुरानी आलोचनाओं में से कौन सी आज भी लागू होती है?


29

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

ये दो कथन हैं:

भाषा की बहुत सी लागतों को इस शर्त के साथ खारिज कर दिया गया कि 'कोई भी अच्छा संकलक' उनकी देखभाल कर सकता है। किसी ने अभी तक नहीं लिखा है - न ही जबरदस्त प्रयास के बिना होने की संभावना है - एक संकलक जो कि अपेक्षित चाल का एक अंश करता है।

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

COMMON LISP में फ्लोटिंग-पॉइंट अंकगणित पर थोड़ा बहुत नियंत्रण रखा गया था। और निश्चित रूप से, हालांकि एक अस्थायी-बिंदु-गहन कार्यक्रम का सही व्यवहार प्राप्त किया जा सकता है, प्रदर्शन में बेतहाशा भिन्नता हो सकती है।

जहां तक ​​मैं समझता हूं, ऐसा लगता है कि कॉमन लिस्प में कुशल संख्यात्मक कोड लिखना संभव है, लेकिन इसके मुकाबले अधिक चुनौतीपूर्ण है।

यह तीस साल पहले की बात है। यदि मैं सामान्य मुफ्त सॉफ्टवेयर कार्यान्वयन (सीएलआईएसपी, एसबीसीएल एट अल।) में से एक के लिए कॉमन लिस्प प्रोग्राम लिखने को तैयार हूं तो मुझे आज इन बयानों को कैसे मानना ​​चाहिए?


बड़ा अच्छा सवाल! इस विषय पर कॉमन लिस्प के बारे में किसी जानकार से सुनना पसंद करेंगे। मेरा डर है कि वे अभी भी लागू होते हैं, आजकल कॉमन लिस्प की स्पष्ट सापेक्ष लोकप्रियता के आधार पर।

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

2
दूसरी ओर, आधुनिक हार्डवेयर आम तौर पर IEEE फ़्लोटिंग पॉइंट को लागू करता है, इसलिए यह संभवतः 1984 में उपलब्ध कार्यान्वयन की तुलना में अपने व्यवहार में कहीं अधिक अनुमानित है।
microtherion

जवाबों:


31

कागज कई मायनों में दिलचस्प है।

सबसे दिलचस्प हिस्सा यह है: लेखकों ने 1984 से कागज को केवल दो साल बाद 1986 में खुद को गलत बताया। ब्रूक्स और गेब्रियल ने एक अत्यधिक अनुकूलन लिस्प संकलक विकसित किया और इसे कई वर्षों के लिए व्यावसायिक रूप से बहुत सफल बेचा: ल्यूसिड कॉमन लिस्प (पीडीएफ)।

इस लिस्प कंपाइलर के लिए रखरखाव अभी भी लिस्पवर्क्स से उपलब्ध है : इसे अब लिक्विड कॉमन लिस्प कहा जाता है ।

लिक्विड सीएल के कंपाइलर ऑप्टिमाइज़ेशन को एडवांस्ड यूजर गाइड के अध्याय 3 में दर्ज़ किया गया है : लिस्पिंग प्रोग्राम्स का अनुकूलन

ल्यूसिड सीएल में कई वाणिज्यिक अनुप्रयोगों को लिखा और तैनात किया गया है। उदाहरण के लिए मेरे गृह नगर में HVV (हैमबर्गर वेरकेशरबंड) के लिए पहली सार्वजनिक परिवहन सूचना प्रणाली को एक SUN SPARCstation पर ल्यूसिड सीएल का उपयोग करके तैनात किया गया था। यह बड़ी टच स्क्रीन और कॉल सेंटर का उपयोग करके ट्रेन स्टेशनों में जनता के लिए उपलब्ध था।

ल्यूसिड सीएल सफल रहा क्योंकि इसका उत्पादन मोड था कंपाइलर ने तेजी से कॉमन लिस्प एप्लिकेशन बनाए, जो मुख्य रूप से यूनिक्स / आरआईएससी प्लेटफार्मों के लिए थे।

ब्रूक्स और गेब्रियल 1986 में ल्यूसिड कॉमन लिस्प के बारे में लिख रहे हैं:

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

इस प्रकार उन्होंने सिर्फ वही लागू किया जो ए लिप्टिक ऑफ कॉमन लिस्प ने कठिन या असंभव होने का दावा किया था।

आजकल अधिक उन्नत कार्यान्वयन बहुत अधिक अनुकूलन कर रहे हैं, लेकिन हार्डवेयर भी 1000+ गुना तेजी से है जो हमने 1984 में किया था। एक वैक्स 11/780 में एक MIPS (प्रति सेकंड मिलियन निर्देश) और एक लिस्प मशीन भी थी वह सीमा। एक मोटोरोला 68000 की घड़ी की दर 8 मेगाहर्ट्ज थी।

फ़्लोटिंग पॉइंट प्रदर्शन और आमतौर पर अलग-अलग प्रदर्शन के बारे में आलोचना अभी भी मान्य है, लेकिन यह कार्यान्वयनकर्ताओं की पसंद को दर्शाता है। कुछ कार्यान्वयन उच्च-प्रदर्शन संकलक के रूप में विकसित नहीं होते हैं। उनका मुख्य ध्यान पोर्टेबिलिटी, कॉम्पैक्टनेस या कुछ और हो सकता है और इस तरह उनके पास अलग-अलग कार्यान्वयन लक्ष्य हैं।

एक उपयोगकर्ता / डेवलपर के रूप में किसी को पोर्टेबल कोड लिखने और सभी दस + वर्तमान में समर्थित कॉमन लिस्प सिस्टम का उपयोग करने के लिए मजबूर नहीं किया जाता है। कार्यान्वयन का उपयोग करें जो आवेदन की समस्या के लिए सबसे उपयुक्त है।


आपका उत्तर बहुत सटीक और विस्तृत है, यह निश्चित रूप से इनाम का हकदार है!
user40989

1
"अत्यधिक अनुकूलित" का मतलब यह नहीं है कि संकलक "पर्याप्त रूप से चतुर" है। "पर्याप्त रूप से चतुर" शब्द "किस उद्देश्य के लिए" प्रश्न उठाते हैं? अभी भी एप्लिकेशन (मुख्य रूप से बहुत सीमित एम्बेडेड प्लेटफार्मों के लिए) हैं जो आप कॉमन लिस्प में नहीं लिखेंगे क्योंकि अनुकूलन अभी भी डायनेमिक टाइपिंग, हीप आवंटन और कचरा संग्रह से सभी रन-टाइम ओवरहेड्स को समाप्त नहीं कर सकता है। बेशक कॉमन लिस्प किसी भी तरह से उस "असफल" में अद्वितीय नहीं है। कोई भी भाषा जंगली में नहीं देखी गई है जो वास्तव में पूरी तरह से सब कुछ के अनुकूल है।
स्टीव ३४

@ स्टीव 314: यूनीक्स वर्कस्टेशन और सर्वर पर ल्यूसिड सीएल लक्ष्य बड़े लिस्प-आधारित एआई सिस्टम, सीएडी सिस्टम आदि के लिए बाजार थे। ल्यूसिड सीएल लक्ष्य एम्बेडेड सिस्टम नहीं था। लुसिड सीएल गतिशील टाइपिंग, ढेर आवंटन और कई अन्य अनुकूलन क्षेत्रों के रन-टाइम ओवरहेड को संबोधित करता है - जिसमें एक प्रदर्शनकारी कचरा कलेक्टर भी शामिल है। फिर भी, जीसी की ज्यादातर जरूरत है। आमतौर पर एप्लिकेशन सहमति से बचने के लिए विशेष तकनीक का उपयोग करते हैं और इस तरह 'संसाधन' पूल की तरह, जीसी दर को कम करते हैं।
रेनर जोसविग

21

जब यह पेपर 1984 में लिखा गया था, 1 मेगाबाइट रैम वाला कंप्यूटर और 20 मेगाबाइट हार्ड ड्राइव, जो आपके डेस्क पर बैठने में सक्षम था, एक बड़ी बात थी। स्वाभाविक रूप से, एक भाषा की व्यावहारिकता पर विवाद उत्पन्न होंगे क्योंकि लिस्प उस हार्डवेयर पर उच्च-स्तरीय है। हार्डवेयर और कंपाइलर तकनीक दोनों में हुई प्रगति ने तब से लिस्प कार्यक्रमों को लिखने और निष्पादित करने में बहुत आसान बना दिया है, चाहे कोई भी संख्यात्मक अक्षमता हो जो भाषा में मौजूद हो।

प्रोग्रामिंग दक्षता के लिए प्रोग्रामर अक्सर कम्प्यूटेशनल दक्षता का व्यापार करते हैं। लिस्प एक धीमी भाषा हो सकती है (कुछ कार्यान्वयनों में, लेकिन अन्य भाषाओं में भी), लेकिन इसकी तेजी से विकास के लिए एक अच्छी-खासी प्रतिष्ठा भी है, और कई कार्यक्रमों में पर्याप्त प्रदर्शन का प्रदर्शन करने के लिए उच्च-अनुकूलित बुनियादी ढाँचे की आवश्यकता नहीं होती है।

लिस्प कार्यान्वयन का विकल्प आपके कार्यक्रमों के प्रदर्शन प्रोफ़ाइल को बहुत प्रभावित कर सकता है। उदाहरण के लिए, सीएलआईएसपी आसानी से स्वीकार करता है कि "यदि आपका कोड भारी संख्यात्मक है, तो आप CMUCL को पसंद कर सकते हैं।" कई आधुनिक लिस्प (और योजना) कार्यान्वयन आपको संख्यात्मक प्रकार के संकेत निर्दिष्ट करने की अनुमति देते हैं, जिससे संख्यात्मक प्रदर्शन में वृद्धि होगी।

संक्षेप में, स्थिति आज की तुलना में बहुत बेहतर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.