What is it, naokirin?

実用期を迎えた関数プログラミング 参加レポート

実用期を迎えた関数プログラミング 最新動向と今後の展望 - http://atnd.org/events/27376

「実用期を迎えた関数プログラミング」参加してきました。

福岡では関数プログラミングの勉強会は少ないので、福岡で関数プログラミングのお話が聞けるというのは非常に貴重な機会でした。

今回は関数プログラミングの現状や基礎的な関数プログラミングについてのお話がメインでした。

関数プログラミングのエッセンスと考え方」

ITプランニングの小笠原さんのお話です。

関数プログラミングの企業での応用例や、関数プログラミングのメリット、またそのエッセンスとして高階関数コンビネータ、代数的データ型の話、そして最後に形式手法のお話がありました。

ITプランニングさんの形式手法の応用例として、D-BusJSONの変換の部分をCoqで証明をしたということでした。この際には1週間という区切りを用いて、それまでに出来なければ諦める、といった形をとったそうです。この辺りは業務での応用として非常によい話が聞けたと思います。

関数プログラミングを応用している例は http://cufp.org/ にたくさんあるそうです。

「Web アプリケーション・フレームワーク Yesod」

IIJイノベーションインスティテュートの山本さんのお話です。

最近、近くに住むぺんぎんさんが「Yesod!Yesod!」と言っていたので、フルスタックなWebフレームワークということだけは知っていたのですが、今回はもう少し深い部分を知れたので非常に良かったです。

「No SQL injection、No CSRF、No XSS」という話は静的型付けな関数型言語+Webという環境ならではだったと思います。またHaskellの基本的な考え方として、「独立なコンポーネントを合成していく」という話もありました。

デモンストレーション「OCamlの開発環境とコーディング手順」

再びITプランニングの小笠原さんのお話。

OCamlでの開発を行う際のインストールからエディタ、ビルドまでを簡単にお話しされていました。

  1. Debianでパッケージでインストール
  2. OCaml humpで必要なオープンソースを入れる
  3. Emacs or Vimなどで開発(サポートが厚いのはEmacs。また今Eclipse用のプラグインをOCamlProが開発中らしい)
  4. ocamlc(バイトコード)、ocamlopt(ネイティブコード)、ocamlbuild(自動的に依存関係の解消してビルド)

がだいたいの概要だったと思います。
途中でREPLを使いながら開発を進めるという話がありました。

Erlangを活用した地域産業支援への取組み事例の紹介」

有限会社イットワークスの岡本さんのお話です。

Erlangでシミュレーションを行うという非常に面白い応用のお話がありました。
活用事例として関数プログラミングの幅の広がる事例だと思いました。

Erlang OTPを活用したマルチプログラミング言語システム」

プロトグラムの賀川さんのお話です。

ErlangのOTPを用いた多言語によるシステム構築のお話でした。
ErlangやOTPに関しては詳しくないのであまり詳しい部分は分かりませんでしたが、分散した多言語での開発でも非常に柔軟に結合が可能だったというお話をされていました。

懇親会

懇親会です。

懇親会は3時間少々あっていたと思いますが、そのうち後半の2時間ほど、ぺんぎんさんと私で山本さんと小笠原さんとお話をしていました。

そのときのお話のことは http://d.hatena.ne.jp/pocketberserker/20120601/1338503742 に書かれているので、ある程度はそちらを参考にするとします。そこで私は小笠原さんとのOCamlの話の中で印象に残ったものをピックアップしていきたいと思います。


OCamlに関して小笠原さんとお話ししているときに、やはりWindowsプラットフォームに向けての開発は現状不可能に近く、Windowsが対象に入るのであればやはりF#等の言語が良いとのことでした。また今後F#3.0からType Providerにより、F#とXAMLの組み合わせでの開発もよりやりやすくなるとのことで、私もWindowsに関してはF#を活用していきたいですね。

最近TDD+OCamlの開発で私はよく「シグネチャ→実装」の順にコードを書くことがあって、それをすると、基本的にTDDのベイビーステップが踏めなくなる(Fake Itなどをしても、多相的な場合、シグネチャで宣言される型と実装のコードの型の不一致でコンパイルエラーになる)という欠点がありました。その点を小笠原さんに伺うと、「その場合はREPLを使っていくと良いと思う」と言われました。
その場合どうしてもテストコードが残らないものの、REPLを活用すればあまりTDDのリズムを邪魔することなく開発ができると思うので有用であると感じました。

関数型言語を学ぶ際に、理論的なことというのはそれほど必要ではなく、大部分は理論的なことを考えずに使えるということでした。ただ知っていると便利なこともあるということで、そこでTaPL等を読むことは非常に良いとの意見でした。

あと、OCaml 4.0からREPLのcmoのロード時の自動的な依存関係の解消が入るそうで、非常に楽しみです。これで一段とREPLを組み合わせた開発がさくさく進められそうです。

oasisに関してはやはりまだバグ等が残っているということですが、まだまだ非常に早い更新頻度で開発中ということで、今後に期待だそうです。

そしてやはり実用的なレベルになるとHaskellOCamlも、泥臭くなるとのこと。確かに実践的なレベルで書かれたコードは非常に泥臭く、しかしやはりしっかりとしていると感じます。

最後に、小笠原さんが「ほかの(関数型言語じゃない)言語で書いているときにContinuous Monadが欲しいと思うときがある」とおっしゃっていたので、そのレベルになってみたいなーと感じました(笑)
さすがです。


今回は業務や仕事の面から、また一プログラマとしての視点から関数プログラミングについてのお話を伺えて、本当によかったです。楽しい時間をありがとうございました!