辞書へ戻る言語の一覧

F#

えふしゃーぷ言語2005

.NET上で動く関数型重視の言語。OCaml系の流れをくみ、簡潔な記述とデータ処理の強さを持つ。

時代背景

F#の設計者Don Syme本人による論文『The Early History of F#』によれば、1997年、Java対抗としてMicrosoftは社内的に、後の.NETフレームワークとC#言語につながるプロジェクトを開始した。当時Javaオブジェクト指向で『モダン』であること、Write Once Run Anywhereの理念、仮想マシンとガベージコレクションといった技術的な仕掛けの点で、Microsoftにとって大きな脅威になっていたとSymeは説明している。1997年以降、学術的な関数型プログラミングと産業界がMicrosoft Research Cambridgeで結びつき、研究者たちは複数言語を.NETにもたらす初期の取り組み『Project 7』を通じて会社と関わり、これが1998年の.NET Genericsの着手と2002年のF#の始まりにつながった。

仕組み

Syme本人の論文によれば、F#の最初のコード行は2001年12月に書かれた。OCamlのコア構文を再実装し、ILX(.NETの中間言語表現)をバックエンドとして.NETをターゲットにするフロントエンドだった。最初期のコンパイラはOCaml自身で書かれており、後の2006年にF#自身でブートストラップされたという。F#設計の中で最も影響範囲の広い決定は、目立たないが『.NET言語であること』——.NETの型がF#の型であり、.NETの値がF#の値であり、.NETの例外・スレッドの意味論もそのままF#のものになる、という徹底した方針だった。これによりF#は.NETとの完全な相互運用を保証された一方、独自の革新の自由度は制約されたとSymeは振り返っている。

種類・系譜

Syme本人の論文によれば、F#の当初の構想はシンプルで、OCamlの利点を.NETにもたらし、.NETの利点をOCamlにもたらす——強く型付けされた関数型プログラミングと.NETの結婚——というものだった。ここでの『OCaml』は言語のコア部分だけでなく、それが体現する強い型付け関数型プログラミングへの実践的なアプローチも意味していたという。もっとも、F#はOCamlのどのバージョンとも完全な互換性は持たず、Caml-LightやOCamlを設計指針とインスピレーションの主要な源としつつ独自の道を歩んだ。OCamlのファンクタ(モジュールシステムの一部)は理論的な複雑さへの懸念や.NETオブジェクトプログラミングとの相性の悪さから採用が見送られた一方、ネストされたモジュール定義は最終的にF#の設計に取り入れられたという。

関連項目

  • Haskell純粋関数型プログラミング言語。遅延評価と強力な型システムを持ち、研究と実務の両面で関数型の考え方を広めた。

関連技術

出典