लिस्प उपयोगी क्यों है? [बन्द है]


64

लिस्प स्पष्ट रूप से एआई सामान के लिए एक फायदा है , लेकिन यह मुझे दिखाई नहीं देता है कि लिस्प जावा, सी #, या सी से भी तेज है। मैं लिस्प का मालिक नहीं हूं, लेकिन मुझे यह लाभ समझना अविश्वसनीय रूप से मुश्किल लगता है एक लिस्प में व्यापार सॉफ्टवेयर लिखने में मिल जाएगा।

फिर भी इसे हैकर की भाषा माना जाता है।

पॉल ग्राहम लिस्प की वकालत क्यों करता है ? ITA सॉफ़्टवेयर ने अन्य उच्च-स्तरीय भाषाओं में लिस्प का चयन क्यों किया ? इन भाषाओं पर इसका क्या मूल्य है?


20
लाइन "मुझे नहीं लगता कि लिस्प जावा, सी # की तुलना में किसी भी तेजी से है या सी की तुलना में तेजी से तथ्य के रूप में" कुछ हद तक भ्रमित है। सी को आमतौर पर "फास्ट कोड के लिए मानक के रूप में रखा जाता है क्योंकि आप धातु के करीब प्रोग्रामिंग कर रहे हैं" - यह सब कुछ के बारे में सिर्फ हरा करने के लिए बेंचमार्क है। अब, Java और अन्य GC'd भाषाएं इसे कुछ संदर्भों में हरा सकती हैं, उदाहरण के लिए मेमोरी आवंटन / सफाई की गति। लेकिन, यह वाक्य फिर भी थोड़ा पीछे की ओर लगता है।
माइकल एच।

2
लिस्प उन लोगों की तुलना में एक उच्च स्तरीय भाषा है, जो आमतौर पर धीमी होती हैं।
segfault

