2009-10-23 80 views
18

我一直在使用Clojure一段時間,並想創建一些比玩具更大更復雜的項目。過去幾年來我一直在使用Java,並習慣於IDE爲我做的事情 - 編譯大量類,將它們打包成jar,爲用戶創建批處理文件以啓動它們。Clojure開發:IDE還是REPL?

當我看看Clojure開發的例子時,他們似乎沿着加載文件到REPL的路線,看看它們是如何工作的,編輯文件,重新加載,重複。 Nary在任何地方生成一個類或jar。例如,在Stuart Halloway出色的「Programming Clojure」中,我找不到一個「:gen-class」的例子。我使用過的Clojure IDE(ClojureBox和enclojure NetBeans插件)似乎可以促進相同的工作流程。

這是故意的嗎?這些工具是不是太成熟了,或者我只是沒有「得到它」?

我想聽聽一些工作流程的例子,他們已經創建了一些非常規程序供常規用戶(而不是其他開發人員)使用,如果可能的話。

感謝您分享您的意見。

+0

如果你想傳遞一個jar文件到您的最終用戶,只需使用「雷音uberjar」。您仍然可以使用REPL構建程序,但最終用戶不應該使用REPL來使用該程序。 – 2016-06-16 17:43:17

回答

12

我覺得真的有2個問題在這裏:

A)如何部署(以及建立和管理的依賴)。我所能說的就是看其他具有類似目標/域名的項目並複製它們。

B)工作流程:

我的工作流程是這樣的:

  1. 打開一個文件,寫一些高水平的一廂情願聲明寫一些功能來支持它

  2. 啓動

