क्या आप वास्तविक दुनिया के अनुप्रयोग के लिए (LISP की) एक बोली का उपयोग करेंगे? कहां और क्यों? [बन्द है]


31

LISP (और बोलियाँ जैसे स्कीम, कॉमन LISP और Clojure) को उद्योग समर्थन नहीं मिला है, भले ही वे काफ़ी अच्छी सामाजिक भाषाएँ हैं। (फिलहाल, ऐसा लगता है जैसे वे कुछ कर्षण प्राप्त कर रहे हैं)।

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


6
क्या Emacs को "वास्तविक दुनिया" के रूप में गिना जाता है? gnu.org/software/emacs/emacs-lisp-intro
S.Lott 19

1
@ एस.लॉट: हाँ। यदि आप Emacs के लिए एक्सटेंशन बनाने के लिए elisp का उपयोग करते हैं, तो यह ठीक है और LISP बोली का एक आवेदन है
Anto

जीएनयू गुइल बिल्कुल इस उद्देश्य के लिए है।

1
जबकि दिलचस्प है, मुझे नहीं लगता कि यह प्रश्न इस साइट के लिए उपयुक्त है। कई कारण: 1- बहुत व्यापक, 2- यह उत्तर की एक सूची को आमंत्रित करता है, 3- यह तय करने का कोई स्पष्ट तरीका नहीं है कि "सही" उत्तर क्या है, 4- समय में स्थानीयकरण ("बहुत उद्योग समर्थन प्राप्त नहीं किया है")। 5- यह चर्चा और बहस को आमंत्रित करता है।
एंड्रेस एफ।

जवाबों:


18

आप एक उत्पादन कार्यक्रम के लिए एक LISP बोली का उपयोग करेंगे?

पूर्ण रूप से

किस तरह का कार्यक्रम और क्यों?

लिस्प एक सामान्य उद्देश्य गतिशील भाषा है। आज, इसमें अन्य सामान्य प्रयोजन की गतिशील भाषाओं की तरह ही बुनियादी कठिनाइयाँ हैं जो Microsoft द्वारा प्रकाशित नहीं की गई हैं: मूल सूत्र, GUI एकीकरण, GC का निर्धारक ऑपरेशन और छोटे मेमोरी फुटप्रिंट्स।

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

लिस्पवर्क्स और फ्रांज कॉमन लिस्प - वाणिज्यिक उत्पाद - सफलता की डिग्री के लिए जीयूआई में एकीकृत। उन्हें खरीदने के लिए $ $ नहीं होने पर, मुझे नहीं पता कि यह कितना अच्छा काम करता है। मुझे संदेह है कि वे काफी अच्छी तरह से काम करते हैं ...

एक नियतकालिक जीसी ऑपरेशन किया जा सकता है (यह जावा में सफलता के कुछ स्तर तक किया जाता है), लेकिन मुझे नहीं पता कि मौजूदा लिस्प सिस्टम (बनाए रखने वाले) के पास ऐसा करने के लिए कोई कोड है।

छोटे स्मृति पदचिह्न मुझे लगता है कि कुछ लिस्प्स द्वारा हासिल किया गया है।

मेरा मूल बिंदु है, आम लिस्प तकनीकी रूप से उत्पादन प्रणाली बनाने के लिए तैयार है। और यह करता है

डेवलपर्स के विशाल बहुमत से (एक को लेने) गतिशील भाषाओं, मैक्रोज़, कोष्ठक, पसंदीदा आईडीई की कमी, कॉलेज में बुरा अनुभव, इसमें कई नौकरियां नहीं हैं, और फिर इसका उपयोग न करें।

व्यक्तिगत रूप से मैं एक टीम के माहौल में जमीन से आम लिस्प में एक पूर्ण उत्पादन प्रणाली के निर्माण पर कूदूंगा।

संपादित करें: मैंने वास्तव में उत्तर नहीं दिया कि लिस्प अन्य भाषाओं के विपरीत क्यों है।

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

एक सरल उदाहरण पायथन की लंबाई-सूची का दिनचर्या है। पायथन दृष्टिकोण को कॉल करना है len(mysequence)। लेकिन, अगर हम इसके बारे में सोचते हैं, तो लंबाई अनुक्रम की एक संपत्ति है। तो, mysequence.len()एक अधिक उपयुक्त विचार है। लिस्प अनिवार्य रूप से उस वाक्यात्मक अंतर को हटा देता है। (length thing)दोनों फ़ंक्शन कॉल सिंटैक्स और विधि सिंटैक्स है। बेशक, कुछ लोगों को निराशा होती है और वे वाक्यगत अंतर चाहते हैं। मैं बल्कि नियमितता होगा।

