type t (* void *)

ソフトウエアのこととか

一般の話: 関数型ポエム

話題の関数型ポエム。

関数型言語って言われてるものが好きで、なぜならその方がしっくり来るから。
関数型言語は空想上の理想の関数型言語じゃなくて現実の言語を指します。

  • 多くの関数型言語では安全にプログラミング出来るように設計されて、快適な事が多い。
  • 全てがオブジェクトなのはやり過ぎで面倒くさい。
    最小単位が値・関数の方が小さい単位で小回りがきいてしっくりくる。
  • 関数型言語それ自体は手続きもオブジェクトも否定しない。
    多くの手続き型言語では関数型プログラミングはあまりしやすくない(と私が感じる)けども、関数型言語で手続き型プログラミングは全然できる。
    このパラダイムで書いたほうが書きやすと思った時にそれを選べるのが大事だと思う

関数型言語ははシンプルだとか言われることがあるけど、OCamlを書いているとfunctorだけでも十分に難しい機能に思えるし第一級モジュール・オブジェクト・多相ヴァリアント・GADTなど全くシンプルではないと思う。ごちゃごちゃよくわからない機能はないと思うけど。

ちなみにOCamlではオブジェクトはちゃんと活用されてると思う。コンパイラ内部のast_mapper.mlでも使われているし、ネイティブコードを出力してる部分でも使われているし、公式ツールのocamldocの中でも使われる。

有名だと思われるライブラリでもlablgtkやocamlnetでも全面的に活用されている。

疎結合でなるべく副作用を減らしていくプログラミングスタイルのほうが分かりやすというのは多くの人が同意してくれると思う。
なので、その関数型プログラミングスタイルで普段書いて、必要な部分にオブジェクトや手続きを用いるというのが目下の目指すべきスタイルなんじゃないかなぁと思うし僕はそれが好きです。

ライブラリなんかはOOPしてくれる方が有り難い部分があると感じています。

あ、F#とかオブジェクトを全面的に採用してる関数型言語も好きです。構造的部分型を採用してくれてたらもーっと好きだったと思います!