आपका लिस्प वर्कफ़्लो कैसा दिखता है? [बन्द है]


39

मैं इस समय लिस्प सीख रहा हूं, जो लोकोमोटिव बेसिक -> Z80 असेंबलर -> पास्कल -> सी -> पर्ल -> सी # -> रूबी है जो एक भाषा प्रगति से आ रहा है। मेरा दृष्टिकोण एक साथ है:

  • SBCL, QuickLisp, closure-html और drakma का उपयोग करके एक साधारण वेब-स्क्रैपर लिखें
  • घड़ी SICP व्याख्यान

मुझे लगता है कि यह अच्छी तरह से काम कर रहा है; मैं अच्छा 'लिस्प गॉगल्स' विकसित कर रहा हूं, जिसमें मैं अब लिस्प को यथोचित आसानी से पढ़ सकता हूं। मुझे यह भी महसूस हो रहा है कि लिस्प पारिस्थितिकी तंत्र कैसे काम करता है, उदाहरण के लिए निर्भरता के लिए क्विकलाइस्प।

हालांकि, मैं वास्तव में लापता हूं, इस बात की समझ है कि एक अनुभवी लिस्पर वास्तव में कैसे काम करता है

जब मैं .NET के लिए कोडिंग करता हूं, तो मेरे पास ReSharper और VisualSVN के साथ विजुअल स्टूडियो स्थापित होता है। मैं परीक्षण लिखता हूं, मैं लागू करता हूं, मैं रिफ्लेक्टर करता हूं, मैं प्रतिबद्ध हूं। फिर जब मैं एक कहानी को पूरा करने के लिए पर्याप्त हो जाता हूं, तो मैं कुछ AUAT लिखता हूं। फिर मैं परीक्षण और उम्मीद अनुमोदन के लिए ग्राहक को नई कार्यक्षमता को आगे बढ़ाने के लिए TeamCity पर रिलीज़ बिल्ड को किक करता हूं। यदि यह एक ऐप है जिसे इंस्टॉलर की आवश्यकता है, तो मैं या तो वाईएक्स या इनोसेटसेट का उपयोग करता हूं, जाहिर है कि सीआई सिस्टम के माध्यम से इंस्टॉलर का निर्माण कर रहा है।

तो, मेरा सवाल यह है: एक अनुभवी लिस्पर के रूप में, आपका वर्कफ़्लो कैसा दिखता है? क्या आप ज्यादातर REPL में काम करते हैं, या संपादक में? आप इकाई परीक्षण कैसे करते हैं? लगातार मेल जोल? पैकेजिंग और तैनाती जब आप अपने डेस्क पर बैठते हैं, तो एक तरफ कॉफी का मग भापते हुए और दूसरी तरफ जॉन मैकार्थी की एक फ्रेम की हुई फोटो, यह क्या है जो आप करते हैं ?

वर्तमान में, मुझे लगता है कि मैं लिस्प कोडिंग के साथ पकड़ रहा हूं, लेकिन लिस्प विकास नहीं ...


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

जवाबों:


13

Comp.lang.lisp और Lisp फोरम पर अधिकांश लोग Emacs और SLIME के ​​संयोजन की सलाह देते हैं, यह मानते हुए कि आप Allegro या LispWorks जैसे व्यावसायिक कार्यान्वयन के लिए भुगतान नहीं करना चाहते हैं। SLIME वीडियो काम करने की प्रक्रिया को दिखाता है। मैं घर पर व्यक्तिगत कार्यक्रमों को विकसित करने के लिए Emacs और SLIME का उपयोग करता हूं, और संयोजन बहुत कुशल हो सकता है।

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


4

मैं मुख्य रूप से क्लोजर के साथ काम करता हूं, और यहां मेरा सेटअप है:

  1. ग्रहण आईडीई (मैं इसका उपयोग करता हूं क्योंकि मैं बहुत सारे जावा काम भी करता हूं, कभी-कभी क्लोजर के रूप में एक ही परियोजना में)
  2. क्लोजर के लिए वामावर्त प्लगइन (इसमें एक REPL शामिल है)
  3. निर्भरता और निर्माण प्रबंधन के लिए मावेन
  4. स्रोत कोड नियंत्रण के लिए इगिट

कोडिंग करते समय वर्कफ़्लो आमतौर पर इस तरह होता है:

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

कुल मिलाकर यह विकास के दौरान REPL के अधिक संवादात्मक उपयोग के अलावा एक नियमित जावा / सी # वर्कफ़्लो से बहुत अलग नहीं है।


शायद आप nrepl + emacs का उल्लेख कर सकते हैं: जहाँ तक मुझे पता है कि यह एक ऐसा वातावरण देता है जो कीचड़ के समान है।
जियोर्जियो

4

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

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

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

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

एक शुरुआत के लिए, लिस्प, अजगर और माणिक पर एक जीत की अधिकता नहीं है, लेकिन जैसा कि आप इसके साथ अधिक अनुभव करते हैं, आपको कम वातावरण पर भारी जीत मिलती है।

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


2

मैं एक ऐसे संपादक के साथ काम करता हूं, जिसका एक REPL से संबंध है (आम तौर पर, emacs में संपादन और SLIME का उपयोग एक सामान्य लिस्प वातावरण के पुल के रूप में)। मैं "नीचे में" और "शीर्ष पर" दोनों शुरू करने की दिशा में हूं, जैसे ही मैं जाता हूं डिजाइन को संशोधित करते हुए, मध्य की ओर काम करता है।

परीक्षण के लिए के रूप में, मैं क्यों एक REPL है। मुझे लगता है कि यह कोड परीक्षण में मदद करता है जैसे मैं जाता हूं। मैं कभी-कभी अधिक औपचारिक परीक्षण या बेंचमार्क लिखूंगा जैसे कि मैं जाता हूं (आमतौर पर एक बार मैं अनुकूलन चरण में होता हूं)। एक धीमी गति से, कार्यक्षमता का एक अच्छा-ज्ञात कार्यान्वयन, एक अनुकूलित संस्करण के लिए कोड के साथ प्रयोग (एक संपादक विंडो में) करें, जो कि झूठ बोल रहे लिस्प कोड को भेजें और जांचें कि यह दोनों तेज है और धीमी के समान परिणाम देता है। कोड।

जहाँ तक पैकेजिंग जाती है, मेरे पास ASDF-installable प्रोजेक्ट्स को पैक करने में मदद करने के लिए कुछ उपयोगिता कोड हैं, उन्हें डाउनलोड रिपॉजिटरी में थप्पड़ मारें और वर्जनिंग को हैंडल करें।

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