5
@ बियान तियान: "उच्च स्तरीय भाषा" को एक स्पष्ट परिभाषा की आवश्यकता है। यहां तक ​​कि अगर यह एक था, तो यह एक गैर-सीक्वेटुर की तरह लगता है। (
साभार

5
@BoTian "उच्च स्तर" डिफ़ॉल्ट रूप से "धीमी" के बराबर नहीं है।

24
लिस्प मौजूद है कि हर दूसरे भाषा डिजाइनर ने कितना गलत किया है।

जवाबों:


78

कॉमन लिस्प के साथ सक्षम बनने के लिए कुछ कारण हैं जिन पर मैं काम कर रहा हूं।

  1. होमोसेक्सुअल कोड। यह संरचित स्व-संशोधित कोड की अनुमति देता है।
  2. सिंटेक्स-जागरूक मैक्रोज़। वे बॉयलरप्लेट कोड के पुनर्लेखन की अनुमति देते हैं।
  3. व्यावहारिकता। सामान्य लिस्प को काम करने वाले पेशेवरों द्वारा सामान प्राप्त करने के लिए डिज़ाइन किया गया है। एक नियम के रूप में, अधिकांश कार्यात्मक भाषाएं नहीं हैं।
  4. लचीलापन। यह उचित गति से बहुत सारे अलग-अलग काम कर सकता है।
  5. Wartiness। असली दुनिया गड़बड़ है । व्यावहारिक कोडिंग हवाएं या तो गंदे निर्माणों का उपयोग या आविष्कार करने के लिए होती हैं। आम लिस्प में पर्याप्त मस्सा होता है जिससे यह काम कर सकता है।

आम तौर पर आम लिस्प के खिलाफ चुनने का एकमात्र वास्तविक कारण यह है कि मानक पुस्तकालय दिनांकित हैं।

मैं एक अंग पर निकलूंगा और कहूंगा कि सामान्य स्थिति में, वाक्यविन्यास एक पेशेवर सॉफ्टवेयर कार्यकर्ता के लिए एक मुद्दा नहीं होना चाहिए।


8
सिंटैक्स एक मुद्दा हो सकता है अगर यह पठनीयता या लेखन क्षमता को प्रभावित करता है। मुझे नहीं लगता कि लिस्प के लिए ऐसा है। एक अच्छा संपादक या IDE अच्छा पर्याप्त वाक्यविन्यास हाइलाइटिंग कर सकता है और एक बड़ा सौदा नहीं होने के लिए मेल खाता है।
मैट ओलेनिक

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

3
@Matt: हाँ। एफडब्ल्यूआईडब्ल्यू, मैं हाल ही में मैक्रों के साथ सी # -ish सीएलआर प्रायोगिक भाषा नेमेर्ले में भाग गया। nemerle.org । यह अनुभव के लिए, मुझे लगता है कि कुछ बिंदु पर प्रहार करने लायक है।
पॉल नाथन

2
"व्यावहारिकता। CL को काम करने वाले पेशेवरों द्वारा सामान प्राप्त करने के लिए डिज़ाइन किया गया है। अधिकांश कार्यात्मक भाषाएं, एक नियम के रूप में नहीं हैं।": मैं इस कथन से सहमत नहीं हूं। मुझे लिस्प में बहुत दिलचस्पी है और इसे सीखने के लिए कुछ समय समर्पित करने की कोशिश कर रहा हूं। लेकिन मुझे लगता है कि अन्य एफपी भाषाएँ भी "काम करवाने" के लिए बहुत प्रभावी हैं, कम से कम अब तक स्काला और हास्केल के साथ मेरा अनुभव यही रहा है।
जियोर्जियो

1
"सीएल को काम करने वाले पेशेवरों द्वारा सामान प्राप्त करने के लिए डिज़ाइन किया गया है। अधिकांश कार्यात्मक भाषाएं, एक नियम के रूप में नहीं हैं।": क्या आप इस पर विस्तार से बता सकते हैं? विशेष रूप से वाक्य के दूसरे भाग पर। क्या आप कुछ उदाहरण बता सकते हैं?
जियोर्जियो

23

मुझे इसके लिए लिस्प पसंद है

  • कोड और डेटा दोनों का प्रतिनिधित्व करने का एकीकृत, सरल और सुरुचिपूर्ण तरीका।
  • अद्वितीय दृष्टिकोण, जो मुझे कठिन समस्याओं को हल करने पर महत्वपूर्ण 80 बोनस IQ अंक देता है (एलन के साथ हैट टिप)
  • बेहद फुर्तीला, संवादात्मक और संवादी विकास परिवेश
  • सार बनाने और हेरफेर करने की अभूतपूर्व शक्ति

प्रोग्रामिंग जटिलता से लड़ रही है। कभी बढ़ती जटिलता (हमारे बहुत सीमित और स्थिर खोपड़ी आकार के साथ) लड़ने के लिए सार एकमात्र प्रभावी उपकरण है। लिस्प के साथ सार का प्रबंधन n + 1 इच्छाओं के साथ एक जिन्न होने जैसा है।


5
+1 के लिए "प्रोग्रामिंग जटिलता से लड़ रहा है। कभी भी बढ़ती जटिलता (हमारे बहुत सीमित और निरंतर खोपड़ी के आकार के साथ) से लड़ने के लिए सार एकमात्र प्रभावी उपकरण है।" (काश मैं एक +10 दे सकता।)
जियोर्जियो

"अत्यंत फुर्तीला, संवादात्मक और संवादात्मक विकास पर्यावरण" क्या है?
QED

6
क्या यह (+ 1 n)इच्छा नहीं होनी चाहिए , या इससे भी बेहतर व्यावहारिकता बुद्धिमान होगी (incf n)?
Reb.Cabin

21

मेरा मानना ​​है कि सही लिस्प उत्तर अधिक सूक्ति है। कुछ इस तरह: "अगर आपको पूछना है, तो आप तैयार नहीं हैं।"

फिर अगर कोई आगे सवाल करता है, तो सही उत्तर या तो "हां" है यदि यह या तो / या प्रश्न है या "आप तैयार नहीं हैं।"


5
पॉल ग्राहम लुई आर्मस्ट्रांग को उद्धृत करते हैं: "यदि आपको पूछना है कि जैज़ क्या है, तो आप कभी भी नहीं जान पाएंगे।"
जेसन बेकर

25
+1। हालाँकि कभी-कभी "अगर आपको पूछना है, तो आप तैयार नहीं हैं" जैसे वाक्यांश मुझे लगता है कि जो ऐसा कहता है वह आसानी से समझा नहीं सकता है
सुपरएम

5
@superM लिस्प और लिस्प जैसी कार्यात्मक भाषाओं में संपत्ति होती है जो एक बार उन्हें जानने के बाद, कोई भी उन्हें समझा नहीं सकता है!
गूढ़

18

मुझे लगता है कि कृत्रिम बुद्धिमत्ता (एआई) क्षेत्र में लिस्प का लाभ जो सभी का उल्लेख है वह कुछ हद तक एक ऐतिहासिक दुर्घटना है ... लिस्प ने एआई में शुरुआत की थी, लेकिन यह एक सामान्य उद्देश्य वाली भाषा है।

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

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

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

मैं व्यापार सॉफ्टवेयर के संबंध में आलोचनाओं के एक जोड़े के साथ समाप्त होगा:

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

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


7
क्लोजर का प्रयास करें, यह जेवीएम पर एक लिस्प है। तो JVM का उपयोग करके आप सभी जावा सामान का उपयोग कर सकते हैं।
ज़ाचरी के

@ जैचेरी: जेवीएम पर कम से कम 2 सामान्य लिस्प कार्यान्वयन हैं। ABCL अपेक्षाकृत परिपक्व है।
लैरी कोलमैन

क्लोजर 100% जावा-संगत है (कम से कम मुझे जावा में कभी भी ऐसा कुछ नहीं मिला जो क्लोजर में सुधार न कर सके, और इस तरह से कि जावािस्ट शिकायत नहीं कर सकते)। क्लॉजोर आम लिस्प के सर्वश्रेष्ठ और एफपी के सर्वश्रेष्ठ से प्रभावित है। उस और SBCL और CLisp और Emacs के साथ, किसी भी लिस्पर को आजकल एक राजा की तरह महसूस करना चाहिए।
Reb.Cabin

13

मुझे लिस्प पसंद नहीं है।

(मुझे यह उपयोग की जाने वाली कई अवधारणाएँ पसंद हैं, यह कैसे शक्तिशाली तकनीकों को मूल रूप से उपलब्ध कराती है, इत्यादि।

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

लेकिन हाँ, इस कारण से कि कुछ लोग इसे पसंद करते हैं, इन स्टैक ओवरफ्लो प्रश्नों की जांच करें:

उन लोगों के लिए संबंधित प्रश्नों में शायद कुछ और भी है।


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

5
स्वयं के साथ एक भाषा का विस्तार करने की क्षमता को आधा दर्जन वर्णों तक सीमित वाक्यविन्यास की आवश्यकता नहीं है । इसके अलावा: "वाक्यविन्यास एक विशेषता है, बग नहीं" ? - मुझे पता है। मैंने इसे बग नहीं कहा।
पीटर बॉटन

8
ठीक है, आपको मैक्रो सिस्टम के लाभ कैसे मिलते हैं? कितनी भाषाएं आपको एक यथोचित छोटे अध्याय (पॉल ग्राहम, "ऑन लिस्प") में उनके लिए ऑब्जेक्ट-ओरिएंटेड एक्सटेंशन बनाने की अनुमति देती हैं।
डेविड थॉर्नले

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

8
लेकिन एस-एक्स के बीच आसानी से स्थानांतरित होने की क्षमता बहुत बड़ी लगती है ... फिर कोष्ठक के विषय पर, मुझे निम्नलिखित उद्धरण पसंद है: पेरेंटेज? क्या कोष्ठक? मैंने लिस्प प्रोग्रामिंग के अपने पहले महीने से किसी भी कोष्ठक पर ध्यान नहीं दिया है। मुझे उन लोगों से पूछना पसंद है जो लिस्प में कोष्ठक के बारे में शिकायत करते हैं अगर वे एक अखबार में शब्दों के बीच सभी रिक्त स्थान से परेशान हैं "- केन टिल्टन
सेड्रिक मार्टिन

9

मैं "लिस्प" की व्याख्या " कॉमन लिस्प " के रूप में करूँगा ; मुझे कोई संदेह नहीं है कि अन्य उत्तर " स्कीम " कहेंगे । (संकेत: लिस्प की भाषाओं का परिवार।)

"तेज" का क्या अर्थ है? बेंचमार्क चलाने में लगने वाले समय के संदर्भ में, नहीं, यह C से तेज नहीं है ( लेकिन यह हो सकता है )।

"फास्ट" कितनी देर तक काम करने वाले प्रोग्राम को लिखने या बड़े सॉफ्टवेयर सिस्टम में बग को ठीक करने में जो रैंडम हैकर लेता है? लगभग निश्चित रूप से।

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


यदि आप अपने संपादक के अंदर एक छोटा सा कार्य लिख सकते हैं तो वह भयानक नहीं होगा जो आपके कोड के बाकी हिस्सों के लिए तुरंत कुछ करेगा? या आप पहले से ही ऐसा कर सकते हैं?
मार्क सी

4
@ मर्क: मुझे लगता है कि आप Emacs का वर्णन कर रहे हैं।
फेराकियो

@Ferruccio मुझे लगा कि आपको अपना कोड पहले चलाना होगा, हालाँकि।
मार्क सी

2
@ मर्क सी: ठीक है, आपको क्षेत्र और फिर M-x eval-region(या eval-buffer) को उजागर करना होगा , लेकिन यह सब है।
फ्रैंक शीयर

1
@ मार्का: इसके अलावा, अगर आप स्क्रैच बफर में हैं, तो आप बस अपना फ़ंक्शन और प्रेस C-j(जो नैतिक रूप से दर्ज करने के लिए बराबर है) लिख सकते हैं और यह तुरंत प्रभावी होगा।
तिखन जेल्विस

7

मुझे लिस्प पसंद है क्योंकि यह मेरे विचारों को व्यक्त करने का एक उत्कृष्ट माध्यम है। मेरी पसंदीदा भाषा के लिए विधेय है "यदि मैं विचारों को व्यक्त करने के लिए कुछ भी चुन सकता हूं, तो यह क्या होगा?"। वर्तमान में यह लिस्प * ( विशिष्ट होने की योजना ) है, इस बिंदु पर कि मैं खुद को इसमें प्रोग्रामिंग नोट्स लिख रहा हूं। IRL के रूप में , कागज और कलम नोट्स। यहां तक ​​कि जब मैं उन कार्यक्रमों के बारे में सोच रहा हूं जो मुझे PHP या रूबी या पायथन में लागू करने की आवश्यकता है।

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

* बस एक फुटनोट के रूप में, हास्केल अंतर को बहुत जल्दी से बंद कर रहा है क्योंकि मैं इसे और अधिक सीखता हूं।


6

मुद्दा शक्ति है। शक्ति = कार्य (कार्यक्रम की कार्यक्षमता) / समय

"हम लिस्प प्रोग्रामर्स पर जीतने के लिए बाहर नहीं थे; हम C ++ प्रोग्रामर के बाद थे। हम उनमें से बहुतों को लिस्प के आधे रास्ते तक खींचने में कामयाब रहे।"

- गाइ स्टील, जावा कल्पना सह-लेखक

C ++ और Java के बीच किसी प्रकार का वक्र प्लॉट करें। चलते रहो, और लाइन के साथ कुछ बिंदु पर आपको लिस्प मिलेगा।


2
यहां समस्या यह है कि आप जावा में जाने वाले C ++ कार्यक्षमता का एक बहुत कुछ खो देते हैं, लेकिन लिस्प में जाने पर इसे फिर से (अक्सर बेहतर रूप में) उठाते हैं।
डेविड थॉर्नले

@DavidT उस सटीक उद्धरण पर SO प्रश्न का स्रोत से लिंक है ("cite" की खोज करें)। उद्धरण को इतनी गंभीरता से नहीं लिया जाना चाहिए।
मार्क सी

@ डेविड: मैक्रों की तरह। यह सिर्फ इतना नहीं है कि उन्होंने उन्हें जावा (और इसलिए सी #) में छोड़ दिया, लेकिन उन्होंने उनकी कमी को "पुण्य" बना दिया। मैक्रोज़ वास्तव में आसान हैं अगर मैं बेस लैंग्वेज के ऊपर एक डीएसएल बना रहा हूं।
माइक डनलैवी

@ माइक डनलैवी: मैं वास्तव में सी ++ में मैक्रों को नापसंद करता हूं (हेक, मैं उन्हें सी में नापसंद करता हूं, लेकिन मेरे पास वहां कोई विकल्प नहीं है)। मुझे वास्तव में आम लिस्प में मैक्रोज़ पसंद हैं। तुम्हें पता है, मुझे लगता है कि मेरी टिप्पणी के साथ मेरी समस्या यह है कि मैं सी ++ और कॉमन लिस्प दोनों को जावा की तरह पूरी तरह से अधिक पसंद करता हूं।
डेविड थोरले

@ डेविड: मैं आपके साथ लिस्प में मैक्रों पर 100% हूं। सी में / C ++ वे बदसूरत और दुरुपयोग का खतरा है, लेकिन (के प्रकार के लिए बेशक किनारा ) सामान मुझे क्या करना है, वे कर रहे हैं तो कुछ भी नहीं की तुलना में बेहतर। बेशक, जब मैं इसे सी ++ में करता हूं तो इसे बहुत अच्छी तरह से दुरुपयोग माना जा सकता है, लेकिन लिस्प में इसे बहुत ही चालाक माना जाता है। जाओ पता लगाओ।
माइक डनलैवी

6

पॉल ग्राहम ने इस सवाल का जवाब खुद दिया कि व्हाट मेड लिस्प डिफरेंट

ध्यान रखें कि उन्होंने 1990 के दशक के मध्य में अपने स्टार्टअप के लिए इसका इस्तेमाल किया था, इसलिए पायथन और रूबी वास्तव में उस बिंदु पर परिपक्व नहीं थे (या शायद पैदा भी नहीं हुए थे)।

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

हत्यारा सुविधा शायद यह है कि पूरा कार्यक्रम अभिव्यक्तियों से बना है। इसका अर्थ है कि आप कोड के फ़ंक्शंस के आसपास पास को फ़ंक्शंस (या मैक्रोज़ ...) के रूप में कर सकते हैं, क्योंकि कोड का एक ब्लॉक अभिव्यक्ति से अधिक कुछ नहीं है।

पायथन में यह सुविधा नहीं है; आपको कार्यों को परिभाषित करना होगा और उन्हें पास करना होगा। रूबी के पास ब्लॉक हैं, शायद यह लिस्प की तुलना में कुछ हद तक सीमित है जो मैं कर सकता हूं (मुझे यकीन नहीं है)।


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

भाषा सिंटैक्स के रूप में एएसटी अभी भी लिस्प का डोमेन है। मुझे गैर-लिस्प भाषा के बारे में पता नहीं है, जहां संकलन समय के दौरान मैक्रोज़ पूरी भाषा में उपलब्ध हैं, (हाँ संकलक मूल रूप से मैक्रो परिभाषा को हाथ से मैक्रो कॉल करता है, जो अपने आप में लिस्प प्रोग्राम है। आप संकलन समय पर मैक्रो में http और db करना चाहते हैं। ?)
przemo_li

6

अतीत में स्कीम के लिए मेरे पास घुटने के बल चलने की प्रतिक्रिया थी , लेकिन अब मैं लिस्प ( क्लोजर , वास्तव में) एक शॉट देने के लिए तैयार हूं ।

आप देखिए, वर्षों से मैंने जावा, सी #, सी ++, पायथन जैसी भाषाओं के बिट्स उठाए और चीजें अब चुनौतीपूर्ण नहीं हैं।

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

याय LISP!

EDIT: ITA सॉफ्टवेयर की स्थापना MIT ग्रेड्स द्वारा की गई थी, और स्कीम / लिस्प एकमात्र ऐसी भाषा थी, जिसे MIT की कई ग्रेड्स ने सीखा था। हालांकि, निष्पक्ष होने के लिए, एक चल रहे उत्पादन प्रणाली पर लिस्प एल्गोरिदम को गर्म-स्वैप कर सकते हैं, जो एक बहुत बड़ा प्लस है।


8
पुन: चीजें अब चुनौतीपूर्ण नहीं हैं --- हास्केल को जाने दें और हमें बताएं कि आप क्या सोचते हैं। इसके अलावा, आप हमेशा बदलाव के लिए कुछ INTERCAL सीखने की कोशिश कर सकते हैं!
मार्क सी

3
@ मर्क सी, सॉरी लेकिन मैं टच नहीं कर रहा हूं INTERCAL। चुनौती एकमात्र मापदंड नहीं है; यह वास्तविक समस्याओं को तेजी से हल करने में सक्षम होना चाहिए। कम से कम हास्केल का उपयोग किया जाता है और कई लोग इसे पसंद करते हैं।
अय्यूब

वह निश्चित रूप से मजाक में था।
मार्क C

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

@ जो मैं भूल गया ... PLEASE?
मार्क सी

6

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

वस्तुएं चाहिए? आप वह ले सकते हैं। कार्यात्मक प्रोग्रामिंग चाहते हैं? तुम ले लो। चाहते हैं Prolog शैली तर्क प्रोग्रामिंग? कुछ मैक्रोज़ लिखिए। एसक्यूएल-शैली घोषणात्मक प्रोग्रामिंग चाहते हैं? इसका लाभ उठाएं। कुछ प्रतिमान का उपयोग करना चाहते हैं जो अभी तक आविष्कार नहीं किया गया है? मुझे विश्वास है कि यह लिस्प में किया जा सकता है।

फोर्थ जैसी भाषाओं के अलावा , मुझे अभी तक एक और भाषा को इस स्तर के लचीलेपन की पेशकश करते हुए देखना है।


+1 मल्टी-प्रतिमान प्रोग्रामिंग, F # के पहले के दशक, बहुत अच्छी बात है।
Orbling

काश, मैं इस दस बार उत्थान कर पाता। कोई चम्मच नहीं है ... कोई प्रतिमान नहीं है ... यह महान सटीकता के साथ आम लिस्प के बारे में मेरी भावना का वर्णन करता है :)
MadPhysicist

5

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

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

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


यदि मैं आज नए सिरे से शुरू कर रहा था, तो मैं शायद रूबी को चुन लूँगा - यह लिस्प प्रकृति का बहुत कुछ विरासत में मिला है, लेकिन इसमें अधिक आधुनिक पुस्तकालय हैं और एक एकल उदार तानाशाह इसे आगे बढ़ा रहा है। लेकिन, वह सवाल नहीं था जो ओपी ने पूछा था।
माइकल एच।

मैं वास्तव में बाहर शुरू करने के लिए माणिक चुनता था, और अब मैं नया सीखने की कोशिश कर रहा हूं।
फिलोसोडाद ३०'११ को १

5

मैं कुछ कारणों से लिस्प ( newLisp ) सीख रहा हूं ।

कारण नंबर एक: लिस्प मुझे अलग तरह से सोचता है, जो मुझे एक बेहतर रूबी कोडर बनाता है।

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

कारण संख्या दो: लिस्प व्यावहारिक है और अच्छी आधुनिक पुस्तकालय हैं।

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

कारण संख्या तीन: लिस्प वाक्यात्मक और वैचारिक रूप से सुसंगत है।

मेरे लिए, यह रूबी और पायथन, स्थिरता के बीच का बड़ा अंतर है।


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

4

क्या आप "ब्रांड लॉयल्टी" कह सकते हैं?

मैंने फोरट्रान में शुरू किया। मैं इसे प्यार करता था।

मैंने लिस्प पर स्विच किया। पहले तो मुझे इससे नफरत थी। तब मैंने इसे प्यार करना सीखा, और फोरट्रान से नफरत की।

बाद में पास्कल, सी, सी ++, विभिन्न कोडांतरक, सी #। (वास्तव में मैं सी # से प्यार नहीं करता।)

मुझे लगता है मैं चंचल हूँ?


4

जब लिस्प का निर्माण किया गया था तो उन्होंने गणित से शुरू किया था, न कि कंप्यूटर विज्ञान (जो वास्तव में अभी तक मौजूद नहीं था)। और लिस्प टीम को कुछ चीजें सही लगीं। लिस्प का कचरा संग्रह 1960 में हुआ था! उन्होंने वाकई बहुत अच्छा काम किया।

मुझे लगता है कि द इटरनल फ्लेम गीत इसे कवर करता है।


जाहिर तौर पर लिस्प पहली जीसीड भाषा थी।
मार्क सी

2

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

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

OOP प्रणाली, CLOS , लचीलेपन के मामले में अपनी खुद की एक श्रेणी में है। स्वाद पाने के बाद अल्पविकसित C ++ / Java / C # OOP पर वापस जाना बहुत मुश्किल है। GoF  5 डिज़ाइन पैटर्न अनावश्यक हो जाते हैं क्योंकि उन्हें सीधे और सीधे व्यक्त किया जा सकता है।

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

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

बुद्धिमान डेवलपर्स के साथ लिशरेन्स के लिए लिस्प के साथ प्रतिस्पर्धा में अब आधुनिक भाषाएं हैं: पायथन, लुआ , एर्लांग , हास्केल , और ओकेमेल । लेकिन कोई भी परिपक्वता, अनुकूलनशीलता, कई मानकों-अनुरूप कार्यान्वयन और गति का एक ही मिश्रण प्रदान नहीं करता है।


1

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

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