ここ数年、関数型プログラミングやそれをサポートする言語が静かなブームになっている。昔から、Lispは自然言語処理やAIで使われ、JVM上で動くClojureなどは今も根強い人気を誇るが、新しく登場した言語(といってもアカデミックな世界では10年以上の歴史があるものがほとんどだが)として、ErlangやHaskell、OCamlそしてScalaといった言語の勉強会が各地で開かれ盛況である。
今回はそうした動きの中、年に一度の集大成的なお祭りイベントして開催された「函数プログラミングの集い」を取材した。9月17日(土)の終日、神保町にあるIIJの大会議室には200名弱の参加者が集い、熱い言語談義、プログラミング手法談義に花を咲かせた。開会早々、様々な言語(たぶんHaskellユーザが2/3, 残りをOCaml, Erlang, Clojure, Scala, その他)の使い手が集まった今回は「他の言語をDisる(批判する)ことは厳禁」というお触れが出され、各言語ファンが仲良く情報交換する場であることが宣言され、以後、和気あいあいとセッションは進んだ。
午前中はまず、「関数型」、「関数プログラミング」とは何を指すのか、に関する山本和彦さんによるチュートリアルである。世の中には「関数型」の共通定義はなく、あえて言うと、必要に応じて関数を引数にどんどん適用していくことで計算するパラダイムである、という解説があった。議論の前に、各人の言う「関数型」が何を指すのか擦り合わせが必要である。また、関数プログラミング(Functional Programming)には機能的・実用的なプログラミングという意味が本来あるということに気づかせてくれた。関数プログラミングのコツは、「バグの入り込まない小さな関数を組み合わせてプログラミングする」ことである。最終的には、コンビネータと呼ばれるDSL(これが小さな部品関数を組み合わせる仕組み)を使ってプログラムを作るのが関数型プログラミング手法の目標だと非常に明快に示された。
次のチュートリアルは皆が知りたいのによくわからない「モナドについて」田中秀行さんから。モナドとは、計算の進め方・処理のつなぎ方自体(コンテクスト)を抽象化して制御管理するための枠組みなので、先の山本さんのコンビネータの方向性をさらにメタレベルに突きつめたモノがモナドだといえる。後半は、自前のモナドの作り方、既存のモナドの組み合わせに必要に応じて不足要素を付け加える手法が説明された。
午後は、今井さん(ITプランニング)から、実案件で関数型言語を使った事例が多数報告された。関数型という以上に重要な点として、型推論可能な「強い型づけ」言語を使用した、拡張性があり信頼性の高いシステム開発がポイントだと主張された。
岡田さん(NTTデータ)からは、「Cobol meets Haskell」と題して、Cobolで書かれた大規模レガシーソフトウェアのリバースエンジニアリングツールの開発運用にHaskellを使った事例が報告された。この案件では、現行メインフレームのシステムを理解する必要があるのだが、信用できる仕様書がない。そこで、ソースコードから仕様をリバースするツールを開発した。開発体制は、インド人を多く含む15人である。2年で36K行規模のツールが開発された。Haskellは構文解析ツールStrafunskiの利用と相俟って言語処理に非常にパワーを発揮する。これは、今後のHaskellや関数型言語の普及にとってもインパクトの大きな実適用事例といってよい。
その他、言語Updateとして、Scala2.9の特徴、Clojureの今、Erlangの現在、最近のHaskell事情、F#3.0紹介、日本発の真に実用的なML実装SML#、OCaml最新情報、証明支援系Coqで証明駆動開発のススメ、流体計算スパコン向けコード生成DSL パライソ計画、等の話題が満載であった。
明らかに日本国内で関数型言語の実用的なレベルでの使い手は100名を超えている。今後、この人口がさらに増加し、IT業界の構造を替えていく影の要因になることを夢想した。そして会う人が口々に「ボクと契約して関数プログラマになってよ!」とつぶやくのが印象的なdeepな集いを満喫した土曜の一日であった。
発表資料:
https://sites.google.com/site/fpm2011papars/
以上