他のJVM Lisp(Kawa、Armed Bear、またはSISC)でClojureを使用する理由

StackOverflow https://stackoverflow.com/questions/1413390

  •  06-07-2019
  •  | 
  •  

質問

Clojureが登場する前に、JVMにはすでに3つのLispがありました。 Kawa 武装した熊および SISC

これらのLispによって残された Clojure はどのようなギャップを埋めますか?

役に立ちましたか?

解決

Kawa、ABCL、およびSISCは、非常に長い既存の言語の再実装です。何らかの理由でJVMで標準のSchemeまたは標準のCommon Lispを使用したい場合に優れています。

Clojureは新しい言語です。 ギャップを埋めません。それは全く新しい可能性を追加します。それは純粋に機能的なアプローチを好みます-SchemeとCLは両方ともマルチパラダイムです。 Clojureは、さまざまなFP言語(ML、Haskell)の設計から大きく借用しています。

そして、はい、他のLispに並行性サポートを追加することもできますが、それは完全にその点を欠いています。 Clojureは、最初から並行言語として設計されました。 Clojureでは並行プログラムの作成は簡単です。非機能言語(ロケット、CLは除外されていません)のようにロケット科学ではありません。この方法を見てください:

Cでは、デフォルトで高速プログラムを作成できると言われています。

まあ、Clojureではデフォルトで並行プログラムを書くことができます。

他のヒント

  1. " Clojureは、後方互換性に制約されないLispです。 (ClojureのWebサイトから)。 新たなスタートです。進歩です。 Lisp / Schemeを強力にするアイデアを使用しますが、Java プラットフォームを中心に考え直してください。

  2. Clojureは常に最新のClojureになります。 JVMに移植された他の言語では、JVMバージョンが常に追いつく可能性があります。 Javaプラットフォームが必要ない場合、なぜ別のSchemeでSISCを使用しますか?もしそうなら、そのために特別に設計された1つのLisp(Clojure)を使用してはどうですか?

  3. 並行性を念頭に置いて設計されています。

私が思いつく最も簡単な答えは、ClojureはCommon-Lispではないということです。 Clojureは他のLispの歴史に制約されません。 JVM用の新しい言語構築です。

私は単にそれらを知らなかったので、Clojureにとって深刻な利点です(人々が十分な音を立てたことがわかりました)。あなたがリストしたものに見なかったClojureの最大のものは、ソフトウェアトランザクションメモリ

Clojureは、別の言語のレイヤーではなく、JVM向けにも設計されているため、もう少し「Java-y」です。他の人が相互運用をしなければならないときだと思います。

clojure.orgの理論的根拠のページ:

  

なぜ別のプログラミング言語を書いたのですか?基本的に私が欲しかったから:

     
      
  • Lisp
  •   
  • 関数型プログラミング用
  •   
  • 確立されたプラットフォームとの共生
  •   
  • 同時実行用に設計
  •   
     

それが見つかりませんでした。

あなたが言及した3つの言語(Kawa、ABCL、およびSISC)はこれらの要件を満たしていますか?それらは:

  • Lisp(CLまたはScheme方言のいずれか)✓
  • 関数型プログラミング用✓
  • 確立されたプラットフォーム(JVM)との共生✓

しかし、それらは(STM)並行性のために設計されていません。ただし、公正で完全なものにするために、CLで見つかった、まだ言及されていないSTMライブラリが少なくとも2つあります。

  1. STMX
    • ABCLでの動作テスト済み。活発に開発中。
  2. CL-STM
    • デッド?最後の変更は2007年です。

うーん...では、なぜ新しいLispを作成するのですか?主にこれらはライブラリであるためです。 clojure.orgの根拠のページは継続しています(強調を追加):

  

標準のLisp(Common LispとScheme)はどうですか?

     
      
  • 標準化後のイノベーションが遅い/ない
  •   
  • 拡張可能ではなく、可変のコアデータ構造
  •   
  • 仕様に並行性がない
  •   
  • JVMの適切な実装はすでに存在します(ABCL、Kawa、SISCなど)
  •   
  • 標準のLispは独自のプラットフォームです
  •   

他の人が述べたように、これは言語の同時実行設計の問題です。

さらに、なぜJVMで停止するのですか? Clojure CLRのサポートは現在開発中です

これは、私の視点から見た場合に埋める2つのギャップです。必要に応じてClojureを使用する必要があります。 Clojureがマップから外れても、スキルを失う心配はありません。あなたのLispスキル、より重要なことにあなたの考え方は、他のLisp方言に引き継がれます。

もしシニカルだったら、Clojureがより良いWebサイトとよりセクシーな名前を持っているからだと思います。

また、Clojureは比較的新しい言語であり、1人で実装されており、優れたマーケティングスキルと多くのエネルギーを備えています。彼は多くの時間と誇大広告をclojureに投資しています...時には、誇大広告は自己実現的な予言であり、最新の最高のものであることを十分な人々に納得させることができれば、実際にそれを行うための十分なサポートと勢いを得ることができます仕事。

