2009-10-23 11 views
18

मैं थोड़ी देर के लिए क्लोजर का उपयोग कर रहा हूं और कुछ ऐसी परियोजनाएं बनाना चाहता हूं जो खिलौनों की तुलना में बड़ी और जटिल हों। मैं पिछले कुछ सालों से जावा का उपयोग कर रहा हूं और मेरे लिए क्या आईडीईई का आदी हो गया है - कई वर्गों को संकलित करें, उन्हें जार में पैकेज करें, उपयोगकर्ताओं को उनके साथ शुरू करने के लिए बैच फाइलें बनाएं।क्लोजर विकास: आईडीई या आरईपीएल?

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

क्या यह जानबूझकर है? क्या उपकरण बहुत अपरिपक्व हैं या क्या मैं इसे "इसे प्राप्त नहीं करता"?

मैं उन लोगों से कुछ काम प्रवाह उदाहरण सुनना चाहता हूं जिन्होंने नियमित उपयोगकर्ताओं (अन्य देवताओं) द्वारा उपयोग किए जाने वाले कुछ गैर-तुच्छ कार्यक्रमों का निर्माण किया है।

आपकी राय साझा करने के लिए धन्यवाद।

+0

आप अपने अन्तिम उपभोक्ता को एक जार फ़ाइल वितरित करने के लिए चाहते हैं, तो बस का उपयोग करें 'lein uberjar':

(add-hook 'after-save-hook etc. 

यहाँ किसी के उदाहरण के बाद बचाने के हुक Git के लिए है। आप प्रोग्राम बनाने के लिए अभी भी आरईपीएल का उपयोग करेंगे, लेकिन अंत उपयोगकर्ता को कार्यक्रम का उपयोग करने के लिए आरईपीएल का उपयोग नहीं करना चाहिए। –

उत्तर

12

मुझे लगता है कि यहां वास्तव में 2 प्रश्न हैं:

ए) कैसे तैनात करने के लिए (और निर्माण और निर्भरता का प्रबंधन)। मैं बस इतना कह सकता हूं कि अन्य लक्ष्यों/डोमेन के साथ अन्य परियोजनाओं को देखें और उन्हें कॉपी करें।

बी) कार्यप्रवाह:

मेरा काम प्रवाह इस तरह है:

  1. किसी फ़ाइल को खोलने और कुछ कार्यों लिख इसे समर्थन करने के लिए कुछ उच्च स्तर इच्छाधारी सोच घोषणाओं लिखने

  2. शुरू

2.5 फ़ंक्शन परिभाषाओं को आरईपीएल के रूप में कॉपी करें मैं बनाने के लिए उन्हें

  1. एक और फ़ाइल को खोलने और समारोह की जांच करने के लिए कुछ बुनियादी परीक्षण लिखने से काम करता है

3,5 प्रति इन आरईपीएल को

  1. एक उदाहरण के लिए परीक्षण और अंतिम लक्ष्य की ओर कार्यक्रम बनाने वाले दो बफर के बीच पुनरावृत्ति। ये अंततः समान गतिविधियां बन जाते हैं और मुझे पता है कि मैं कर चुका हूं।

  2. deftest

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

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

+1

यदि आपका संपादक आरईपीएल को कोड भेजने का समर्थन करता है तो आप कॉपी-पेस्टिंग (Emacs, vim-fireplace, lighttable के साथ vim) से छुटकारा पा सकते हैं। –

9

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

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

6

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

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

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

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

मुझे एक बात का जिक्र करना चाहिए तथ्य यह है कि यदि आप ऐसा करने का अनुरोध करते हैं तो संलग्नक/वास्तव में निष्पादन योग्य .jar फाइलें आपके लिए बनाते हैं। मुझे यकीन है कि भविष्य में आपके द्वारा उपयोग की जाने वाली अधिक उन्नत चीजें शामिल की जाएंगी। वे वास्तव में अभी भी काफी नए हैं।

