लिस्प अधिक व्यापक क्यों नहीं है? [बन्द है]


50

मैं SICP वीडियो द्वारा योजना सीखना शुरू कर रहा हूं, और मैं अगले कॉमन लिस्प में जाना चाहूंगा।

यह भाषा बहुत ही रोचक लगती है, और अधिकांश लोग इस पर किताबें लिखते हैं, जिसमें कहा गया है कि इसमें अप्रतिम अभिव्यंजक शक्ति है। सीएल एक मानक पुस्तकालय है लगता है।

लिस्प अधिक व्यापक क्यों नहीं है? यदि यह वास्तव में शक्तिशाली है, तो लोगों को इसका इस्तेमाल करना चाहिए, लेकिन इसके बजाय, लिस्प जॉब के विज्ञापनों को ढूंढना लगभग असंभव है।

मुझे आशा है कि यह सिर्फ कोष्ठक नहीं है, क्योंकि वे थोड़ी देर के बाद एक बड़ी समस्या नहीं हैं।



5
स्टील बैंक (आम) एलआईएसपी वास्तव में अधिक लोकप्रिय है जितना आप कल्पना कर सकते हैं। LISP जैसे मैक्रो प्रोसेसर (जैसे M4) का भी व्यापक रूप से उपयोग किया जाता है। आप इसे अपनी पसंद के डोमेन में नहीं देख सकते हैं, लेकिन यह अभी भी वहाँ है (बेहतर या बदतर के लिए)।
टिम पोस्ट

8
हाल ही में आए भूकंप और सुनामी ने जापान में कोष्ठक के कारखाने का सफाया कर दिया। :-(
ओस्टरवाल

1
लिस्प का कौन सा संस्करण हमें उपयोग करना चाहिए? याद रखें लिस्प बोलियाँ कमोबेश असंगत हैं।

2
लिस्प (या की बोलियों) हर जगह उपयोग किया जाता है जैसे औटोलिस्प ऑटोकैड द्वारा प्रयोग किया जाता लिस्प की एक बोली है en.wikipedia.org/wiki/AutoLISP या Emacs en.wikipedia.org/wiki/Emacs_Lisp
Jaydee

जवाबों:


68

स्पष्टता हमेशा कॉर्पोरेट वातावरण में एक सकारात्मक भाषा विशेषता नहीं होती है। जावा आंशिक रूप से बेहद लोकप्रिय है क्योंकि इसका सीखना आसान है, लिखना आसान है और पढ़ना आसान है। Mediocre प्रोग्रामर अभी भी जावा में बहुत उत्पादक हो सकते हैं, भले ही उनका कोड वर्डी और असभ्य हो।

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

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

यहां तक ​​कि एक अधिक शक्तिशाली भाषा का उपयोग करने के लिए तैयार प्रगतिशील कंपनियां आमतौर पर एलआईएसपी का चयन नहीं करती हैं। इसका कारण यह है कि कई नई भाषाएं LISP से शक्तिशाली सुविधाओं को उधार लेकर प्रयास करती हैं और आम जनता के लिए सीखने में आसान रहती हैं। स्काला और रूबी इस मॉडल का पालन करती हैं। खराब प्रोग्रामर उन्हें जल्दी से उठा सकते हैं और उसी औसत दर्जे का कोड लिखते रहते हैं जो उन्होंने जावा में किया था। अच्छे प्रोग्रामर सुंदर कोड लिखने के लिए अधिक उन्नत सुविधाओं का लाभ उठा सकते हैं।

कोष्ठक समस्या नहीं हैं। हास्केल एक अविश्वसनीय रूप से शक्तिशाली और अभिव्यंजक भाषा है जो अजगर या रूबी के समान एक वाक्यविन्यास के साथ है और इसे LISP जैसे कई कारणों से व्यापक रूप से नहीं अपनाया गया है।

इस सब के बावजूद, मैं उम्मीद कर रहा हूँ ...

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

* यह जावा, क्लोजर, जेरी, और स्काला में अनुभव के साथ एक पेशेवर जेवीएम प्रोग्रामर के रूप में मेरा दृष्टिकोण है।


24
योग्य प्रोग्रामर को खोजने में कठिनाई के बारे में आपत्ति है कि एक कुत्ता अपनी पूंछ का पीछा कर रहा है। यदि लिस्प अधिक व्यापक था, तो अच्छे प्रोग्रामर ढूंढना आसान होगा।
एंड्रिया

2
@ और यह निश्चित रूप से सच है। हालांकि, लिस्प सीखना कठिन है, जो समस्या में भी योगदान देता है। मुझे लगता है कि एक विवादास्पद राय हो सकती है, क्योंकि कई प्रोफेसर पहली भाषा के रूप में योजना सिखाते हैं।
dbyrne

8
हां, एपीएल एक अभिव्यंजक भाषा का एक उत्कृष्ट उदाहरण है। इसके अलावा, अभिव्यक्ति का एक सबसे अच्छा उदाहरण सबसे महत्वपूर्ण बात क्यों नहीं है?)
dbyrne

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

