F Sharp
F# F#のロゴ | |
パラダイム | 関数型プログラミング、命令型プログラミング、オブジェクト指向プログラミング、メタプログラミング、リフレクション、並行計算 ウィキデータを編集 |
---|---|
登場時期 | 2005年 (20年前) (2005) |
開発者 | マイクロソフト、F Sharp Software Foundation ウィキデータを編集 |
最新リリース | 9.0/ 2024年11月12日 (3か月前) (2024年11月12日)[1] |
型付け | 強い静的型付け |
影響を受けた言語 | ML、OCaml、C Sharp、Erlang、Haskell、Python、Scala ウィキデータを編集 |
影響を与えた言語 | F* |
プラットフォーム | クロスプラットフォーム ウィキデータを編集 |
ライセンス | Apache License ウィキデータを編集 |
ウェブサイト |
fsharp |
拡張子 | fs、fsi、fsx、fsscript ウィキデータを編集 |
テンプレートを表示 |
F#(エフ シャープ)はマイクロソフトが開発した.NET向けのマルチパラダイムプログラミング言語である。Visual Studio 2010より標準開発言語として追加された。
概要
[編集 ]2002年からマイクロソフトリサーチのドン・サイム (英語版) (英: Don Syme) ら [2] によってOCamlをベースに開発が始められた。
OCamlから多くの要素を引き継いだ関数型とオブジェクト指向のマルチパラダイムである[3] 。型安全であり[3] 、型推論の機能をもつ[4] 。ただし、オーバーロードをサポートしているため、OCamlのもつ型推論の完全性を失っている。C#やVisual Basic .NETなどの.NET言語と相互運用性があり[5] 、.NETクラスライブラリの利用・開発が可能であり[6] 、MonoおよびXamarinを利用したAndroidアプリケーション開発もサポートされている[7] 。以前はSilverlightを利用したWindows Phone 7のアプリケーション開発もサポートされていた。
F#のFはFunctional programming language(関数型プログラミング言語)およびSystem Fが由来 [8] である。
F#の開発環境はVisual Studioの有償版製品(あるいは無償のCommunityエディション)にVisual F# として含まれているほか、Expressエディションで利用可能な無償ツールの配布もされている[9] [10] [11] [12] 。Visual F# Tools 4.1でRoslynコンパイラ (英語版)をサポートするようになった。また、Monoや.NET Core [13] [14] 環境向けにもF#コンパイラが移植されているため、macOSやLinuxなどでもF#プログラムの開発および実行ができる。
OCaml互換の標準ライブラリを備えており、F#とOCamlのどちらでもコンパイルできるコードを記述することも可能である。しかしクラスの構文などはF#とOCamlで異なっている。
構文
[編集 ]OCamlと互換性のある冗語構文 (英: verbose syntax) と、Pythonのようなインデント(オフサイドルール)による軽量構文 (英: lightweight syntax) の二種類の構文を利用できる。標準では軽量構文が有効になっている。
例
[編集 ]Hello world
[編集 ](* これはコメント *) // 1行コメント。 (* Hello world プログラム *) printfn"Hello World!"
letrecfactorialn= matchnwith |0->1 |_->n*factorial(n-1)
再帰関数の例
[編集 ](* int リストの要素を再帰的にプリントする *) letrecprintListlst= matchlstwith |[]->() |h::t-> printf"%d\n"h printListt (* 上と同様だが任意の型の要素をプリントする *) letrecprintList2l= matchlwith |[]->() |h::t->printfn"%A"h printList2t (* match の代りに function 式を利用する *) letrecprintList3=function |[]->() |h::t->printfn"%A"h printList3t (* 高階関数を利用する *) letprintlist4lst=List.iter(printfn"%A")lst
(* フィボナッチ数列 *) letrecfibn= matchnwith |0|1->n |_->fib(n-1)+fib(n-2) (* 遅延再帰シーケンス式によるフィボナッチ数列 *) letrecfibs=Seq.cache<|seq{yield![1;1] forx,yinSeq.zipfibs<|Seq.skip1fibs->x+y} (* 遅延無限シーケンスによるフィボナッチ数列 *) letfibSeq=Seq.unfold(fun(a,b)->Some(a+b,(b,a+b)))(1,1) (* 偶数のフィボナッチ数をプリントする *) [1..10] |>List.mapfib |>List.filter(funn->(n%2)=0) |>printList (* 同じことをシーケンス式を利用する *) [foriin1..10do letr=fibi ifr%2=0thenyieldr] |>printList
Windows フォームを使用した例
[編集 ](* フォームの作成 *) openSystem.Windows.Forms letform=newForm(Visible=true,TopMost=true,Text="Welcome to F#") (* フォーム テキストを決める *) letx=3+(4*5) doform.Text<-(ifx=23then"Correct!"else"incorrect")
F#で書かれたソフトウェア
[編集 ]脚注
[編集 ]- ^ RNDr. Tomáš Grošup, Ph.D. (2024年11月14日). "Nullable Reference Types in F# 9". .NET Blog. 2024年11月28日閲覧。
- ^ "F# at Microsoft Research". Microsoft. 2016年8月26日閲覧。
- ^ a b Chris Smith 2008, p. VII, まえがき.
- ^ Chris Smith 2008, p. 23, 2章 基本事項.
- ^ Chris Smith 2008, p. 383, 付録 B F#の相互運用性.
- ^ Chris Smith 2008, p. 8, 1章 F#の紹介.
- ^ "Xamarin.Android - Xamarin". Microsoft. 2019年9月15日閲覧。
- ^ "The A-Z of programming languages: F#". en:Network World by IDG. 2016年8月26日閲覧。
- ^ "Download Microsoft F#, August 2010 Community Technology Preview from Official Microsoft Download Center". Microsoft. 2015年5月28日閲覧。[リンク切れ ]
- ^ "Download F# Tools for Visual Studio Express 2012 for Web from Official Microsoft Download Center". Microsoft. 2015年5月28日閲覧。
- ^ "Announcing Visual F# Tools 3.1.1, with support for Desktop and Web express - Visual F# Tools Team Blog - Site Home - MSDN Blogs". Microsoft. 2015年5月28日閲覧。
- ^ "Announcing the release of Visual F# Tools 3.1.2 - Visual F# Tools Team Blog - Site Home - MSDN Blogs". Microsoft. 2015年5月28日閲覧。
- ^ "Use F# on Linux". F# Software Foundation. 2019年9月15日閲覧。
- ^ "Get started with F# with command-line tools". Microsoft. 2019年9月15日閲覧。
参考文献
[編集 ]- Chris Smith 著、鈴木幸敏 訳、頃末和義 編『プログラミングF#』(初版)オライリー・ジャパン、2008年8月。ISBN 978-4-87311-466-8。
関連項目
[編集 ]外部リンク
[編集 ]- The F# Software Foundation
- Microsoft Research - F#
- Try F#
- Don Syme's WebLog on F# and Other Research Projects
アーキテクチャ | |
---|---|
共通言語基盤 | |
言語 | |
パッケージマネージャ | |
関連技術 | |
その他のCLI実装 | |
組織 | |
開発環境 | |
その他 | |
カテゴリ カテゴリ |