Clojureを1ヶ月ガッツリ使ってみた本音レビュー:Lispの沼にハマるか、それとも?
My thoughts after using Clojure for about a month
My thoughts after using Clojure for about a month
Clojureを実務で約1ヶ月間使い倒してみました。関数型言語特有の柔軟性やイミュータブルな設計の心地よさは格別ですが、一方で独特の構文やエコシステムに慣れるまでの学習コストなど、実際に触れてみて見えてきたリアルなメリット・デメリットを共有します。
関数型パラダイムは最初は少し違和感があるけど、問題解決の感覚が……ガラッと変わるね。個人的には大規模なシステム設計にはOOPが一番直感的だと思うけど、これは好みの問題かな。
ほとんどのモデルはClojureだとあまりパフォーマンスが出ないんだけど、OpenAIのモデルは言語のパワーをフルに活用できてる。主観だけど、言語の性格とマッチしてる気がするよ。データは https://gertlabs.com/rankings?provider=openai にあるよ。
このサイトをClojureで生成するようにしたんだ
みんな知ってる通り、自作の静的サイトジェネレーター(SSG)を書くまでは真のLisperとは言えないからな。
マクロをフル活用して独自の「テンプレートエンジン」をサクッと追加できた時は最高にハイになれたよ。でも、その後の反動がきつかった。出力の最適化、スコープ付きCSSのサポート、SPAフレームワークコンポーネントのサーバーサイドレンダリング、そしてもちろんNodeエコシステムとの統合(良くも悪くも便利なものが多すぎる)など、優れたSSGには考えるべきことが山ほどあるんだ。それ以来、Astroに乗り換えたよ。とはいえ、自分一人でSSGをあそこまで作り込めたのは今でも面白い経験だったと思う。
ブロックの終わりの ]}]})))}-ness を乗り越えるのにもっと簡単な方法があればいいんだけど。
これどういう意味なんだろう?普通のカッコだらけの言語と何が違う、あるいは何が悪いのか……?
ちなみに自分はpareditを使っていて、)を押すだけでカッコやブラケットの向こう側に移動できるよ。それに頼らなくても、左右の矢印キーを押すだけでいいのでは……?
失礼ながら、このトピックはもう散々議論され尽くしているよ。
自分も数年前に試した時はClojureを気に入ったよ(合成可能性とデータ構造は両方とも最高だね)。でも、真の付加価値は構文じゃなくてランタイムにあるんだ。Javaのランタイムは堅実だけど、Erlangほど優れているわけではないし、もしかしたらGolangの基準にすら届いていないかもしれない。ここで言っているのはコンカレンシーと並列処理の話ね(メモリ管理についてはJavaがかなり優秀なのは間違いない)。「グリーン・スレッドがあるじゃないか」と言われそうだけど、ErlangやGolangができることを全部こなせるようになったら呼んでくれ。そうしたら真剣に再検討するよ。
プログラミング言語の構文なんてほとんど重要じゃないんだ。ある程度は影響するけど、僕らプログラマーは構文をロマン化しすぎなんだよ。最適化するなら、ランタイムとその特性こそがはるかに重要さ。
例えばseqの抽象化のおかげで、どんな種類のシーケンスを扱っているか気にしなくて済むことが多い
えっ?それ完全にCL(Common Lisp)からそのまま持ってきたものだろ(https://www.lispworks.com/documentation/HyperSpec/Body/t_seq... )。AREF/NTHも同じで、ELTもあるしね。
それ以外は同意するよ。CLはバロック様式というか、あちこち補完が必要な部分はあるね。
Lisp:すべてはリストである
いや、それは間違いだよ。全くもって違う。LISP 1.5の話をしているなら別だけど……。
構文が多すぎる
面白いことに、自分は新しいベクター/セット/ハッシュテーブルのリテラルは割と許容できている。僕や他の何人かが問題視しているのは、マクロや特殊演算子でリストの代わりにベクターを使っていることなんだ。(let [a b] ...) を (let (a b) ...) と書けないのはちょっと納得いかないな。
投稿者はSmalltalkを知っているんだろうか。あれは構文がすごくシンプルだよ。Lispも別の意味でシンプルだけど、演算子と関数のどちらを重視するかによって、他のどんな言語よりも構文が多く見えることもあるよね。
「Lua:すべてはテーブル
Tcl:すべては文字列
Lisp:すべてはリスト」
Python:「すべては辞書」
もう10年近くClojureを使っているけど、未だに外国語を話しているような気分だよ。僕はこれを「カッコの地獄(parenthetical hell)」と呼んでる。