18

私はしばらくの間Clojureを使用していて、おもちゃよりも大きくて複雑なプロジェクトをいくつか作成したいと思っています。私は過去数年間Javaを使用しており、IDEの機能に慣れてきました。多くのクラスをコンパイルし、それらをjarにパッケージ化し、ユーザーがそれらを開始するためのバッチファイルを作成します。

Clojureでの開発の例を見ると、それらはREPLへのファイルのロードの線に沿っているように見えます。それらがどのように機能するかを確認し、ファイルを編集し、リロードし、繰り返します。どこでも生成されるクラスまたはjarをNaryします。たとえば、スチュアート・ハローウェイの素晴らしい「プログラミングClojure」では、「:gen-class」の例を1つも見つけることができませんでした。私が使用したClojureIDE(ClojureBoxとenclojure NetBeansプラグイン)は、同じワークフローを促進しているようです。

これは意図的なものですか?ツールが未熟すぎるのでしょうか、それとも単に「入手」しないのでしょうか。

可能であれば、通常のユーザー(他の開発者ではない)が使用する重要なプログラムを作成した人々から、ワークフローの例をいくつか聞きたいと思います。

ご意見をお寄せいただきありがとうございます。

4

7 に答える 7

12

ここには本当に2つの質問があると思います。

A)デプロイする方法(および依存関係を構築および管理する方法)。私が言えるのは、同様の目標/ドメインを持つ他のプロジェクトを見て、それらをコピーすることだけです。

B)ワークフロー:

私のワークフローは次のようになります。

  1. ファイルを開いて、いくつかの高レベルの希望的観測宣言を書きます

  2. それをサポートするためにいくつかの関数を書き始めます

2.5関数定義を作成するときにREPLにコピーします

  1. 別のファイルを開き、いくつかの基本的なテストを記述して、関数が機能することを確認します

3.5これらをREPLにコピーします

  1. 例までのテストと最終目標に向けたプログラムを構築する2つのバッファー間を繰り返します。これらは最終的には同様の活動になり、私は完了したことを知っています。

  2. 二次ファイルをdeftestでラップします

今、1か月後に戻ってきたら、テストを実行して幸せになれます。REPLバッファーを保存すると、わずかな労力である程度の価値が得られます。それが現在私にとってうまくいくことであり、より良いアプローチについて教育を受けてうれしいです。

IDEとREPLの選択に関しては、ほとんどのIDEにはREPLを備えたプラグインがあるため、どちらを選択するかはわかりません。実際には、生産性の高いテキストエディタと、プロジェクト構造の管理方法についてです。 。「このようにする」構造は事前に作成されたAFAIKがないため、この時点で特定のプロジェクト(Clojure自体、半影、compojure、またはメインサイトにリストされているライブラリなど)を簡単に確認できます。

于 2009-10-23T01:46:11.337 に答える
9

REPL開発アプローチは、長い間、ほとんどのLISPファミリー(および他の関数型言語)IDEによって推奨されてきました。これらのREPLの一部には、JavaIDEに関連付けることができるオートコンプリート機能も備わっています。

REPLには、標準的なアプローチに比べて2つの大きな利点があります。1つ目は、プログラムの実行時に任意のコードを実行できるため、マルチスレッドシステムのデバッグがはるかに簡単になることです。次に、さらに重要なことに、コーディング中に関数を簡単にテストできます。新しい関数やクラスを中心にフレームワークを構築する必要はありません。REPLで直接操作して、さまざまなユースケースにどのように対応するかを確認できます。

于 2009-10-23T00:59:44.580 に答える
6

さて、最初に、エディターまたはIDE用の実質的に適切な開発プラグインは、IDE内からClojureREPLを使用する方法を提供します。おそらく、テストなどのためにファイルをREPLにロードすることもできます。どちらかを選択する必要はありません。

Enclojureは長い道のりを進んでいます、それは確かです。しかし、私を含め、ほとんどの人はEmacsの使用に完全に満足しています。Emacsは構成言語としてLispを使用しているので、通常はLisperにとって最も自然な選択です。

REPLを持つ言語の場合、開発プロセスの主要部分としてREPLを使用するのが一般的です。ファイルを編集し、REPLにロードし、それらを試して、作業、すすぎ、繰り返しがあるかどうかを確認します。これは、Clojure、Haskell、CLなどのREPLを使用する言語の主な利点の1つです。

jarの作成、Clojureコードなどのコンパイルに関しては、それは簡単です。必要がなければ、ほとんどの場合、Clojureコードをコンパイルすることは実際には/have/しません。その場合、gen-classを使用してAOTコンパイルします。これにより、クラスファイルにコンパイルされ、jarファイルに入れることができます。たくさんの例があり、チュートリアルでさえインターウェブに広がっています。最も簡単で効率的な方法は、Antのようなものを使用し、Clojureコードをコンパイルして.jarを生成するビルドスクリプトを作成することです。初めてやった時は大変だと思いましたが、実はとてもシンプルでした。私はClojureとClojure-ContribAntビルドファイルを見て、必要な他のすべてについてAntヘルプページを参照しました。