3
मुझे लगता है कि शायद मैं किसी ऐसे व्यक्ति के रूप में आ रहा हूं जिसे लिस्प पसंद नहीं है। सच में, मैं इसे प्यार करता हूँ। क्लोजर एक अविश्वसनीय भाषा है। मुझे लगता है कि इसका उपयोग करने के लिए एक निश्चित प्रकार की कंपनी के लिए एक बहुत व्यवहार्य विकल्प है। मैं सिर्फ इशारा कर रहा हूं कि बहुत सारी कंपनियां हैं जहां यह समझ में नहीं आता है, और स्काला जैसी चीज का उपयोग करना अधिक व्यावहारिक विकल्प है।
dbyrne

17

लिस्प अधिक व्यापक क्यों नहीं है? यदि यह वास्तव में शक्तिशाली है, तो लोगों को इसका उपयोग करना चाहिए,

यदि आप मानते हैं कि भाषाओं को उनकी तकनीकी खूबियों के लिए चुना जाता है, तो आप एक आत्मा-कुचल निराशा के लिए हैं।

ऐसे निर्णय स्ट्रिपर्स और स्टेक के आधार पर किए जाते हैं । माइक्रोसॉफ्ट उन्हें बर्दाश्त कर सकता है। Oracle कर सकते हैं। सन ने जावा को हाइप करने में इतना पैसा खर्च किया कि वे दिवालिया हो गए। दो बार। एक विकेन्द्रीकृत, विषमलैंगिक, स्वयंसेवक समुदाय उसका मुकाबला नहीं कर सकता।

लेकिन इसके बजाय, लिस्प जॉब विज्ञापनों को ढूंढना लगभग असंभव है।

