[解決済み] Clojureと他のLispsの比較 [終了しました]。
質問
私の質問の意図は ではなく であり、むしろそれぞれの言語がどのような状況で "仕事のための最高のツールであるかを決定することです。
Clojureの本を何冊か読みました( プログラミング Clojure , 実践的なClojure , Clojureの楽しみ およびManningアーリーアクセス版の Clojureイン・アクション を参照)、素晴らしい言語だと思います。現在、私が読んでいるのは ラムダを超える を読んでいますが、これも非常に面白い言語です。
私は ではない Lispの専門家ではありませんが(というより初心者です)、この言語のファミリーは、一般に関数型プログラミングと同様に、私を魅了します。
Clojureの長所 (そして"その他"の欠点)。
-
JVM上で実行されます。
-
JVM は、非常に安定した高性能な言語環境であり、Sun の夢である "一度書いたら [ほとんど] どこでも実行できる" にかなり近いものです。私の Macbook Pro でコードを書き、それを実行可能な JAR ファイルにコンパイルし、Linux や Microsoft Windows でわずかな追加テストだけで実行することができます。
-
(Hotspot やその他の) JVM は、高品質のガベージコレクションと、非常にパフォーマンスの高いジャストインタイム コンパイルおよび最適化をサポートしています。ほんの数年前までは、高速に動作しなければならないものはすべてCで書いていましたが、今では迷わずJavaで書いています。
-
標準的でシンプルなマルチスレッドモデル。Common Lispには標準的なマルチスレッドパッケージがあるのでしょうか?
-
ですべての括弧の単調さを打破します。
[]
,{}
そして#{}
を追加することができます。Common Lispの専門家は、リーダーマクロを使えば、CLにこれらを追加することができると教えてくれるかもしれません。
-
Clojureのデメリット :
-
JVM上で動作します。
- 末尾再帰や連続はありません。Common Lispは継続をサポートしているのでしょうか。Schemeは確か両方のサポートが必要だったはず。
その他の利点 (特に Common Lisp) (とClojureのデメリット)。
-
ユーザー定義可能なリーダーマクロ。
-
その他の利点は?
感想は?その他の違いは?
どのように解決するのですか?
他のLispよりもClojureを好む私の個人的な理由のリストです(追伸:私は今でもすべてのLispが素晴らしいと思っています!)。
-
JVM上で実行されます - それ故、JVM自体の素晴らしいエンジニアリング(高度なガベージコレクション・アルゴリズム、HotSpot JIT最適化など)に自動的にアクセスできます。
-
非常に優れたJavaの相互運用性 - Java/JVM言語エコシステム内の膨大な範囲のライブラリとの互換性を提供します。私はClojureを、異なるJavaライブラリを効果的に接続するための "glue" "言語として使用してきました。私はまた多くのJavaコードを開発するので、ClojureがJavaツールとうまく統合することは私にとって有用です(例えば、私は私のClojure開発のためにMaven、Eclipse with Counterclockwise pluginを使用します)。
-
ベクトル用の素晴らしい構文
[1 2 3]
マップ{:bob 10, :jane 15}
とセット#{"a" "b" "c"}
- 私は、これらは現代のプログラミングにかなり不可欠なツールだと考えています (もちろんリストに加えて!)。 -
私は個人的に角括弧を使った結合形式が好きです:例えば
(defn foo [a b] (+ a b))
- これで少しはコードが読みやすくなったのではないでしょうか。 -
永続的で不変のデータ構造を持つ、遅延した関数型プログラミングを重視 - 特に、すべてのコアClojureライブラリは、デフォルトでこれをサポートするように設計されています。
-
マルチコアの同時実行のための優れたSTM実装です。私はClojureが現時点でどの言語よりも優れた並行処理の物語を持っていると信じています(この のビデオでRich Hickey氏自身による詳細な説明をご覧ください。 )
-
これはLisp-1(Schemeのようなもの)で、個人的には好きです(関数型言語では関数とデータを同じ名前空間に保つことが理にかなっていると思います)。
関連
-
[解決済み] REPLでclojureファイルを再読み込みする方法
-
[解決済み] useとrequireの違い
-
[解決済み] clojureプロトコルの簡単な説明
-
[解決済み] ClojureでStringを数値に変換するにはどうしたらいいですか?
-
[解決済み] Clojure CoreやContribでZip関数に相当するものはありますか?
-
[解決済み] Clojure: リデュース vs. アプライ
-
[解決済み] clojureで指数を計算するには?
-
[解決済み] Clojureのブロックコメント
-
[解決済み] clojureのキーワードを文字列に変換するには?
-
[解決済み] Lisp-1とLisp-2の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] REPLでclojureファイルを再読み込みする方法
-
[解決済み] useとrequireの違い
-
[解決済み] 実社会で活躍するLisp【クローズド
-
[解決済み] ClojureでStringを数値に変換するにはどうしたらいいですか?
-
[解決済み] Clojure: リデュース vs. アプライ
-
[解決済み] Clojureのdoseqとforの違いについて
-
[解決済み] コンポジュール・ルートの "ビッグ・アイデア "とは?
-
[解決済み] ClojureのTransducersを簡単に説明できる人はいますか?
-
[解決済み] Clojureはどんなことに使えるの?[クローズド]
-
[解決済み] Lisp-1とLisp-2の違いは何ですか?