基本情報
概要
F#(エフシャープ)とは、Microsoftが開発した「.NET Framework」向けマルチパラダイム関数型プログラミング言語です。「OCaml」言語をベースにしています。
関数型言語とは
C#/Java/Rubyなどの手続き型言語に対して、関数型言語があります。
関数型言語は歴史がある言語で、工学的基礎(ラムダ計算)が可能です。並列処理/分散プログラミングを得意とし、高演算処理能力を発揮します。
関数型言語は、「なるべく状態を持たせない」「なるべく変数を使わない」という特徴があります。「引数として関数を受け取る」「戻り値が関数」というのは関数型言語では普通のことです。すべての関数は、何らかの戻り値を必ず返します。
「関数型プログラミング」とは、「複数の式を関数の適用によって組み合わせていくプログラミングスタイル」とされています。
基本説明
F#は、静的型付けコンパイラ型言語です。関数型言語ではあるものの、オブジェクト指向型言語としての特徴も合わせ持ちます。
関数型言語「OCaml」との関係
「OCaml」は、F#のベースとなった関数型言語です。オブジェクト指向的要素が追加されている点が特徴です。関数型言語としてはかなり高速に動作します。
F#は、関数型言語「OCaml」から多くの要素を引き継いでいます。関数型/オブジェクト指向型のマルチパラダイムです。型安全、型推論の機能を持ちます。ただし、オーバーロードをサポートしているため、「OCaml」が持つ型推論の完全性を失っています。
「OCaml」互換の標準ライブラリを備えており、「F#」と「OCaml」のどちらでもコンパイルできるコードを記述することも可能です。しかし、クラス構文などは、「F#」と「OCaml」で異なっています。
経緯
「F#」の「F」は「Functional」とされています。
2002年、マイクロソフトリサーチのDon Syme氏らによって、OCamlをベースに開発開始
2005年、F#の最初のメジャーリリース
2010年、Visual Studio 2010リリース、F#が標準搭載
主な特徴
マルチパラダイム言語
F#の主たるパラダイムは「関数型」ですが、他に、「手続き型」「オブジェクト指向プログラミング」などもサポートしています。
型推論
F#ではコンパイラの型推論機能により、変数/関数の定義において、型が文脈から自動的に決まるのであれば型宣言を省略できます。型推論に頼らず明示的に型を指定することもできます。
変数
変数は、基本的に「不変(immutable)」ですが、「書き換え可能(mutable)」として定義することもできます。
並び順強制
F#では、ソースファイル/type/module/関数などについて、依存順になるように並び順を制御する必要があります。
これにより、ソリューション全体のマクロ構造を楽に把握できます。
コード記法
コード記法は、「軽量構文」と「(OCaml風の)冗語構文」の2種類用意されています。
コンパイラとインタプリタ
F#の処理系は、「コンパイラ」と「インタプリタ」の両方を持っています。
F#をスクリプト言語として動かすことも可能です。
マルチスレッド処理
マルチスレッド処理特有の問題(スレッド間の排他制御など)への対策をカプセル化し、並列処理のコード記述をシンプルで可読性の高いものにするために、他の.NET言語にない独特の構文表記方法とライブラリが用意されています。
.NET Framework言語
.NET Framework言語(「C#」「Visual Basic」など)と相互運用性があり、.NETクラスライブラリの利用/開発が可能です。
ポイント
・判別共用体とパターンマッチ
・アクティブパターン
・シーケンス式
・計算式(Do構文)
・非同期/並列計算を支援するライブラリ
・コード引用符
・モジュール拡張が容易
・IDEによるコーディングサポート
同様製品(概要情報)
同様な機能を提供する製品として、次のようなものがあります。
オープンソース製品:「OCaml」「LISP」「Scala」など。
導入事例
.NET Frameworkの1言語として、幅広く利用されています。
ライセンス情報
F#のライセンスは、「Apache License」「Microsoft Public License (Ms-PL)」です。このライセンスに従うことを条件として、ソースコードの改変と公開が許可されています。
ダウンロード
※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。