F# の設計者である Don Syme 氏は今週、新バージョン 6.0 では、普及率を高めるために「言語としてより普通になる」ことを目指していると語った。
.NET Confのバーチャルイベントで、Syme氏と彼の同僚であるプリンシパルプログラムマネージャーのKathleen Dollard氏によるF# 6のプレゼンテーションの直後、重要な瞬間がありました。ある開発者がこう質問しました。「F#でレコード内のオプション値を扱う最適な方法は何ですか?」
精力的な.NETエバンジェリスト、スコット・ハンセルマン氏は、称賛に値するほど正直に、「言葉の言い方は分かるけど、意味は分からない」と認め、ダラード氏でさえどう答えていいのか分からなかった。「F#のオプション値を使えばいいんです」とサイム氏は言った。「そうすれば、オプション引数を取れるレコードを作成するヘルパーメソッドを作成できます」
「言葉の言い方は分かるけど、意味は分からない」
問題は、F# を知っている人はこの言語を愛する一方で、そうでない人にとってはやや難解であるということです。F# 6.0 には、この問題に対処するための機能がいくつか追加されています。その一つがインデックス構文です。これまでは、配列要素にアクセスするには、式とインデックスの間にドットを挟んだ expr.[idx] という形式で記述していました。F# 6 では、開発者は C#、Java、C と同様に expr[idx] と記述できるようになりました。
「F#をより普通の言語にするために改訂しました」とSyme氏はプレゼンテーションで述べた。「あのドットのせいで、理由もなくユーザーが離れていくんです。例えば、インデックス作成やスライス処理を多用するF#の機械学習コードを特定の層に見せると、まず目につくのがドットです。『もう聞かない』と言われるんです」
同様に、新しいtaskキーワードが追加されました。バージョン6.0より前のバージョンでは、「F#の非同期プログラミングは非常に優れており、多くの優れた特性を備えていますが、.NETのタスクとはいくつかの重要な点で異なっていました。これらの点が、非同期プログラミングと、タスクを使用する.NETライブラリとの間に大きな矛盾を生み出していました」とSyme氏は述べています。
F# Asyncモジュールには、相互運用性を実現するためにStartAsTaskやAwaitTaskといったメソッドが含まれています。F# 6.0では、「タスクプログラミングを直接実行できるようにしました」とSyme氏は述べています。公式の新機能リストによると、「task {...}のパフォーマンスはasyncを使用するよりも大幅に向上します」とのことです。
「F# 6のテーマは、これまでのF#のテーマと一貫しています」とSyme氏は述べ、そのテーマは「簡潔、堅牢、そして高性能」です。とはいえ、Syme氏は「F#についての考え方を変えました」と付け加え、もはや関数型言語としてではなく、「関数型プログラミングをはじめとする様々なプログラミングを含む、F#で実行できるプログラミングの特性を反映しています」と述べました。
F# 6.0 のその他の新機能には、インデント対応構文の矛盾の解決、暗黙的な変換のサポートの強化、新しいコレクション関数、および既定の実装によるインターフェイスの使用のサポート (C# の機能) が含まれます。
- Microsoft は Mac 向け Visual Studio 2022 をプレビューしていますが、VS Code は Apple ハードウェアで問題なく動作するのだから、わざわざプレビューする必要があるのでしょうか?
- .NET 6 LTSとVS 2022:マイクロソフトのオープンソースへの取り組みに対する懸念が続くことで、メジャーリリースが台無しに
- .NET Foundationのドラマの中で、マイクロソフトのDe Icaza氏は、.NET FoundationがGNOME Foundationのような組織になるはずだったと明かした。
- .NETはもっと速く?マイクロソフトのソフトウェアエンジニアによるモンスター級の投稿で、大幅な改善が明らかに
ツールの改善にはパイプラインデバッグが含まれます。パイプラインとは、ある関数の出力を別の関数の入力として渡すことです。パイプラインデバッグにより、開発者はパイプラインの中間段階にブレークポイントを設定できます。
デバッガーは、シャドウされた変数の値も表示するようになりました。シャドウされた変数とは、後で同じ名前の新しい変数が宣言されたために値が表示されていない変数のことです。
Dollard氏が「コンパイラ/IDEツールのパフォーマンスとスケーラビリティの劇的な向上」と呼ぶものもあります。さらに、F# 6.0は.NETランタイムのパフォーマンス向上の恩恵も受けています。
F# は、ケンブリッジの Microsoft Research から誕生しました。そのきっかけは、2001 年に Syme が Caml メーリング リストに投稿した「OCaml の .NET バージョンの開発に協力してくれる時間のある人はいませんか?」という質問でした。
初期の全歴史はこちら[PDF]でご覧いただけます。F#のFは「functional(関数型)」の略でしょうか?「まあ、その通りです」とSyme氏は答えました。「Fは一部、『System F』、つまりコアとなるラムダ計算の略ですが、もちろんこの計算はFunctionにちなんで名付けられました。F#コミュニティでは『F#は楽しいもの』と言われていますが、これもキーワード『楽しい』をかけた素敵なダジャレですね。」
F# 1.0は2005年に登場し、Symeは、特定のシナリオにおいて、同じ処理を行うコードが他の言語と比べていかに簡潔であるかを実証し、プログラミングコミュニティに大きな衝撃を与えました。その効率性と、関数型プログラミングはエラーが発生しにくく、潜在的にコストのかかるバグを回避できることから、F#はすぐに金融コミュニティで支持されました。
Visual Studio の F# プロジェクトの種類は、C# や Visual Basic の幅広いプロジェクトの種類と比較して、コンソール、ライブラリ、Web アプリケーションに限定されているため、広範な導入への障壁は依然として存在します。ただし、.NET 対話型ノートブックはサポートされており、「dotnet fsi」と入力すると、.NET SDK がインストールされている場所であればどこでも対話型セッションが開きます。
F#はオープンソースコミュニティにおける高い評価でも注目に値します。F# Foundationは明確な法的枠組みを持ち、言語は確立されたオープンプロセスであるRFCを通じて進化しています。また、F#はクラウドファンディングによって開発されたIonideと呼ばれるツールセットを通じて、クロスプラットフォームのVisual Studio Codeを強力にサポートしています。
この言語は依然としてニッチな存在ですが、熱狂的な支持を得ています。StackOverflowの年次調査では、回答者の使用率はわずか0.97%ですが、「最も愛されている言語」のセクションでは62.44%とC#をわずかに上回っています。使用率を高めることは困難ですが、F# 6.0の変更は、コミュニティが.NETの秘められた秘密をもっと広く知ってもらいたいと願っていることを示しています。®