4

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

मेरे सामान्य दृष्टिकोण है:

संपादक
  • में
    • लिखें Clojure कोड परीक्षण बातें बाहर के लिए एक आरईपीएल खुला रखें (Ctrl + Enter यहाँ एक उपयोगी शॉर्टकट है: जो कुछ कोड में चुना जाता है वह निष्पादित अपने परियोजना प्रबंधन, निर्माण, परीक्षण, एससीएम आदि

    कई बार के लिए आरईपीएल में संपादक) सामान्य आईडीई उपकरण

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

  • 0

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

    Debugging clojure functions which are invoked in java code (eclipse) पर उदाहरण तुच्छ हैं, लेकिन दर्शाते हैं कि कैसे ग्रहण में ऐसे ही एक है कि एक जावा के भीतर से clojure/स्केला कार्यक्षमता आह्वान कर सकते हैं परियोजनाओं लिंक कर सकते हैं।

    1

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

    आप अपने परीक्षण लॉन्च करते समय JVM स्टार्टअप समय से बचने के लिए cake का उपयोग करना चाहेंगे। आप कमांड लाइन पर cake test चला सकते हैं, या जब आप अपनी प्रोजेक्ट में किसी भी फाइल को सहेजते हैं तो एक्लिप्स इसे आपके लिए चलाएं।

    मुझे यह Leiningen के साथ एक प्रोजेक्ट स्थापित करके cake स्थापित करने और counterclockwise ग्रहण प्लगइन स्थापित करने के साथ काम करने के लिए मिला। जब भी आप सहेजते हैं, परीक्षण चलाने के लिए ग्रहण सेट अप करने के लिए, प्रोजेक्ट-> गुण-> बिल्डर्स का चयन करें, नया क्लिक करें, प्रोग्राम का चयन करें, इसे 'रन टेस्ट' जैसे कुछ कहते हैं, स्थान के नीचे cake पर पथ जोड़ें, अपने लिए कार्य निर्देशिका का चयन करें प्रोजेक्ट, और वैकल्पिक तर्कों के लिए test जोड़ें। 'बिल्ड विकल्प' टैब के अंतर्गत, 'ऑटो बिल्ड के दौरान' चुनें।

    मुझे जेफ यन्कर की पुस्तक, "एग्इल पाइथन विकास की नींव" से सामान्य विचार मिला। 20 साल तक एक Emacs आदमी बन गया, लेकिन इस चाल ने हाल ही में मेरे वर्कफ़्लो के सामने ग्रहण रखा है।


    अद्यतन: मोटे तौर पर एक साल बाद, मैं अब दोनों Emacs और ग्रहण के साथ विकसित कर रहा है, जबकि एक ही बात करने के लिए lazytest विकल्प के साथ Midje का उपयोग करें।

    1

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

    वास्तव में, मैं Emacs, कीचड़ और swank क्लोजर का उपयोग करें। प्रोजेक्ट पर नेविगेट करने के बाद, आप बस एम-एक्स क्लोजर-जैक- टाइप करें। यह swank सर्वर शुरू करता है और कीचड़ इसे जोड़ता है और आपके पास एक बफर में एक प्रतिलिपि है। बेशक सिर्फ एक खोल में एक प्रतिलिपि चलाने से अधिक मूल्यवान नहीं है। आपको जो मिलता है वह एक और बफर में कोड लिखने की क्षमता है, और एक कीबाइंडिंग चयन सेक्सप्स या बड़ी इकाइयों के साथ और यह देखने के लिए कि यह काम करता है, उन्हें प्रतिलिपि में निष्पादित करें। इसके अलावा कीचड़ आपको सामान्य कार्यों के लिए आसान कीबाइंडिंग देता है। अधिक जानकारी के लिए github पर swank-clojure देखें।

    जॉनजे, आप Emacs में भी वही कर सकते हैं। असल में यह वाक्यांश शायद एक tautology है। https://gist.github.com/449668