私が言及しなければならないことの1つは、Enclojureが実際に実行可能な.jarファイルをビルドするように要求した場合、それをビルドするという事実です。あなたが慣れ親しんでいるより高度なものが将来追加されると確信しています。確かに、それらはまだかなり新しいものです。

于 2009-10-23T03:24:23.900 に答える
4

私は両方を使用します-EclipseIDEとREPLを提供する反時計回りのプラグイン。これは、Clojureと一緒にJavaコードを開発する場合(私がそうするように)、特に素晴らしい組み合わせです。

私の一般的なアプローチは次のとおりです。

  • エディターでClojureコードを書く
  • テストのためにREPLを開いたままにします(ここではCtrl + Enterが便利なショートカットです。REPLのエディターで選択されたコードを実行します)
  • プロジェクト管理、構築、テスト、SCMなどに汎用IDEツールを使用します。

時々、私は純粋にREPLで働いています。これは通常、物事をすばやくテストするのに適しています。テストコードが特に気に入った場合は、REPLからテストスイートにコピーして貼り付けます。

于 2011-02-02T20:18:36.287 に答える
1

Eclipseを使用すると、プロジェクトにファイルを保存するたびに単体テスト(または任意のプログラム)を実行できます。プロセス全体は1秒もかからず、テスト駆動開発に最適であり、ほとんどの状況でREPLにカットアンドペーストする必要がありません。さらに、テストを続けることができます!:-)

テストを起動するたびにJVMの起動時間を回避するために、cakeを使用することをお勧めします。コマンドラインで実行cake testすることも、プロジェクトにファイルを保存するときにEclipseに実行させることもできます。

Leiningenでプロジェクトをセットアップし、cakeをインストールし、反時計回りのEclipseプラグインをインストールすることで、これを機能させることができました。保存するたびにテストを実行するようにEclipseを設定するには、[プロジェクト]->[プロパティ]->[ビルダー]を選択し、[新規]をクリックして、[プログラム]を選択し、「テストの実行」のように呼び出し、cake[場所]の下にパスを追加して、プロジェクトの作業ディレクトリを選択します、およびtestオプションの引数に追加します。[ビルドオプション]タブで、[自動ビルド中]を選択します。

これについての一般的な考えは、JeffYounkerの著書「FoundationsofAgilePythonDevelopment」から得ました。20年間Emacsの人間でしたが、このトリックにより、最近Eclipseが私のワークフローの最前線に置かれました。


更新:およそ1年後、私は現在、EmacsとEclipseの両方で開発している間、同じことを行うために最も怠惰なオプションでMidjeを使用しています。

于 2011-11-03T19:27:18.777 に答える
1

私がやっていることは、ライニンゲンと一緒にプロジェクトを作成することです。しばらくの間、たたきたい場合は、lein replと入力するだけで、プロジェクトのクラスパスがそのrepl用に設定されます。

実際には、Emacs、slime、swankclojureを使用しています。プロジェクトに移動した後、Mxclojure-jack-inと入力するだけです。これにより、swankサーバーが起動し、slimeがそれに接続し、バッファーにreplがあります。もちろん、それだけでは、シェルでreplを実行する以上の価値はありません。あなたが得るものは、別のバッファにコードを書く能力であり、キーバインディングを使用して、sexpsまたはより大きなユニットを選択し、それらをreplで実行して、それが機能するかどうかを確認します。また、スライムは一般的なタスクに便利なキーバインディングを提供します。詳細については、githubのswank-clojureを参照してください。

JohnJ、Emacsでも同じことができます。実際、そのフレーズはおそらくトートロジーです。

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

gitの保存後フックの例を次に示します:https ://gist.github.com/449668

于 2012-04-17T14:16:14.397 に答える
0

「Clojureでの開発の例を見ると、それらはREPLへのファイルのロードの線に沿っているようです。それらがどのように機能するかを確認し、ファイルを編集し、リロードし、繰り返します。どこでも生成されるクラスまたはjarはありません。可能であれば、通常のユーザー(他の開発者ではない)が使用する重要なプログラムを作成した人々から、ワークフローの例をいくつか聞きたいと思います。」

Javaコード(Eclipse)で呼び出されるclojure関数のデバッグの例は簡単ですが、Eclipseで、Java内からclojure/scala機能を呼び出すことができるようにプロジェクトをリンクする方法を示しています。

于 2011-08-31T05:39:21.510 に答える