पर्याप्त रूप से पर्याप्त, लिस्प कंपनियां ठीक इसके विपरीत कहती हैं: उनके पास लगातार नौकरी के उद्घाटन हैं, लेकिन उन्हें भरने के लिए पर्याप्त लोग नहीं मिल सकते हैं। (यही बात हास्केल, एमएल, ओ'कमल, फोर्थ, स्मॉलटाक, ... पर लागू होती है)


3
जहाँ मैं रहता हूँ (इटली) मुझे शक है कि एक भी लिस्प कंपनी मौजूद है ...
एंड्रिया

1
रूबी, पायथन और जावास्क्रिप्ट को कौन सी बड़ी कंपनियां आगे बढ़ा रही हैं? JS एक विशेष रूप से एक विशेष मामला है, लेकिन अन्य दो बड़े पैमाने पर कॉर्पोरेट / वेंडर के समर्थन के बिना बहुत लोकप्रिय हैं
बेन ह्यूजेस

हाँ, यह अन्य भाषाओं के लिए भी सही है। अधिकांश अच्छे COBOL कोडर्स में पहले से ही नौकरी है, और वैसे भी विज्ञापन नहीं पढ़ रहे हैं। विज्ञापन क्यों परेशान करते हैं?
बो पर्सन

क्या वास्तव में? मैं किसी भी भाषा में कोड करूँगा, मुख्यधारा नहीं, हालांकि हास्केल मेरे सिर पर लगता है। मेरे द्वारा कोड किए गए कोड की छोटी मात्रा बेहद ही सराहनीय है, लेकिन एक अच्छे संरक्षक के बिना मुझे पता नहीं है कि प्रत्येक मोनाड और एपेक्टिव फ़ंक्शंस का उपयोग कब करना है।
aoeu256

9

मुझे वास्तविक कंपनी के लिए काम करने का कोई अनुभव नहीं है, लेकिन मुझे पता है कि एलआईएसपी का उपयोग करना मेरे लिए कठिन क्यों रहा है।

सबसे पहले, यह मुझे इस ब्लॉग पोस्ट की याद दिलाता है: http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html

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

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

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

मुझे कमांड लाइन के तर्कों को एक्सेस करने की आवश्यकता है। फिर मुझे पता है कि कमांड लाइन तर्क प्राप्त करने का कोई मानक तरीका नहीं है। वे सभी गैर-मानक सुविधाएँ हैं। यह बिल्कुल भी प्लेटफॉर्म नहीं है। यह ज्यादातर सिर्फ वहां से भी बदतर हो जाता है क्योंकि भाषा में बहुत सारे पुस्तकालय नहीं होते हैं। मैंने हास्केल पर स्विच करना समाप्त कर दिया और कॉमन लिस्प में बहुत दूर नहीं गया (इसलिए मेरी शिकायतें भी मान्य नहीं हो सकती हैं)।

इस तरह की गैर-मानक चीज हमेशा मेरे लिए अतीत में एक पीड़ा रही है। C ++ में भी यही समस्या है, लेकिन बूस्ट जैसी लाइब्रेरियों के साथ आप उन कमजोरियों के आसपास पहुँच सकते हैं।

यह भी मदद नहीं करता है कि एस-एक्सप्रेशन के अलावा हर चीज के लिए लिस्प सिंटैक्स थोड़ा बदसूरत है।


1
पीएलटी रैकेट (पूर्व में पीएलटी योजना) लिनक्स और विंडोज दोनों पर अच्छा चलता है।
लैरी कोलमैन

दिलचस्प है, मुझे उम्मीद है कि आम लिस्प योजना के मुकाबले वास्तविक अनुप्रयोगों के लिए बहुत अधिक मानक और उपयोगी होगा। (मैं अभी प्रैक्टिकल कॉमन लिस्प पढ़ रहा हूं।)
जियोर्जियो

हास्केल (जो मेरी राय में एक बेहतर भाषा है) चुनने के लिए मैं आपकी सराहना करता हूं, लेकिन क्लोजर के बारे में क्या? यह जेवीएम पर चलता है, इसलिए यह पोर्टेबल होना चाहिए और आपकी ज़रूरत के सभी पुस्तकालयों तक पहुंच होनी चाहिए।
एंड्रेस एफ।

कमांड लाइन तर्क सी ++ में उपयोग करना मुश्किल है? वास्तव में?
निक किली

क्या यह क्रॉस-कॉम्प्लिमेंट बनाने के लिए तुच्छ नहीं है जो लिस्प को स्कीम में बदल देता है? लोग उनका उपयोग क्यों नहीं करते?
aoeu256

8

IMO, यह ज्यादातर इस वजह से है:

  • गरीब पुस्तकालय समर्थन करते हैं। ज़रूर, अब क्विकलाइस्प है, जो पुस्तकालयों को स्थापित करना आसान बनाता है, लेकिन यह उनके लिए अभी भी काफी कम होने की भरपाई नहीं करता है, और काफी कुछ खराब दस्तावेज हैं या बहुत अच्छी तरह से बनाए नहीं हैं। पायथन की तुलना में, एक अच्छा मौका है कि गैर-तुच्छ लिस्प एप्लिकेशन (विशेष बोली की परवाह किए बिना) लिखना शायद अभी भी एक पहिया या दो के कम से कम हिस्से को फिर से शामिल करना होगा।
  • विकास उपकरण द्वारा अपनाए गए मॉडल के साथ परिचित का अभाव। अधिकांश लोगों को मैं जानता हूं कि SLIME और Emacs का उपयोग करने से काफी भयभीत हैं, जो कि ग्रहण और दृश्य स्टूडियो के लिए उपयोग किए जाने वाले लोगों के लिए समझ में आता है। मुझे लगता है कि दो ग्रहण प्लगइन्स हैं, मैंने केवल कुछ साल पहले उनमें से एक की कोशिश की थी और यह बहुत छोटी गाड़ी थी। पूरा लिस्प पारिस्थितिक तंत्र ऐसा दिखता है कि यह उन दिनों के बीच आधा रह गया है जब यह एक पूर्ण-लिस्प-रनिंग प्रणाली का हिस्सा था और ओह-इट्स-ए-लैंग्वेज का आधुनिक मानक। लिस्प सीखना एक नई भाषा सीखने तक सीमित नहीं है - आपको काम करने और सोचने का एक अलग तरीका सीखने की भी आवश्यकता है, और जब तक आप इसे एक शौक के रूप में कर रहे हैं, तो ठीक है, यह संदिग्ध है कि क्या यह इसमें करने लायक है व्यापार।

चीजें थोड़ी बेहतर लगने लगी हैं, खासकर क्लोजर के आसपास।


1
"मुझे पता है कि ज्यादातर लोग SLIME और Emacs का उपयोग करके काफी भयभीत हैं, जो कि ग्रहण और दृश्य स्टूडियो के लिए उपयोग किए जाने वाले लोगों के लिए समझ में आता है।": बार-बार मुझे लगता है कि लिस्प अभिजात वर्ग के लिए है।
जियोर्जियो

2
"आपको काम करने और सोचने का एक अलग तरीका सीखने की ज़रूरत है, और जब तक आप इसे एक शौक के रूप में कर रहे हैं, तो यह ठीक है, यह संदिग्ध है कि क्या यह किसी व्यवसाय में करने लायक है।": बढ़ी हुई उत्पादकता नहीं है। अच्छा पर्याप्त कारण?
जियोर्जियो

क्या इस "बढ़ी हुई उत्पादकता" का प्रदर्शन किया गया है? यह निश्चित रूप से मेरे लिए स्पष्ट नहीं है (हाँ मैंने एक लिस्प बोली में प्रोग्राम किया है)। सिल्वर बुलेट्स नहीं हैं।
निक किली

5

मैंने कॉलेज में एक साल पहले LISP सीखा था।

LISP, FORTH की तरह, तर्क के लिए बहुत अच्छा है। लेकिन अधिकांश प्रोग्रामिंग तर्क के बारे में नहीं है, यह उबाऊ यांत्रिक तरीकों से डेटा में हेरफेर करने के बारे में है। उदाहरण के लिए, उस समय के रूप में संख्यात्मक उत्पादन को सही ठहराने का कोई तरीका नहीं है।

LISP नेस्टेड कार्यक्षमता के बारे में है, और लोग बस इस तरह से नहीं सोचते हैं। वे डीओ ए, बी, सी, डी के संदर्भ में सोचते हैं, फिर ई। ए नहीं करते हैं, जिसमें बी और सी करना शामिल है, फिर डी और ई। थिस में एक प्रकार की संगामिति शामिल है जो भ्रामक है। "आयकर रिटर्न दाखिल करें" जैसे पूर्वनिर्धारित कार्यों को छोड़कर, लोग समवर्ती रूप से नहीं सोचते हैं, वे क्रमिक रूप से सोचते हैं। यही कारण है कि आज प्रक्रियात्मक भाषाएँ प्रमुख हैं।

नतीजतन, produral code को Java पसंद आता है और C को आसानी से अंग्रेजी में अनुवादित किया जा सकता है। LISP कोड नहीं कर सकते हैं; कोई भी मानव भाषा उस तरह से संरचित नहीं है।

तो यह समस्या को हल करने के लिए बहुत अच्छा है, लेकिन समस्या को हल करना प्रोग्रामिंग में बहुत महत्वपूर्ण नहीं है। डेटा प्रविष्टि, सत्यापन, आउटपुट स्वरूपण, जिनमें से सभी पर LISP बहुत कमजोर था।


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

4
प्रोग्रामिंग समस्या समाधान के बारे में नहीं है? मुझे ऐसा नहीं लगता। और वैसे भी मुझे नहीं लगता कि आप कॉलेज में कोई भाषा सीख सकते हैं
एडम एरोल्ड

+1, मेरे लिए बहुत प्रशंसनीय लगता है जो किसी लिस्प को नहीं जानते हैं। मैं एक ही कारण बताऊंगा कि सी / जावा उद्यम-आकार के समाधान के लिए पायथन से बेहतर है।
जोनास बिस्ट्रोम

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

1
एक प्रोग्रामर ने एक बार मुझसे पूछा कि एक डेटा-आरेख का उपयोग करके लूप के लिए सबसे अच्छा तरीका क्या है। ऐसे लोगों के लिए गैर-प्रक्रियात्मक भाषाओं का कोई मतलब नहीं है। थिंक FORTRAN में।
निक केइली

5

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

जावा या सी # जैसी ओओपी भाषा के साथ, आप एक कार्यशील मॉडल की ओर खुद को बढ़ावा देने के लिए टाइप सिस्टम का उपयोग कर सकते हैं, और इसका निर्माण कर सकते हैं। लिस्प (या लुआ, या जावास्क्रिप्ट, उस मामले के लिए) के साथ यह धारणा है कि आप बाहर जा सकते हैं और इसे किसी भी तरह से कर सकते हैं जो आप चाहते हैं। यदि आप OOP चाहते हैं, तो बस अपना OOP सिस्टम बनाएं! अपने स्वयं के ओओपी बनाने के अलावा, या किसी और के सीखने के लिए, भाषा के शीर्ष पर एक नया अवरोधक है इससे पहले कि आप प्रयोग करने योग्य कार्यक्रम प्राप्त करें। इसके अलावा मुझे हमेशा लगता है कि लिस्प या लुआ में ओओपी वास्तव में नहीं है, जैसे कि मैं इसे अनदेखा कर सकता था अगर मैं वास्तव में चाहता था, तो क्या बात है?

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

संपादित करें: एक सादृश्य के रूप में जिसने मुझे मारा, यह ऐसा है जैसे आपको कुछ लकड़ी का काम करने की आवश्यकता है और दो लोग आपको अपने टूल बॉक्स प्रदान करते हैं। एक व्यक्ति के उपकरण थोड़े क्रैमी होते हैं, लेकिन मूल रूप से थोड़े प्रयास से काम पूरा हो जाएगा। दूसरे व्यक्ति के पास भागों का एक बड़ा बिन है, लेकिन यह वादा कर रहा है कि आप उन भागों को जोड़ सकते हैं जो आपके द्वारा उपयोग किए जाने वाले सर्वोत्तम उपकरण बनाने के लिए, आपकी पकड़ के लिए और सर्वोत्तम गुणवत्ता के अनुकूल हैं। आपको बस उन्हें पहले बनाना होगा।


2
आम लिस्प, कम से कम, स्पष्ट रूप से एक ओओ भाषा है: आम लिस्प ऑब्जेक्ट सिस्टम मानक का हिस्सा है।
फ्रैंक शीयर

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

लिस्प आपको लाइट-वेट OOP के लिए ऑब्जेक्ट्स के बजाय क्लोजर (लेट-ओवर-लैम्ब्डा) का उपयोग करने की अनुमति देता है, लेकिन मेरा मानना ​​है कि CLOS के माध्यम से OOP का उपयोग करने के लिए अपग्रेड करना आसान है।
aoeu256

2

मैं लंबे समय से ऐसा ही सोच रहा था, और मैं लिस्प सम्मेलनों में यह समझने की कोशिश करने के लिए भी गया कि यह लिस्प "अंधेरे पक्ष" क्या है जो हर किसी को इसे अपनाने से रोकता है।

मुझे कोई पूर्ण सभ्य उत्तर नहीं मिला है।

अज्ञानता गायब होने की लोकप्रियता का कारण हो सकती है, लेकिन जो पहेलियाँ मेरे लिए अधिक हैं, वह यह है कि जो भी निश्चित रूप से लिस्प के बारे में जानता है (उदाहरण के लिए Google - पीटर नॉरविग उनके लिए काम करता है) इसका उपयोग नहीं कर रहा है।

केवल आंशिक व्याख्या जो मैं करता हूं, वह यह है कि लिस्प के अधिकांश महान विचार अब सामान्य हैं, केवल वास्तव में महत्वपूर्ण लापता एक (बेहद महत्वपूर्ण एक आईएमओ) मेटाप्रोग्रामिंग में आसानी है।

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

Metaprogramming भी स्वाभाविक रूप से अधिक कठिन है (और मेटा-मेटाप्रोग्रामिंग और भी अधिक) और अधिकांश प्रोग्रामर और प्रबंधक स्पष्ट रूप से केवल "किसी को भी उस" उत्तर की आवश्यकता नहीं होगी।

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

मुझे लगता है कि जटिलता समस्या का समाधान शक्तिशाली उपकरण और शिक्षा हैं। प्रवृत्ति स्पष्ट रूप से बजाय कुंद औजारों की है और समस्या का बहाना मौजूद नहीं है।


+1 के लिए "मुझे लगता है कि जटिलता समस्या का समाधान शक्तिशाली उपकरण और शिक्षा है।"
जियोर्जियो

50 साल बाद 'अज्ञानता' बहाना बहुत पतली पहने हुए है
निक कीघी

1
@NickKeighley: निर्भर करता है। आज भी अधिकांश प्रोग्रामर वास्तव में लिस्प के बारे में कुछ भी नहीं जानते हैं (उदाहरण के लिए आप लिस्प को एक कार्यात्मक भाषा के रूप में वर्णित अधिकांश बार सुनते हैं)। यहां तक ​​कि जो "जानता है" लिस्प के लगभग किसी ने कभी भी स्थूल विचार को पर्याप्त विवरण के साथ नहीं देखा (मैं योजना के गूंगे-पतले संस्करण के बारे में बात नहीं कर रहा हूं, लेकिन अर्ध-सुविधा की पूर्ण एल्गोरिदमिक शक्ति जब वह बेहतर फिट होती है)।
6502

@ 6502: जबकि विशुद्ध रूप से कार्यात्मक नहीं है, IMO लिस्प कई मुख्यधारा की भाषाओं जैसे C #, Java, C ++, और इसी तरह से कार्यात्मक प्रोग्रामिंग का बेहतर समर्थन करता है। कई प्रोग्रामर के लिए, एफपी का मतलब है समय-समय पर लंबोदर अभिव्यक्ति का उपयोग करना: ये प्रोग्रामर लिस्प या क्लोजर या हास्केल को याद नहीं करेंगे। इसलिए मैं जोड़ूंगा: (1) लिस्प बहुत अच्छी तरह से एफपी का समर्थन करते हैं और कार्यात्मक प्रोग्रामर इससे लाभान्वित होंगे लेकिन (2) एफपी के बारे में अनभिज्ञता और इसका लाभ एक कारण है कि लिस्प का अधिक बार उपयोग नहीं किया जाता है।
जियोर्जियो

1
@ 6502: सूचियों को मूल डेटा संरचना के रूप में होना और सूचियों पर सामान्य उच्च-क्रम के कार्य भी एक विशेषता है जो जावास्क्रिप्ट में गायब है। और, जहाँ तक मुझे याद है, जावास्क्रिप्ट में भी द्वैत कथन / अभिव्यक्ति है। मैं निश्चित रूप से लिस्प (कॉमन लिस्प) को जावास्क्रिप्ट या पायथन की तुलना में एफपी की दिशा में कुछ कदम आगे रखूंगा। इससे मेरा मतलब यह नहीं है कि कॉमन लिस्प एक विशुद्ध रूप से कार्यात्मक भाषा है, मैं मानता हूं कि यह बहु-प्रतिमान है, लेकिन यह अन्य बहु-प्रतिमान भाषाओं की तुलना में एफपी को बहुत बेहतर तरीके से समर्थन करता है।
जियोर्जियो

1

ऐसा लगता है कि यहां तक ​​कि सीएल के पास बहुत अच्छा पुस्तकालय समर्थन नहीं है। कम से कम उन लोगों के अनुसार जो लिस्प से अजगर में बदल गए:

http://www.redmountainsw.com/wordpress/archives/reddit-switches-from-lisp-to-python

व्यक्तिगत रूप से, मैं कुछ योजना जानता हूं और इसके साथ खेलने का आनंद लेता हूं, लेकिन उस भाषा में एक गैर-तुच्छ परियोजना करने की कल्पना नहीं कर सकता।


2
यह और अधिक सच नहीं है। Quicklisp ने उस समस्या को हल किया।

2
यह भी उल्लेखनीय है कि सीएफएफआई के साथ, किसी भी सी लाइब्रेरी का उपयोग कॉमन लिस्प से किया जा सकता है। CFFI अच्छी तरह से प्रलेखित है और अच्छी तरह से काम करता है। दूसरी ओर, यदि C फ़ंक्शन के लिए कुछ घंटे लिखने वाले रैपर खर्च करने से आपकी परियोजना पर एक बड़ा प्रभाव पड़ता है, तो लिस्प शायद वैसे भी इसके लिए सही विकल्प नहीं है।
लैरी कोलमैन

मैंने स्कीम में एक गैर-तुच्छ प्रोजेक्ट किया और एक कंपनी को जाना जो कई उत्पादों के लिए स्कीम (चिकन स्कीम) का उपयोग करती है।
जियोर्जियो

1

जरूरी नहीं कि शक्तिशाली होने का व्यापक उपयोग हो। क्या आपने 'सामान्य मामले के लिए ऑप्टिमाइज़' शब्द के बारे में सुना है? दुर्भाग्य से जैसा कि कई लोगों ने औसत दर्जे से पहले बताया है अगर लगातार आश्वासन दिया जाता है कि उनके बीच की कई असफलताओं के साथ बड़ी हिट लोगों की तुलना में बेहतर है।

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

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

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

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


"सामान्य मामले के लिए ऑप्टिमाइज़ करें" सिद्धांत का हवाला देते हुए +1।
जियोर्जियो

हाँ, लेकिन LISP के क्लोज़र ऑब्जेक्ट्स के सामान्य मामले के लिए एक अनुकूलन हैं। साथ ही मैं सोच रहा था कि क्या कोई इसे पेड़ के रूप में मानकर अपने LISP कोड आधार में बदलाव करता है और HTML के लिए JQuery की तरह इस पर सवाल चला रहा है।
aoeu256

1

लिस्प बोलियों के साथ वेब विकास के लिए, चिकन और अंडे की समस्या का एक सा हो सकता है - क्योंकि कुछ लोग लिस्प का उपयोग करते हैं, मेजबान या तो इसे अनुमति नहीं देते हैं या इसे आसान नहीं बनाते हैं, और क्योंकि यह आसान नहीं है, कुछ लोग इसका इस्तेमाल करें। लेकिन वास्तव में, एक होस्ट पर चलने वाले लिस्प को प्राप्त करना आसान हो सकता है जितना आप सोच सकते हैं, भले ही इसके लिए उनके आउट-ऑफ-द-बॉक्स PHP सेवा की तुलना में थोड़ा अधिक काम करने की आवश्यकता हो। मुझे हाल ही में यहां गुइल स्कीम ऐप मिली हैं , बस थोड़े से प्रयास के साथ।


0

IMO, यह ज्यादातर खराब समय की बात है: लिस्प पुराना था (और लगभग अब रोमांचक नहीं है) लंबे समय से पहले यह ज्यादातर लोगों या उपयोगों के लिए व्यावहारिक हो गया था। क्लोजर (एक उदाहरण के लिए) एक बेहतर मौका है। इसकी सफलता जावा, (और जेवीएम पर चलने वाली अन्य सभी चीजों) के साथ व्यवधान के रूप में व्यावहारिक रूप से नए, फैशनेबल और शांत होने के कारण कहीं अधिक निर्भर करेगी।

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