Clojureについてどう思いますか?私は次にそれを学ぶことを考えています。現在Erlangを使用していて、レコードの大失敗を除いて一般的に満足しています... ClojureはLISPと同じくらい強力ですか?
それを学ぶことを検討してください。他に理由がない場合は、実際のプロジェクトで実際に使用できるためです。
You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.
LISP-1とLISP-2で言及しているのは、関数と変数が同じ名前空間を共有しているかどうかという問題です。 LISP-1 Lispでは、SchemeやClojureのように、そうします。 LISP-2 Lispでは、Common LISPのように、そうではありません。これは主に好みや利便性の問題であり、プログラミング言語の能力には影響しません。
例として、Clojureではこれを行うことができます:
(defn my-apply [func arg1 arg2]
(func arg1 arg2))
これは、関数と2つの値を取り、その関数を値に適用する関数です。例えば:
user=> (my-apply + 1 2)
3
Common LISPでは、これを次のように書く必要があります
(defun my-apply (func arg1 arg2)
(funcall func arg1 arg2))
「funcall」が必要な理由は、「func」は変数の名前空間にあるため、Clojureのように関数として直接使用することはできず、この区別がないためです。したがって、Common LISPに「この変数を関数として解釈し、これらの引数を使用して呼び出すようにしてください」と伝える必要があります。これの別の結果は、同じ結果を得るには、次のように「my-apply」を呼び出す必要があるということです。
=> (my-apply #'+ 1 2)
3
ここで問題は逆になります。「+」は関数ですが、変数として渡したいので、「変換」する必要があります。 「# '+」は「(function +)」の略です。
CLではなくClojureを使用している理由は次のとおりです。
:wq
ClojureはLISPの方言なので、そうです、LISPと同じくらい強力です。
私がこの言語が好きなJVM用の優れたLISPツールができた以外の理由はありません。
名前は賢いと思います。
「Clojureは、10年前にオブジェクト指向プログラミングでJavaが行ったことを、並行性指向プログラミングで実行できる可能性があります。言語を使用して適切に実行するのを簡単にします(または、Clojureの場合は「言語環境」)これは、プログラマーがすでに慣れているものと似ています。」-Bill Clementson
そして人々、LISPはプログラミング言語のファミリーで構成されています。 CommonLISPやClojureのようなLISP方言があります。その上、CommonLISPまたはSchemeの多くの実装があります。
私は職場でErlangを使用して調整されたネットワーク負荷テストを行いましたが、問題は「分散通信指向のソフトウェアを正しく実行する」というErlangの「スイートスポット」の範囲内であったため、これには最適でした。複数のスレッドを持つ単一のボックスで複雑なことを行う必要があるコードには、Clojureがはるかに優れていると思います(これはより一般的なシナリオです)。
Erlangを知っているので、あなたは時代の先を進んでいます。これは、Erlangが本当に輝いている問題を見つけるのに役立ちます。 Clojuresの本当の「スイートスポット」とは何ですか?
ClojureはLISP-1です。すべての歴史的な手荷物のない、より良いCommonLISPと考えてください。また、STMやエージェント(Erlangのアクターモデルを実装しないことに決めた)のようないくつかの最新の同時実行機能もあります。 JVMで実行する利点は単純です-すでにSO多くのライブラリが(主にJavaで)作成されています)。
ClojureのClojure は、ClojureのClojureコンパイラを書き直して、移植性と保守性を高めるための継続的な取り組みです。 core.cljを除いて、Clojureのほとんどは現在Javaで記述されています。この移動後、Parrotを含む多くのVMに移植できるようになります。
構文がより規則的で、恐ろしい(IMHO)Java APIに結び付けられていないため、CommonLISPの方がClojureよりも好きです。
Common LISPの場合、私はいくつかの優れた十分にテストされた実装と、信頼できる成熟した標準のどちらかを選択することもできます。
しかし、仕事にJavaを使用する必要がある場合は、Clojureの使用を検討します。:)
「ClojureはLISPと同じくらい強力ですか」とは、スタックオーバーフローのどこかで、Common LISPはLISP-2、ClojureはLISP-1であると読んだことを意味しますか? (私はここで簡単にとりとめのないことができます)...
並行性に関する限り、アクターモデルでアプリを作成することでアプリを簡単に配布できるため、Erlangのストーリーが本当に好きです。
clojureの作成者から http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1
「アクターがあっても、Clojureにはまだ分散並行性のストーリーはありませんが、Clojure <-> ClojureまたはClojure <-> Erlang分散プロセスにJinterfaceを使用して、Erlangの卸売りを採用することを検討しています。多分それはTermiteのように見えるでしょう完了しました。しばらくお待ちください。」