カワなどの実装者はそれほど危険ではないので、製品を宣伝しているのではないでしょう。それに、誇大宣伝するものは何ですか? " Lispと呼ばれる素晴らしい言語があります"それは難しいマーケティング販売です。

Javaはこの典型的な例だと思います。いくつかの非常に深刻な欠陥がありましたが、市場に出回って誇大宣伝されたため、ハードウェア/ソフトウェアベンダー、ツールのプロデューサー、業界による投資などからのサポートを意味する大きな勢いを達成しました。プログラミングは大嫌いでしたが、成功しました。 Clojureは、他のLispが成功していない場合でも、同様の成功を達成する可能性があります。

Clojureの利点は、そこにあるすべてのJavaライブラリ/コードにアクセスできること、およびJVMに基づいているためマルチスレッドをサポートできることです。さらに、一般的にLispに設計されていない並行性を念頭に置いて設計されましたが、マッピングプリミティブのために、並行性を十分にサポートするLispを設計することはおそらく難しくありません。

そうは言っても、Clojureを試してみたところ、Javaに接続されたものなら何でもうまくいくと思われる、お尻の要素の構文と痛みを嫌っていました。

Clojureは「Lisp」です。すでに知っているLispではありません。私は最後を過ごしました 数日間資料を読んでビデオを見て、私は感銘を受けました。その 前提は、機能プログラム(不変データに基づく)が最適な方法であるということです 並行性を管理します。 Clojureは、JVMに基づいてLispのようなシステムを実装して提供します。

もう1つ答える必要はありません(そして、私はこれに投票することを期待していません)が、ここにいくつかの他の答えに対するいくつかの小さな拡張があります。

新しいほうが良いとは限りません。新しく設計が不十分なものは良くありません。新しく、保守されていないものは良くありません。そして、より大きな(少なくとも成長している)ユーザーコミュニティがなければ新しいものは良くありません。 (新しい言語は定期的に出てきますが、ほとんどの言語は使用されないため、脇に落ちます。)

Common Lispは大好きです。その美しさの一部は、いくつかの互換性のない方言との下位互換性を目的として委員会によって設計されたという事実に由来する、その奇抜さです。

Schemeが大好きです。それは美しく、エレガントな言語です。それにもかかわらず、その開発は委員会に依存しており、おそらくそれは時々それを遅くしました。いずれにしても、目標はClojureの目標とは異なります。

Common LispとSchemeには、JVMの効率にあまり適さないテール再帰などの強調があります。 Clojureは、最初からJVMに適切にマッピングし、Javaと(適切に)相互運用するように設計されました。 (ClojurescriptとCLRの方言についてはどういう意味かわかりません。)

Clojureは、当初は1人のRich Hickeyによって開発され、小さなチームと一緒に彼によって管理されているという事実は、必ずしも委員会によって管理されている言語よりも優れているとは限りません。その人が悪い決定をした場合、Clojureは良い言語ではありません。

ただし、これが重要なポイント:ヒッキーは、考え抜かれたエレガントな言語を設計しました。最初から、体系的に関連する一連の機能が含まれており、少しでたくさん。これは、基本的なJVM相互運用だけでなく、他の言語にも当てはまります。これまでのところ、Clojureを管理している人々は、言語の目標を厳守することを厳しく続けています。

これは、私がClojureについて気に入っていることの大きな部分です。全体として、また詳細に設計されています。つまり、一度慣れてしまえば、それをプログラムするのは楽しいことです。

Clojureには、Schemeの優雅さを備えたCommon Lispの力があると言っても過言ではありません(または控えめですか?)。 Common Lispには、言語に組み込む必要のあるものがたくさんありますが、それは混乱です(私は愛を込めて言っています)。利用可能なライブラリはありますが、設計によるスキームは小さいです。 Clojureには、言語の一部である標準ライブラリ(CLとは異なります)が増えています。これの良い例はcore.matrixプロジェクトで、これはいくつかの異なるマトリックス実装への共通インターフェースを提供します。これは重要です。なぜなら、小さなマトリックスを時々使用したり、巨大なマトリックスを広範囲に使用したりするのに最適なさまざまなマトリックス実装があるからです。

ClojureはCommon LispやSchemeよりも優れていると言うつもりはありません。そうではありません。 3つの言語には美徳があります。

新しい!つまり、従来のLispコミュニティは伝統的であるため、古いlispersをあまり使用しないことを意味しますが、これは、以前のLispの経験がない人々が新しいものとしてそれを選択することを意味します。 p>

Imho、Clojureは、RubyがSmalltalkに対して行ったもので、古いLispに対するものです。必ずしも良いとは限りませんが、十分です。そして、決定的に重要なのは、Rubyがかつてそうだったように、勢いがあり、上昇中の言語と見なされているため、雇用主により受け入れられることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top