さまざまな関数型言語を分類するのに役立ついくつかの重要な軸を述べている Chris Conway の回答が気に入っています。
特定の言語の機能に関しては、他の多くの FPL にはないいくつかの機能を呼び出すためにF#を選びます。
- アクティブ パターン: 多くの FPL には代数データ型とパターン マッチングがありますが、「アクティブ パターン」と呼ばれる F# 機能を使用すると、任意のデータに対してパターン マッチング構文を使用できる新しいパターンを定義できます。
- 計算式: F# には、モナド コードを作成するための美しいシンタックス シュガーがあります。型システムはより高次のポリモーフィズム (型構築子に対する抽象化なし) を表現できないため、任意のモナド M のコードを書くことはできませんが、固定モナドのコードを書くことは非常にクールであり、人々はいくつかの優れた内包表記をseq{} または async{} モナド。
- Quotations : 通常の「メタプログラミング用のデータとしてのコード」ビット。
一般的な分類では、F# は
- 熱心な(厳密な、値による呼び出し。ただし、'lazy' はキーワードとライブラリであり、いくつかの怠惰のために seq/IEnumerable を使用するのが一般的な戦略です)
- 不純(ただし、構文により、デフォルトでより純粋なスタイルにバイアスがかかります)
- static (型推論を使用するため、F# は多くの場合「スクリプトのように感じる」、型安全性のみ)
あなたの質問は、いくつかの言語外の語用論(たとえば、どのランタイムと統合するか)に対して明確な偏見を持って表現されていますが、「開発方法に影響を与える」ものも尋ねます。これらのことはそれに影響を与えます:
- Visual Studio との統合は、優れた編集エクスペリエンスを意味します(例: Intellisense)
- Visual Studio との統合は、優れたデバッグ エクスペリエンスを意味します (例: ブレークポイント/トレースポイント、ローカル、即時ウィンドウなど)。
- スクリプティングまたは UI オンザフライのREPLは重要です (fsi.exe コマンドライン、または VS に統合された "F# Interactive")
- .NET 統合は、ほとんどの 'X' に対して、それを行うためのライブラリが既に存在することを意味します
- FsLex/FsYacc などのサイド ツール、および「システムのビルド」を容易にする MSBuild との統合
(言語をそのランタイムとツールから分離しようとすることは、ほとんど学術的な課題だと思います。)
だから、私がファンである特定の言語の多くの特徴的な機能の説明があります. 他の個々の言語の特徴を引き出す同様の回答を他の人が投稿してくれることを願っています。