F# 4.5の話
気が付いたら nugetにFSharp.Core 4.5.0がリリースされていたので、4.5について雑多に書きなぐります。
Versioning
F# はこれまで 4.0から4.1へとマイナーバージョンをあげていました。 ところが今回はF# 4.5、間の3つをスキップしています。 スキップした理由は fslang-designで確認できます。
There will be no F# 4.2, F# 4.3, or F# 4.4 language version - it will skip to F# 4.5. This is because it will allow versions of the F# language, FSharp.Core, and FSharp.Core NuGet package to line up in a VS 15.7 timeframe.
(F# では言語、FSharp.Core(assembly)、FSharp.Core nugetパッケージという3つのバージョンを知っておく必要があります)
新機能
F# 4.5とFSharp.Core 4.5.0に追加された機能はRFCで詳細を確認できます。
言語: https://github.com/fsharp/fslang-design/tree/69c7c47931f8205c1cdf28d5819d675de734bd8e/FSharp-4.5
言語的な意味でのF# 4.5はVS 15.8を待つことになりますが、FSharp.Coreのほうは既に使えるので試してみると良いかと。
まぁ、それだけでこの記事終わりは味気ないのでかいつまんで紹介。
RFC FS-1037
かつてのバージョンでは判別共用体のコンストラクタとパイプライン演算子の組み合わせによってはコンパイルに失敗します(パイプラインを使わない場合は通る)が、4.5からは通るようになるという話。
RFC FS-1047
コンピュテーション式にmatch!
が追加されます。
コンパイル時にlet!
とmatch
に展開されるのでバイナリ互換は保たれるはず。
もちろんエディタやコンパイラはF# 4.5以降でないと認識できない。
RFC FS-1053
.NETの新機能としてSpan
が追加されたので、F# でもサポート。
色々と型が追加されているけれど紹介が大変面倒なのでそのうち別記事を書きます。
RFC FS-1054
リストや配列リテラルのインデントルールが緩和されるらしい。
"undentation" (i.e. relaxations to the indentation rules)
という造語(?)の説明を読み飛ばすとひどい目にあう。
RFC FS-1055
リストや配列リテラルではyield
が使えるのですが、型によってはupcastを明示する必要がありました。
このupcastが不要になるよという話。
RFC FS-1057
F# におけるenum生成の変更。
RFC FS-1045
Add new
FuncConvert.FromFunc
andFuncConvert.FromAction
APIs.
RFC FS-1050
Map
にTryGetValue
が追加されました。
値返却時にallocationが不要な分performance-friendlyらしい。
RFC FS-1039
sturctなoption
であるValueOption
型と、voption
というtype aliasが追加されました。
FS-1058
asyncのstack traceが改善されたらしいです。 詳しくは上記リンクを読んでください。