PR

 Microsoftの統合開発ツールVisual Studio(VS)の新版VS 2010が2010年に正式リリースされる。アプリケーション・ライフサイクル管理(ALM)や,テスト駆動開発のツール・レベルのサポートといった,エンタープライズ開発向けの機能強化が並ぶ中,個人的に興味を引かれているのが,新しいプログラミング言語「F#」をサポートするようになることである。

 F#は関数型プログラミング(Functional Programming)言語のOCaml(Objective Caml)をベースにしてMicrosoftが開発したプログラミング言語だ。同社のアプリケーション実行環境「CLR(Common Language Runtime)」で動作する.NET Frameworkファミリの一員である。名前付けに関しては,C/C++をベースにした「C#」,Javaをベースにした「J#」の考え方を踏襲したようだ(Functionalの「F」)。

 命令型言語であるJavaやC言語では,「どのように(how)タスクを実行するか」という「命令(imperative)」を並べることでプログラムを記述する。これに対し,関数型言語では,「どんな情報(what)が求められているか」という「宣言(declarative)」を並べることでプログラムを記述する。関数型言語は,プログラム実行による状態の変化が存在せず,バグの発生が抑えられ,プログラムの作成効率が高くなるとされている。また,実行の順序があまり重要でなくなるため,並列処理に向いているという。

 関数型プログラミングが可能な言語としては,古くはLISPが,そして最近ではHaskellやScalaなどが知られている。ただしこれらの言語は,一般のプログラマにはなじみが薄いもので,名前は知っていても,アカデミックな研究のためのもので自分には関係ないと考える人が多いようだ。しかし今回,VSで利用できるF#処理系「Visual F#」が登場することで,関数型プログラミングに対する認知度が向上し,実際に試してみることに対するハードルが下がることが期待できる。

 既存の関数型プログラミング言語と比較した場合のVisual F#の最大のメリットは,.NET Frameworkが提供する豊富なクラスライブラリを利用できることだ。GUIベースのアプリケーションの開発も容易になる。さらに,統合開発環境であるVSが備えるコード補完機能(インテリセンス)や,デバッグ機能が利用できるようになる。また,複数要素への一括処理(map関数)は,.NET Framework 4.0が備える並列処理機構と相性が良いとされている。

 もちろん,これでF#が一気に普及すると考えているわけではない。MicrosoftのDeveloper Division Vice PresidentのScott Guthrie氏は,F#の適用分野として「金融,エンジニアリング,数値分析,統計分析」などVBやC#での実績が少ない分野を挙げている。さし当たっては,これらの分野のアプリケーションの登場が待たれるところだ。

 おそらく大多数である実務で関数型プログラミング言語を使わない人にとっても,関数型言語のプログラミングを学ぶことには,「JavaやC言語などの手続き型言語とは違った考え方やデータの扱い方が必要になり,その経験はプログラミング・スキルを高める結果につながる」(kikaineko氏,日経ソフトウエア2009年7月号)というメリットがある。記者は前職でLISPを1年ほど触っていたが,再帰やリスト構造についてC言語とは異なる視点から考えることができたのは有益だったと思う。

 .NETファミリの一員であるJ#は,VS 2005をもって提供が終了してしまった。これは,CLRで動作するJ#が,本家のJavaの仕様とは異なるところが多かったのが一因とされている。VS 2010で登場するF#を,Microsoftが今後どのように推進していくのか,注目したい。

【関連文献】
.NET Frameworkで関数型プログラミング手法を使用する
Functional Programming vs. Imperative Programming
なぜ関数プログラミングは重要か