BT

InfoQ ホームページ ニュース F# 4.5の新機能

F# 4.5の新機能

ブックマーク

原文(投稿日:2018/08/05)へのリンク

プレビュー版として提供されているF# 4.5では、いくつもの新しい機能が提供されている。例えば、.NET Core 2.1のサポート、プリミティブ型のSpan<T>、新しいキーワードMatch!などだ。

Spanはポインタの操作の低いレベルのコードを安全で予測可能にする。これによってメモリの確保の必要性を削減しメモリの効率的にし性能を改善する。Spanはすでにメモリのどこかに保存されているデータの仮想的なビューを提供する。例えば、10000の要素の配列がある場合、最初の1000の要素を含むスライスを仮想的に作成し、コピーを作成せずにそれを関数に渡すことができる。

    let nativeMemory = Marshal.AllocHGlobal(100);
    let nativeSpan = new Span<byte>(nativeMemory.ToPointer(), 100)
    let nativeSpanSlice = new Span<byte>(nativeMemory.ToPointer(), 10)

    let mem = NativePtr.stackalloc<byte>(100)
    let mem2 = mem |> NativePtr.toVoidPtr
    let stackSpan = Span<byte>(mem2, 100)

実際には、Spanには複数の機能が含まれている。voidptr型、NativePtr.ofVoidPtrNativePtr.toVoidPtr関数などだ。これらがF# 4.5のSpanのサポートをC# 7.3と同等のものにしている。対応関係は以下の通りだ。

C#                       F#
out int arg              arg: byref<int>
out int arg              arg: outref<int>
in int arg               arg: inref<int>
ref readonly int         Inferred or arg: inref<int>
ref expr                 &expr

コードの安定性を保証するため、F#はSpanの利用にいくつかの制限がある。どれも、byrefライクな構造体に適用される。

  • letで束縛された値はその参照を宣言されたスコープから外に出せない。
  • byrefライクな構造体はインスタンス化できない。クラスや普通の構造体の静的なメンバになれない。
  • byrefライクな構造体はジェネリックな型パラメータとして使えない。
  • byrefライクな構造体はクロージャでは捕捉できない。

Match!キーワードは開発者にとって待望の新機能であり、コンピュテーション式内のマッチング構文を単純にする。F# 4.1では、マッチングの前段としてlet!を使う必要があった。

let funcWithString (s: string) =
    async {
        let! r = asyncFunction s
        match r with
        | Some bananaString -> printfn "It's banana!"
        | None -> printfn "%s" s
    }

F# 4.5では、単純に次のように書ける。

let funcWithString (s: string) =
    async { 
        match! asyncFunction s with
        | Some bananaString -> printfn "It's banana!"
        | None -> printfn "%s" s
}

また、F# 4.5には次のような機能も含まれる。

  • yieldをシーケンス、リスト、配列で使ったとき、アップキャストが必要なくなる。
let x2 : obj list  = [ yield "a" :> obj ] // pre-F# 4.5

let x3 : obj list  = [ yield "a" ] // F# 4.5
  • 列挙型はデフォルトでパブリックとして出力される。プロファイルツールを利用しやすくするため。

  • Asyncのスタックトレースの改善。有用な情報を提供する。

F# 4.5はプレビューであるものの、とても安定しており、Visual Studio 2017 update 15.8に同梱される予定。それまでの間は、.NET core プラットフォームWindowsで入手できる。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。