Clojureの素晴らしいところは何ですか?[閉まっている]


40

私は最近Clojureを見ていて、Stackoverflowのこの投稿に出くわしました。これは、ベストプラクティスに従っているいくつかのプロジェクトと、全体的に優れたClojureコードを示しています。いくつかの基本的なチュートリアルを読んだ後、私は言語を理解したかったので、いくつかの「現実の」プロジェクトを見てみました。

見た後ClojureScriptCompojure Clojureのは冗談であるように(前述の2つの「良い」プロジェクト)、私は感じています。誰かが私はClojureのは、使用するのに対し、ピックアップすることを愛し、きれいな構文を持っており、非常に簡単であることを、たとえば、RubyやPythonの上で二つの言語をClojureのを選ぶだろう、なぜ私は理解していないので、多くのそれはのための読みやすさを台無しにすることをどこでも括弧や記号を私。

RubyとPythonは美しく、読みやすく、エレガントだと思います。言語を完全に知らない人でも読みやすいです。しかし、Clojureは私には不透明であり、コードを理解するためには、言語の実装に関するあらゆる詳細を知る必要があると感じています。

だから、私を啓発してください!

  • Clojureの優れている点は何ですか?
  • 言語を理解するために私が知っておくべき絶対的な最低限は何ですか?

14
I don't understand why someone would pick Clojure over say, Ruby or Python-jvm上で実行され、javaライブラリ全体を使用できます。 ... have such a clean syntaxおそらく、関数型言語のようなLispは非常にきれいな構文と構造を持ち、ほとんどの人が慣れていないものです。

22
その名前はセクシーです。
プログラマー

4
地下に住んでいるティーンエイジャーは、数か月のうちにPythonとRubyを手に入れることができます。それが彼らが使用したいと思うすべてであるならば、彼らは地下から決して出ることはありません。私は長年にわたってプロのPython開発を行ってきた人が、埋め込みCを書く人に比べてそれほど致命的ではないと言っているわけではありませんが、PythonとRubyだけが知っていて、知りたいことがあるなら、何かが怪しいです。ちなみに、関数型プログラミングとLispを発見して評価するために、卒業してから6年以上かかりました。Schemeに対する私の最初の反応はひざまずきでした。
ジョブ

4
「おそらく、関数型言語のようなLispは非常にきれいな構文と構造を持ち、ほとんどの人が慣れていないものです。」:Lispの経験はほとんどなく、「Practical Common Lisp」という本を読み始めたばかりです。これまでのところ、構文に関する問題は発生していません。私見では、Lispのような構文が読みにくいという神話はただのFUDです。
ジョルジオ

4
最近Clojureを調べ始めました(ただし、HaskellとScalaの経験が豊富なので、構文はそれほどショックではありません)。実際、驚くほど読みやすいことがわかりました。few多くの言語と比較して、括弧の外に非常に記号があり、予約語はほとんどありません。読めない理由は、まったく新しいパラダイムであり、典型的なオブジェクト指向言語とは根本的に異なる方法で動作するためです。少し時間と力を与えてください。
KChaloux

回答:


47

あなたが与えた背景について、言い換えれば:

  1. Ruby / Pythonに精通している。
  2. Clojureの利点はまだわかりません。
  3. Lisp構文もClojure構文も明確ではありません。

...最良の答えは、Emerick、Carper、Grandの著書Clojure Programmingを読むことだと思います。この本には、Python、Ruby、およびJavaとの多数の明示的なコード比較があり、これらの言語のコーダーに対処するテキストの説明があります。個人的には、Pythonを使用して適切なサイズのプロジェクトを構築し、Lispの経験を積んだ後にClojureに来ました。その本を読んだことで、Clojureをサイドプロジェクトだけでなくプロとしても使い始めることができました。

2つの質問に直接対処するには:

  1. Clojureの良いところは何ですか?このサイトや他の場所でたくさんの答え、例えばhttps://www.quora.com/Why-would-someone-learn-Clojureを参照してください
  2. 言語を理解するために知っておくべき絶対的な最低限は何ですか?ClojureプログラミングThe Joy of Clojureの両方の本と、特にRich Hickeyの講演で明確にされているように、Clojureのデザインの背後にある大きなアイデアを知ることをお勧めします。トークシンプルメイドイージー。あなたが知ったら、なぜ何/あなたが理解し始めることができる、Clojureのコードを読むときは、ESP。クラス、オブジェクト、状態/突然変異から「単なる関数とデータ」(高階関数、マップ/セット/シーケンス、型)に思考を変える方法。