2.5將函數定義複製爲REPL as我創建它們

  • 打開另外一個文件,寫一些基本的測試,以檢查函數工作
  • 3.5拷貝這些到REPL

  • 在構建測試的兩個緩衝區之間進行迭代,直到示例和程序朝向最終目標。這些最終成爲類似的活動,我知道我已經完成了。

  • 包裹輔助文件起來deftest

  • 現在,當我回來的一個月,我可以只運行我的測試,而且要快樂!保存您的REPL緩衝區可以提供一些價值。目前這對我來說很有用,我很樂於接受更好的方法。

    至於IDE與REPL的選擇 - 大多數IDE都有插件,它們具有REPL,所以我不確定它是一種選擇還是其他選擇 - 實際上它只是關於哪種文本編輯器具有生產力,以及您希望如何管理你的項目結構。沒有任何'這樣做'的結構預製AFAIK,所以在這一點上更容易看到具體的項目(如Clojure本身,半影或組合或主要網站上列出的任何庫)

    +1

    如果您的編輯器支持將代碼發送到REPL,那麼您可以擺脫複製粘貼(Emacs,vim與vim-fireplace,lighttable)。 – 2013-07-18 01:10:13

    9

    很長時間以來,REPL開發方法一直受到大多數LISP系列(以及其他函數式語言)IDE的鼓勵。其中一些REPL還具有可能與Java IDE相關聯的自動完成功能。

    與標準方法相比,REPL爲您提供了幾項主要優勢。首先,它允許您在程序運行時執行任意代碼,這可以使調試多線程系統變得更簡單。其次,更重要的是,它可以讓您在編寫代碼時輕鬆測試您的功能。您不需要圍繞新函數或類構建框架,您可以直接在REPL中使用它,並查看它如何響應各種用例。

    6

    好吧,首先,幾乎所有編輯器或IDE的任何像樣的開發插件都會爲您提供一種在IDE中使用Clojure REPL的方法,甚至可以允許您將文件加載到REPL進行測試等。不需要選擇其中之一

    Enclojure的確有很長的路要走,但是,大多數人對使用Emacs和包括我自己都非常滿意,Emacs使用Lisp作爲它的配置語言,所以它通常是Lisper最自然的選擇。

    對於具有REPL的語言,使用REPL作爲開發過程的主要部分是常態。編輯文件,將它們加載到REPL中,與它們一起玩,看看是否有作品,漂洗,重複。這是具有像Clojure,Haskell和CL等REPL的語言的主要優點之一。

    至於構建罐子,並編譯Clojure代碼和東西,這很簡單。如果你不想,你甚至不會真的/有/大部分時間編譯Clojure代碼。當你這樣做時,你可以使用gen-class編譯它,然後將它編譯成class文件,然後將它們放入jar中。有大量的例子,甚至教程在interwebs之間傳播。最簡單和最有效的方法是使用Ant之類的東西,編寫一個構建腳本來編譯Clojure代碼併爲您生成.jar。我第一次做到這一點,我認爲這很難做到,但實際上很簡單。我只看了一下Clojure和Clojure-Contrib Ant構建文件,並引用了我需要的其他所有東西的Ant幫助頁面。

    我應該提到的一件事情是,事實上,Enclojure /確實/實際上爲您構建了可執行文件.jar文件,如果您請求這樣做的話。我相信你以前會習慣的更高級的東西將會被添加。他們確實還很新。

    4

    我同時使用Eclipse IDE和提供REPL的逆時針插件。如果您與Clojure(與我一樣)開發Java代碼,這是一個非常好的組合。

    我一般的做法是:

    在編輯器中
    • 寫的Clojure代碼保持一個REPL開放測試的東西出來(Ctrl + Enter在這裏有用的快捷方式:它執行任何代碼中選擇您的在REPL編輯)
    • 使用通用的IDE工具,項目管理,構建,測試,供應鏈管理等

    有時候,我也在REPL純粹的工作。這通常更適合快速測試。如果我特別喜歡一段測試代碼,我會簡單地將它從REPL複製/粘貼到我的測試套件中。

  • 0

    「當我看看Clojure開發的例子時,他們似乎沿着加載文件進入REPL的路線,看看它們是如何工作的,編輯文件,重新加載,重複。任何地方......我希望聽到一些工作流程例子,如果可能的話,那些已經創建了一些非常規用戶(而非其他開發人員)使用的非常規程序的人們。「

    Debugging clojure functions which are invoked in java code (eclipse)的示例很簡單,但是它演示瞭如何在eclipse中鏈接項目,以便可以從java中調用clojure/scala功能。

    1

    在Eclipse中,每次在項目中保存文件時都可以運行單元測試(或任何程序)。整個過程不到一秒鐘 - 對於測試驅動開發非常有用,並且在大多數情況下不需要剪切並粘貼到REPL中。另外你可以保持測試! :-)

    你會想要使用cake來避免每次啓動測試時的JVM啓動時間。您可以在命令行上運行cake test,或者在項目中保存任何文件時讓Eclipse爲您運行它。

    我通過使用Leiningen設置了一個項目,安裝cake並安裝了counterclockwise Eclipse插件來實現這個目標。要設置Eclipse在每次保存時運行測試,請選擇Project-> Properties-> Builders,單擊New,選擇Program,將其命名爲'run tests',將路徑添加到位置下方的cake,選擇工作目錄項目,並將test添加到可選參數中。在「Build Options」標籤下,選擇「Auto Auto Builds」。

    我從Jeff Younker的書「敏捷Python開發的基礎」中得到了這個概念。已經有20年的Emacs人了,但是這個訣竅使得Eclipse最近成爲了我的工作流程的前沿。


    更新:大約一年後,我現在用Midje一起做同樣的事情,而與這兩個Emacs和Eclipse的開發lazytest選項。

    1

    我所做的是與Leiningen一起創建一個項目。如果你只是想暫時離開,你可以輸入lein repl,你的項目類路徑將被設置爲該repl。

    實際上,我使用Emacs,粘液和swank clojure。導航到該項目後,只需鍵入M-x clojure-jack-in。這啓動了swank服務器,並且粘液連接到它並且你有一個緩衝區中的repl。當然,這並不比在shell中運行repl更有價值。你得到的是在另一個緩衝區編寫代碼的能力,以及使用鍵綁定選擇sexps或更大的單元並在repl中執行它們以查看它是否有效的能力。另外粘液給你方便的鍵綁定常見的任務。有關更多信息,請參閱github上的swank-clojure。

    JohnJ,你可以在Emacs中做同樣的事情。其實這句話可能是一種重言式。

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

    這裏是別人的榜樣之後 - 保存 - 掛鉤的git:https://gist.github.com/449668