2010-06-06 7 views
28

मैं क्लोजर के साथ एक पालतू परियोजना विकसित कर रहा हूं, लेकिन आश्चर्य है कि क्या मैं अपने वर्कफ़्लो को थोड़ा बढ़ा सकता हूं।कुशल क्लोजर वर्कफ़्लो?

मेरे वर्तमान कार्यप्रवाह (Compojure के साथ):

lein swank साथ
  1. प्रारंभ स्वांक।
  2. Emacs पर जाएं, M-x slime-connect से कनेक्ट करें।
  3. सभी मौजूदा स्रोत फ़ाइलों को एक-एक करके लोड करें। यह जेटी सर्वर और एक एप्लीकेशन भी शुरू करता है।
  4. REPL में कुछ कोड लिखें।
  5. प्रयोगों से संतुष्ट होने पर, मेरे मन में एक निर्माण का एक पूर्ण संस्करण लिखें। Eval (C-c C-c) यह।
  6. नामस्थान पर आरईपीएल स्विच करें जहां यह निर्माण रहता है और इसका परीक्षण करता है।
  7. ब्राउज़र पर स्विच करें और प्रभावित पृष्ठ के साथ ब्राउज़र टैब पुनः लोड करें।
  8. कोड को ट्वीक करें, इसे eval करें, ब्राउज़र में चेक करें।
  9. उपर्युक्त में से कोई भी दोहराएं।

इसके साथ खीज की एक संख्या हैं:

  1. मैं Emacs और ब्राउज़र के बीच स्विच करने (या ब्राउज़र अगर मैं एक से अधिक ब्राउज़र के साथ templating जैसी चीजों का परीक्षण कर रहा हूँ) हर समय नहीं है। क्या इसे स्वचालित करने के लिए कोई आम मुहावरे है? मेरे पास एक जावास्क्रिप्ट बिट होता था जो लगातार पृष्ठ को फिर से लोड करता था, लेकिन यह सीमित उपयोगिता है, जाहिर है, जब मुझे कुछ सेकंड से अधिक समय तक पृष्ठ से बातचीत करना होता है।
  2. जब मैं प्रयोग करता हूं और परीक्षण कार्यों को लिखता हूं तो मेरा जेवीएम उदाहरण "गंदे" बन जाता है। असल में नामस्थान प्रदूषित हो जाते हैं, खासकर यदि मैं नामस्थानों के बीच कार्यों को पुन: सक्रिय और स्थानांतरित कर रहा हूं। यह प्रतीक टकराव का कारण बन सकता है और मुझे स्वैंक को पुनरारंभ करने की आवश्यकता है। क्या मैं एक प्रतीक को मिटा सकता हूं?
  3. मैं स्वैंक को पुनरारंभ करने पर सभी स्रोत फ़ाइलों को एक-एक करके (C-c C-k) लोड करता हूं। मुझे संदेह है कि मैं यह सब गलत कर रहा हूँ।
  4. आरईपीएल और फ़ाइल संपादक के बीच स्विचिंग थोड़ा परेशान हो सकता है, खासकर जब मेरे पास ब्राउज़र के साथ-साथ कई Emacs टैब खुलते हैं।

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

पी.एस.

मैं भी, इससे पहले कि Vimclojure का इस्तेमाल किया है तो Vimclojure आधारित workflows भी स्वागत है।

उत्तर

19

नहीं एक पूरा कार्यप्रवाह विवरण, बस कुछ विचार:

  1. यह ns-unmap समारोह के साथ एक नाम स्थान से एक वार दूर करने के लिए संभव है। अतिरिक्त सुविधा के लिए, undef मैक्रो इसके शीर्ष पर बनाया जा सकता है उदा। इस तरह:

    (defmacro undef [& syms] 
        `(do [email protected](map (fn [s] `(ns-unmap *ns* '~s)) syms))) 
    

    ns-unalias भी रुचि का हो सकता है।

  2. उनमें से प्रत्येक में सी-सी सी-के करने के लिए नामस्थान रखने वाली फ़ाइलों के माध्यम से जाने का कोई कारण नहीं है; आप RE12 पर केवल require नामस्थानों की आवश्यकता हो सकती है।

    इसके अलावा, आप कीचड़ आरईपीएल में कुछ वर्ण लिखने और फिर उपयोग करें यदि एम पी/एम एन इतिहास ब्राउज़ करने के लिए, केवल आप ही हाथ से दर्ज किया गया टेक्स्ट की प्रारंभिक बिट मिलान प्रविष्टियों प्रदर्शित किया जाएगा। यह पेरेडिट के साथ संगत है (पिछला समापन ब्रैकेट एक समस्या नहीं होगी)। इसलिए, यदि आप शुरुआत में एक बड़ी आवश्यकताएं तैयार करते हैं - (require '[foo :as f] '[bar :as b] '[clojure.contrib.sql :as sql] ...) - फिर स्वैंक को पुनरारंभ करने के बाद, आपको केवल (require '[f जैसे कुछ टाइप करना है और फिर से REPL प्रॉम्प्ट पर उस फॉर्म को लाने के लिए एम-पी दबाएं।

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

  3. आपको कीचड़ आरईपीएल के साथ एक पॉप अप विंडो जब आप एक कीचड़-सक्षम बफर में हैं बनाने के लिए सी सी सी जेड उपयोग कर सकते हैं। साथ ही, यदि आप पहले से नहीं हैं तो आपको ido का उपयोग करने का प्रयास करना चाहिए। मैं एक कोड बफर के साथ स्क्रीन के बाईं ओर एक खिड़की में खुलता हूं और दाईं ओर एक आरईपीएल बफर के साथ काम करता हूं; windmove-left और windmove-right कुछ सुविधाजनक कुंजी से बंधे हुए, मैं बहुत खुश हूं। अगर मुझे अक्सर अतिरिक्त बफर देखने की ज़रूरत है, तो मैं अतिरिक्त Emacs फ्रेम का उपयोग करता हूं।

  4. संयोग से, मैं lein swank सामान्य रूप से उपयोग नहीं करता, मैं अपने कस्टम clojure-project फ़ंक्शन (फिल हैगबर्ग के मूल का एक ट्वीड संस्करण) पसंद करता हूं। अवसर पर, मुझे इसे सुधारने की इच्छा महसूस होती है ... शायद मैं अगली बार प्रति परियोजना import/require स्वचालन से निपटूंगा। ;-)

5

मैं लें बारे में निश्चित नहीं हूँ, लेकिन Maven में आप repl लिपि (replScript config परम) का नाम निर्दिष्ट कर सकता है, कि जो आज्ञा आरईपीएल & स्वांक की शुरुआत पर निष्पादित किया जाएगा निर्दिष्ट कर सकते हैं ... और यदि आपके पास अपनी प्रोजेक्ट के लिए अलग नेमस्पेस है, तो आप अपने नामस्थान ढूंढने और उन्हें लोड करने के लिए clojure.contrib.find-namespaces से फ़ंक्शंस का उपयोग कर सकते हैं ....

संबंधित मुद्दे