edit2: मैंने अपने एमएस थीसिस के हिस्से को डेस्कटॉप पर कॉमन लिस्प में चलाया और इसे अब तक काम करने की खुशी है।


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

4
@ तैयार: हाँ, वे ग्रीनस्पून के nth लॉ और jwz के लॉ हैं।
पॉल नाथन

2
इनमें से बहुत से क्लोजर द्वारा हल किए गए हैं, केवल विशेष रूप से संगत होने और जावा के प्रतिस्थापन के लिए डिज़ाइन किया गया है। लेकिन निश्चित रूप से, जेवीएम के लिए भी योजना और सीएल कार्यान्वयन हैं (जैसे कावा, एबीसीएल)।
जोर्ग डब्ल्यू मित्तग

4
क्लोजर मुझे बहुत परेशान कर रहा है क्योंकि यह अभी तक एक और विखंडन है।
पॉल नाथन

विखंडन कोई बुरी बात नहीं है। क्लोजर में वास्तव में कष्टप्रद है बिंदीदार जोड़े की कमी है। क्या इसे इतनी मूलभूत चीज़ के बिना लिस्प जैसी भाषा के रूप में गिना जा सकता है?
एसके-तर्क

11

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

मैंने पाया है कि पिछले एक साल में (जावा और सी # के साथ बहुत अनुभव के बाद) क्लोजर सीखने के लिए यह एक बहुत ही ज्ञानवर्धक अनुभव है। इसके मुख्य कारण हैं:

  • इसमें कार्यात्मक प्रोग्रामिंग (अधिकांश अन्य लिस्प्स की तुलना में अधिक) पर काफी जोर दिया गया है । लेखक और बीडीएफएल रिच हिकी ने अक्सर हास्केल को भाषा डिजाइन के लिए उनकी प्रेरणाओं में से एक के रूप में उद्धृत किया है, जिसका अर्थ है कि आपको पूरी तरह से अपरिवर्तनीय डेटा संरचनाएं और आलसी अनंत अनुक्रम आदि जैसी चीजें मिलती हैं।
  • मैक्रो मेटाप्रोग्रामिंग - लिस्प "कोड डेटा है" दर्शन को समझना मुश्किल है जब तक कि आपने वास्तव में इसका अनुभव नहीं किया है, लेकिन यह एक कारण है कि लिस्प्स बहुत अभिव्यंजक और उत्पादक हैं। आपके पास मूल रूप से अपने समस्या डोमेन से मेल खाने के लिए भाषा का विस्तार करने की शक्ति है।
  • मल्टी-कोर कंसिस्टेंसी के लिए शानदार समर्थन - मुझे वास्तव में लगता है कि क्लोजर अभी समवर्ती प्रोग्रामिंग के लिए सबसे अच्छी भाषा है। इसके बारे में ज्ञानवर्धक प्रस्तुति के लिए http://www.infoq.com/pretations/Value-Identity-State-Rich-Hickey देखें
  • REPL में इंटरएक्टिव विकास अनुप्रयोगों के निर्माण का एक शानदार, उत्पादक तरीका है। यह आपको अपने चल रहे एप्लिकेशन कोड को गतिशील रूप से संशोधित करने और लाइव डेटा संरचनाओं का निरीक्षण करने की शक्ति का एक वास्तविक एहसास देता है .....

यह निम्नलिखित कारणों से वास्तविक उत्पादन उपयोग के लिए एक व्यावहारिक विकल्प प्रतीत होता है:

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

8

अगर यह नौकरी के लिए सबसे अच्छा विकल्प था तो मैं LISP का उपयोग करूंगा। बस कुछ चीजें जो "सर्वश्रेष्ठ विकल्प" को प्रभावित करती हैं:

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

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


मैं आपसे सहमत हूँ कि उत्पादकता अक्सर उपलब्ध उपकरणों और पुस्तकालयों से अधिक प्रभावित होती है भाषा की तुलना में (बशर्ते भाषा कुछ बुनियादी कार्यक्षमता प्रदान करती है)।
जियोर्जियो

6

पूर्ण रूप से। पॉल ग्राहम इसे अच्छी तरह से समझाते हैं

... 1995 में वापस, हमें कुछ पता था कि मुझे नहीं लगता कि हमारे प्रतियोगी समझ गए थे, और अब भी कुछ समझ में आता है: जब आप सॉफ्टवेयर लिख रहे होते हैं जिसे केवल अपने सर्वर पर चलाना होता है, तो आप अपनी इच्छानुसार किसी भी भाषा का उपयोग कर सकते हैं। ..

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

यदि अन्य कंपनियां लिस्प का उपयोग नहीं करना चाहती हैं, तो बेहतर है। यह हमें एक तकनीकी बढ़त दे सकता है, और हमें हर संभव मदद की जरूरत है ...

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

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

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


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

5

जहाँ: Emacs एक वास्तविक दुनिया का अनुप्रयोग है जो LISP का उपयोग करता है।

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


मैं यह कहकर इस उत्तर का विस्तार करूंगा कि केटस्ट्रोक और क्रियाओं के बीच मानचित्रण को व्यक्त करने के लिए यह अच्छा क्यों था
एंटो

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

4

Macsyma और Autocad दोनों लिस्प की एक बोली पर आधारित हैं। मैं उन्हें 'वास्तविक दुनिया' के साथ-साथ Emacs के रूप में वर्गीकृत करूँगा।


गणितज्ञ लिस्प पर आधारित नहीं है।
रेनर जोसविग

2
ऑटोकैड AutoLISP को एपीआई के रूप में पेश करता है लेकिन यह C ++ और .NET प्रबंधित कोड में लिखा जाता है।
सीएडी

1
@RainerJoswig Macsyma शायद Mathematica के बजाय था।
user40989

2

बिल्कुल मैं इस पर विचार करूंगा। विशेष रूप से नए विकास कार्य के लिए जिसमें कुछ समानांतर कंप्यूटिंग क्षमता थी। इस प्रकार की कार्यात्मक भाषाओं के लिए यह एक प्यारा स्थान है।


2

लिस्प कंपाइलर्स को लागू करने के लिए सबसे अच्छे विकल्पों में से एक है। और, जैसे-जैसे डीएसएल और ईडीएसएल का उपयोग बढ़ रहा है, लिस्प अधिक मूल्यवान होता जा रहा है। मैं अपने सभी डीएसएल-संबंधित कार्यों के लिए एक लिस्प बोली का उपयोग कर रहा हूं।


0

अभी मैं ड्रैगनफ़्ल्व फ्रेमवर्क के माध्यम से अपनी व्यक्तिगत वेब साइट पर Php के प्रतिस्थापन के रूप में newLisp का उपयोग करने की कोशिश कर रहा हूं । अगर मैं यह पता लगा सकता हूं कि अच्छा खेलने के लिए अपाचे को कैसे प्राप्त किया जाए, तो मैं इसका उपयोग करूंगा (वेब ​​सर्वर में निर्मित बहुत अच्छी तरह से काम करता है, लेकिन मैं अपाचे के माध्यम से बहुत काम करूंगा)। और एक बार ऐसा होता है, तो मैं newLisp का उपयोग करूँगा कहीं भी मैं php का उपयोग करूँगा, क्योंकि मुझे फ्लैट पसंद नहीं है और मुझे newLisp पसंद है।

अभी, एंड्रॉइड ऐप्स के लिए क्लोजर एक अच्छा विकल्प नहीं है, लेकिन मुझे पता है कि लोग उस पर काम कर रहे हैं। तो अगर यह पता चल जाता है, तो मैं वास्तविक दुनिया के अनुप्रयोगों के लिए लिस्प की एक बोली का उपयोग करने के लिए एक और जगह होगी ... लेकिन फिर से, यह इसलिए है क्योंकि मुझे सिर्फ जावा पसंद नहीं है।

लेकिन ईमानदारी से, मैं रूबी को लिस्प पसंद करता हूं ... लेकिन यह ज्यादातर समुदाय और प्रलेखन का मामला है।


0

मैंने टैंकन नामक कॉमन लिस्प में एक मालिकाना, वाणिज्यिक एप्लिकेशन को लागू किया, जो माइक्रोसॉफ्ट विंडोज पर एक देशी निष्पादन योग्य के रूप में चलता है।

यह जापानी कांजी पात्रों को याद करने के लिए खुद को प्रशिक्षित करने का कार्यक्रम है।

कार्यक्रम एक पृष्ठभूमि HTTP सर्वर के रूप में चलता है। इस सर्वर का निष्पादन और इसके पृष्ठों पर नेविगेट करना, एक छोटे सिस्टम अधिसूचना क्षेत्र (उर्फ "ट्रे") आइकन अनुप्रयोग द्वारा समन्वित है, जिसे मैंने विज़ुअल सी ++ का उपयोग करके विकसित किया है।

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

लिस्प कार्यक्रम इसकी स्मृति को काफी जटिल सत्र स्थिति में बनाए रखता है जिसमें उपयोगकर्ता के इनपुट इतिहास और विभिन्न वस्तुओं के बीच विभिन्न संबंध होते हैं। लिस्प की वृत्ताकार वस्तु संकेतन ( *print-circle*चर द्वारा सक्षम ) और यह कस्टम CLOS print-objectविधियों में कैसे काम करता है दृढ़ता को लागू करने में एक जबरदस्त मदद है: उपयोगकर्ता डिस्क को फिर से शुरू और फिर से शुरू करने के लिए बचा सकते हैं जहां उन्होंने छोड़ा था। यूआई की स्थिति सहित, सब कुछ सहेजा जाता है। ऑब्जेक्ट ग्राफ, साथ ही साथ साइकिल में बहुत से साझा सबस्ट्रक्चर हैं। इसके अलावा, बहुत से स्थिर क्रॉफ्ट जो कि निरंतर नहीं होने चाहिए, जैसे कि डिक्शनरी एंट्री ऑब्जेक्ट्स की सामग्री। ANSI कॉमन लिस्प कस्टम प्रिंट ऑब्जेक्ट विधियों के साथ, आप उन वस्तुओं के लिए संघनित मुद्रित अभ्यावेदन बना सकते हैं, जो मशीन द्वारा पठनीय हैं,

वेब UI में लगभग कोई जावास्क्रिप्ट का उपयोग नहीं किया गया है। यहां तक ​​कि UI के कुछ हिस्सों को छिपाने और दिखाने के लिए नियंत्रण फ़ॉर्म सबमिशन और HTML को फिर से प्रस्तुत करने के द्वारा किया जाता है। UI स्थिति का प्रत्येक विवरण सर्वर में है और उपयोगकर्ता द्वारा सहेजे जाने पर बना रहता है। HTML का री-जनरेशन बहुत तेज है। यह एक विशाल लिस्प backquote अभिव्यक्ति द्वारा किया जाता है जो एक HTML उत्पादक मैक्रो को खिलाता है। क्लोज़र कॉमन लिस्प (CCL) द्वारा संकलित कोड इतनी तेज़ी से घटित होता है कि आप शायद ही जानते हों कि जब आप कुछ खोलने के लिए UI पर [+] बटन पर क्लिक करते हैं, तो आप एक सर्वर के लिए एक अनुरोध सबमिट कर रहे हैं जो पुन: बनाता है। संपूर्ण दस्तावेज़ पृष्ठ, और स्थानीय दस्तावेज़ तत्व की दृश्यता को बदलने के लिए केवल कुछ स्थानीय जावास्क्रिप्ट नहीं चलाना।

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

CLISP को नहीं छोड़ा गया है; यह अभी भी लाइसेंसिंग बैक एंड को पावर करने के लिए उपयोग किया जाता है, समान कॉमन कोड बेस का उपयोग करते हुए।

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

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

सर्वर पर, CGI- आधारित लाइसेंसिंग सेवा के अलावा, मैं लाइसेंस के प्रबंधन के लिए सरल कमांड लाइन एपीआई हूं। आप लाइसेंस को सूचीबद्ध कर सकते हैं, विशिष्ट लोगों को ढूंढ सकते हैं, और उनकी विशेषताओं को संपादित कर सकते हैं: जैसे कि उपयोगकर्ता को अपवाद देने के लिए अस्थायी लाइसेंस की समाप्ति तिथि को संपादित करना। लाइसेंसिंग बैक-एंड भी ई-मेल जेनरेट करता है। मैंने सर्वर साइड पर सीजीआई से निपटने के लिए किसी भी लाइब्रेरी का उपयोग नहीं किया: अपाचे पर्यावरण चर और कमांड लाइन तर्कों से निपटने के लिए बस हाथ से लुढ़का लिस्प कोड। (हालांकि लाइब्रेरी कोड का उपयोग URL एन्कोडिंग और HTML पीढ़ी से निपटने के लिए किया जाता है।) भंडारण के लिए किसी डेटाबेस का उपयोग नहीं किया जाता है; लाइसेंस एक फ़ाइल में catenated कहा जाता है licenses.lispऔर वह है।


-1

अगर किसी ने मुझे भुगतान किया है, तो सुनिश्चित करें।

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

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