SPLASHの講演でDonSymeは、F#は一般的な機能を備えていても、C#の代わりになることを意図していないと述べています。彼は続けて、F#を使用しても意味がない領域があるが、論文を拡張していないと述べています。
私の考えでは、C#のように豊かで成熟した言語を置き換えると、非常に高価になります。したがって、たとえば現時点では、Visual Studio WinFormsデザイナを使用することで利点が得られる場合は、C#がWinForms開発に最適です。F#にはWinFormsデザイナがありません。
C#は、現時点ではLINQ-to-SQLのサポートも優れています。これらの線に沿って他の多くの例があると確信しています。
次に、C#のスキルを持つ従業員全体がスキルをF#に更新する必要がありますが、アプリケーションを維持するためのC#スキルは維持されますが、これもコストがかかります。
最後に、C#は多くの優れた機能を備えた優れた言語であり、一部のF#には、共変性/反変性ジェネリックのようなものがなく、DLRに対する動的計画法がすぐにサポートされます(F#には実装されていない演算子があります)。
したがって、F#がC#に置き換わるとは思わないことで、F#は、すでに十分にカバーされている領域でキャッチアップを行うことに時間を費やす代わりに、新しい方法で進化することができます。
これは、十分な資格がないため、難しい質問です。 言語全般について話しているのですか、それとも現在のIDEサポート)と一緒に言語について話しているのですか?または利用可能なライブラリを考慮して、F#の使用について話しているのですか?
一般的な言語-F#を使用することがまったくナンセンスになる領域はないと思います。フルマネージドOS(特異点など)のシステムプログラミングに最適であり、関数型プログラムは正式に検証する方が簡単だと思います(これはOSにとって大きな問題になる可能性があります)。低レベルの組み込みシステムの場合、メタプログラミングおよび言語指向の機能を使用できます(たとえば、ハードウェアの信号フローをモデル化するためなど)。
現在のIDEの言語-現在のF#IDEにはいくつかの制限があります-WinFormsデザイナーでは機能しません(ただし、BlendとWPFではうまく機能します)。
開発者教育を受けた言語-C#プログラマーを雇うよりもF#プログラマーを雇うほうが難しいです。複雑なコアを持たないアプリケーション(通常の「データベースのインターフェイス」など)を作成している場合は、C#で開発する方が安価です(優れたF#開発者を雇うことができれば、より速く、より少ないコストで完成する可能性があります)バグがありますが、コストに見合わない場合があります)。
使用可能なライブラリを指定した言語-うまく機能するライブラリのみでF#を使用するように制限したい場合は、ドメインがもう少し縮小します。たとえば、LINQ toSQLとASP.NETMVCはF#で使用できますが、完全ではありません。ただし、多くのプロジェクトでは、独自のライブラリを開発することが理にかなっており、F#はそのための優れた言語になります。
良い質問。開発者、マネージャー、および顧客の側には、言語上の理由はなく、多くの不幸なスキルセット、適性、および態度の理由があると思います。
WPFなどのMicrosoftのUIテクノロジの多くは、databindingを優れた方法でサポートしています。効果的なデータバインディングでは、双方向バインディングを使用して、ユーザーがUIを操作したときに基になるオブジェクトを更新します。これは、効果的なデータバインディングには可変オブジェクトが必要であることを意味します。
F#は不変タイプに重点を置いていますで、そのタイプのデータバインディングモデルとの一致はかなり不十分です。 F#で可変型を作成することは可能ですが、そうすると、言語から多くの利点が失われます。可変性がより自然になる言語(C#など)を使用する方が理にかなっています。
オペレーティングシステムのカーネル開発や低レベルの組み込みシステムに使用することについて、よく考えてみてください:-)
C#に固有のツールをあきらめ、適用可能な採用コストを支払うことをいとわないのであれば、F#が少なくともC#ほど機能しない特定の領域はありません。
フレームワークなどのWebアプリケーションASP.NET MVCは、C#に適しています。 「まったく意味がない」というのは極端なことで、「通常の状況では」と言えます。
もちろん、Webアプリケーションが参照するライブラリには使用できますが、実際のアプリケーション自体には使用できません。
まあ、明白なことを述べるリスクを冒して、F#は何よりもまず関数型プログラミング言語であり、OOP F#でのプログラミングは首の痛みになる可能性があります。したがって、問題を抱えている場合これは、OOP C#を使用する方が理にかなっていると思います。
相互再帰型とインターフェイスの明示的な実装は、F#のOOPが面倒な理由の最初の例です。
「OOPで最もよく表現される問題」の(よく引用される)例は、UIライブラリの作成です。独自の状態をカプセル化するウィジェットが多数あり、多形的に「自分を描く」などのいくつかのことを実行するようにウィジェットに依頼したいとします(それは単語でさえありますか?)
F#がVisual Studio(ASP.NET、WebForms、WPFなど)およびサードパーティツールによって完全にサポートされるまで、f#は常に二流市民になります。
それに直面しましょう。言語の選択は、堅実なライブラリ(.NET、c#とf#の両方で利用可能-ここではどちらにも利点はありません)と比較した場合、通常、生産性に大きな違いはありません、IDE (インテリセンス、シンタックスカラーリングなど)、(私が知る限り、f#で部分的にしかサポートされていません...例:Razorサポートなし)、およびサードパーティツール(例:resharper)。
したがって、そのことを念頭に置いて、これらのツールがすべてf#に対応するまで、c#の完全な置き換えを推奨できる人はいないと思います。適切な妥協案は、クラスライブラリでf#を使用し、フロントエンドで引き続きc#を使用することです。