ClojureとHaskell 異なるスタイルのプログラミング言語に触れること

2018-01-08 /

この記事の背景は下記にとてもよくまとまっているのでそれを見ればよいかと。

Clojure vs. The Static Typing World

僕はあまり自分の主義が無いので、ある人がXを良いと言えばそっかーいいのかー、となる。

SPJがCore言語のデザインを披瀝してsafetyを主張すれば「確かにいいーHaskell大事ー」と思う。

RichがClojureの解きたい問題と設計判断を主張すれば「確かにいいーClojure大事ー」と思う。

どちらも「わかるー」となってしまう。

なので、両者の主張が多少衝突していたとしても、割とすんなり飲み込んでしまう。ほんと脳が雑にできている。

面白い効果

異なる主張を受け入れると僕の場合、頭の中で妙なことが起き始める。(と、最近知った)

1. 衝突 (conflict)

あらゆるプログラミング上の判断で毎回この主張がぶつかりあったりする。

「あー、これってRichが言ってたやつに似てるのでわー」 という連想と 「あー、でも、いやー、type checkerに怒られた方が幸せだなー」 という連想が起こる。

例えば、仕様の曖昧なDSLを作ると考える。

このDSLは自分の作業を定型化するために役立てたいのだけれど、そのデータ・モデルがまだはっきり解っていない。

  • 選択肢1: ラフにスケッチしながら進めるためにClojureのmapを使う
  • 選択肢2: 後から入れた新たなアイデアによる修正を正しくエラー伝播させるためにHaskell(GHC)のtype systemを使う

どっちも良い気がするー。となってとても悩む。

この時点ではうまく選べないので、まあ、仮で選んでみたりする。

2. 蒸留 (purify)

3. 統合 (merge)

何が起きていたのか

2つの選択

1つの問題。

をながーいこと行ったり来たりしているうちに、自然とどちらを選ぶべきか判断基準が養われていく。

大事なのはながーいこと考えたり迷ったりしているということ。

時間の経過とともに人間の頭に他の情報もどんどん入ってくる。

まとめ

頭の悪い人に2つの異なる主張を放り込むと、時間の経過と共にどっかで無意識が作用して勝手に適当に衝突が解決されることがある。