追加の提案:Lispの優雅さと力は、そのミニマリストで完全に一貫した構文に一部起因しています。clojureモードとParEditを備えたEmacsなどの優れたエディターを使用すると、そのことを理解するのがはるかに簡単です。それに慣れるにつれて、構文は次第に消えていき、セマンティクス、意図、および簡潔な抽象化を「見る」ことができます。第二に、ClojureScriptまたはCompojureのソースを読むことから始めないでください。これらは一度に多すぎます。4clojure.orgの問題をいくつか試してみて、そこにあるトップコーダーとソリューションを比較してください。他の4〜6個のソリューションが表示される場合、常に不格好で冗長で不必要に複雑な命令型ソリューションと比較できる、本当に慣用的で簡潔なFPスタイルのソリューションを誰かが書いているでしょう。


20

Lisp方言には、単純な構文のために独自のニッチがあります。この単純な構文により、マクロを使用したメタプログラミングが非常に簡単になります。これにより、問題ドメインを言語に合わせてモデリングする代わりに、問題ドメインに合わせて言語をモデリングできます。一度頭を悩ませると本当にクールで、他の言語では非常に難しいことを簡単に行うことができます。

欠点は、すべてのLispプログラムが本質的に独自の言語を定義しているため、何が起こっているのかを理解するために物事をしっかりと把握する必要があるということです。

今、あなたの質問に答えるために...

  1. Clojureは、JVM / CLRで実行される最新のLisp方言です。これにより、既存のインフラストラクチャでLispのパワーを簡単に活用できます。

  2. マクロを使用してLispを問題のドメインにビルドする方法を理解して、その使用法を理解することが不可欠です。Lispランタイムを実装して初めて理解したのは、コア言語機能の多くがLisp自体に簡単に実装できることがわかったときです。これを得るにはかなりの規模のプロジェクトが必要です。

プラスの点は別として、プログラムするのは楽しいですが、私は個人的に日常の問題でそれを頼るケースはあまりありません。心の拡張のために学ぶのに非常に良いツールであり、Lispを適切に学んだ後、他の言語のメタプログラミング機能を利用することははるかに自然になりました。

単純な構文により、コンピューターは簡単に解釈できます(このような簡単で強力なマクロを使用できます)が、人間が複雑な式をすばやく解析することは非常に困難です。


2
ライトテーブルを見ましたか?

4
あなたの答えは、実際にはほとんどのプログラミングの問題が普通のファーストクラスの関数で解決できるとき、マクロがLispプログラミングに近づくための通常の方法であるように聞こえます。マクロは、主に言語プログラミング(つまり、言語の拡張)に使用することを目的としています。bookshelf.jp/texi/onlisp/onlisp_9.html
ロバートハーヴェイ

3
@RobertHarveyあなたがマルコスを利用していないなら、はるかに読みやすい構文を持つファーストクラスの機能を提供する他の言語がたくさんあると主張します。
bunglestink

きちんとした@MichaelT 私はコンセプトが好きです。
DPM

3
@RobertHarvey Scala、JavaScript、C#、Python、およびHaskellは、Lispよりも人間が構文解析しやすいと考えられるファーストクラスの機能を備えた言語に関しては、すべて私の頭の上にあります。
bunglestink

10

Clojureの長所は何度も強調されており、確かに、非常に強力な言語になっているので、ここでは繰り返しません。

大学時代からずっとLispが大好きで、Clojureを発見したときは本当に興奮していました(おそらく、学界以外でLispを使用する可能性があります!)。しかし、私が不安な気持ちを学び始めたとき、私はそれが好きではないことを正確に特定することはできませんが、忍び込み始めました。まず、Common Lispでのコーディングは簡単で楽しいと思いますが、Clojureの学習曲線は急勾配です。Clispには特定の美しさと優雅さがありました。Clojureから同じ気持ちが得られるかどうかはわかりません。もっと経験を積むにつれて、その気持ちは消えていくのだろうかと思っています。

私の不思議なわずかな反発力については別の推測があります。私はそれが素晴らしい柔軟性だと思う。たとえば、半分のベクトルと半分のマップの構造を持つことができ、数文字のコードでそれらをパラメーターとして受け入れ、それらを分解して正しく処理できます。はい、それはすべての定型文を削除しますが、どういうわけかそれは正しいとは感じません。括弧、コロン、ブレーキなどのすべてのルールが機能していることをよく知らないようです。

私にとって、私はいまだにすべての利点(主にJVMでの実行と並行性の単純化、Javaよりはるかに強力で簡潔、かつ明らかな設計上の欠陥はありません)のためにこの言語を愛していますが、改善された可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.