タグ付けされた質問 「f#」

F#は、.NET用の簡潔で表現力豊かで効率的な機能およびオブジェクト指向言語であり、複雑な問題を解決するための単純なコードの記述に役立ちます。

3
F#とScalaの最大の違いは何ですか?
F#とScalaはどちらも関数型プログラミング言語であり、開発者が不変のデータ型のみを使用することを強制しません。どちらもオブジェクトをサポートしており、他の言語で記述されたライブラリを使用して、仮想マシンで実行できます。どちらの言語もMLに基づいているようです。 F#は.NETとJavaプラットフォーム用のScala向けに設計されているという事実にもかかわらず、F#とScalaの最大の違いは何ですか?

3
C#/ OOPでは貧弱なドメインモデルが悪いと考えられますが、F#/ FPでは非常に重要なのはなぜですか?
でブログの記事楽しさと利益のためにF#上、それは言います: 機能設計では、動作をデータから分離することが非常に重要です。データ型は単純で「ダム」です。そして、別に、これらのデータ型に作用する多くの関数があります。 これは、動作とデータを組み合わせることを意図したオブジェクト指向設計の正反対です。結局のところ、それはまさにクラスです。実際にオブジェクト指向の設計では、振る舞い以外は何もありません。データはプライベートであり、メソッドを介してのみアクセスできます。 実際、OODでは、データ型の周囲に十分な動作がないことは悪いことと見なされ、「貧血領域モデル」という名前さえあります。 C#では、F#から借用し続け、より機能的なスタイルのコードを記述しようとしているようです。なぜデータ/動作を分離するという考えを借りず、それを悪いと考えるのでしょうか?定義がOOPを伴わないというだけなのでしょうか、それともC#で悪いのに何らかの理由でF#に適用されない(そして実際には逆になる)具体的な理由がありますか? (注:私は、ブログ投稿のどちらかの意見に同意しない個人ではなく、善/悪の意見を変える可能性のあるC#/ F#の違いに特に興味があります)。

9
F#を大規模なコードベースとエンジニアリングチームに導入する際の現実的な落とし穴[非公開]
私は、大規模な既存のコードベース(すべてC#)と大規模なエンジニアリングチームを持つソフトウェア会社のCTOです。コードの特定の部分をF#で書くのがはるかに簡単になり、開発時間の短縮、バグの減少、並列実装の容易化など、基本的に私のチームの全体的な生産性の向上が見られます。ただし、F#を導入する生産性の落とし穴もいくつかあります。 1)誰もがF#を習得する必要があり、たとえばJavaからC#に切り替えるほど簡単ではありません。F#を学習していないチームメンバーは、コードベースのF#の部分で作業することはできません。 2)現在(2010年12月)の雇用可能なF#プログラマーのプールは存在しません。さまざまなソフトウェアエンジニアの履歴書データベースで「F#」を検索します。履歴書の1%未満がキーワードを含んでいます。 3)現在(2010年12月)のコミュニティサポートはあまり利用できません。C#のほとんどすべての問題をグーグルで検索し、F#でではなく、すでにそれを処理した人を見つけることができます。サードパーティのツールサポート(NUnit、Resharperなど)も大ざっぱです。 私はこれが少しCatch-22であることに気づきました。つまり、私のような人々がF#を使用しない場合、コミュニティとツールは決して実現しません、など。しかし、私は会社を経営しています。最先端ではありません。 私が検討していない他の落とし穴はありますか?または、私が言及した落とし穴に反論したい人はいますか?これは重要な議論であり、このパブリックフォーラムでの反論を聞いてみたいと思います。反論は、業界によるF#の採用を増やすのに大いに役立つかもしれません。

4
F#にインタラクティブモードがあり、C#がないのはなぜですか?
F#は、対話型REPLですぐに使用できます。C#には何もありません。実際、完全なプロジェクトをセットアップせずに遊ぶのは少し難しいです(ただし、LINQpadは機能しますが、PowerShell経由でも実行できます)。 F#で対話型コンソールを使用できるようにするが、C#で実装するのが困難になる言語について根本的に異なるものはありますか? 何年も後に人々はまだこの質問に来ているので、私は今多くの選択肢があることに注意すべきです。PowerShell(最新のすべてのWindowsマシンにプリインストールされている)を使用して、.Netフレームワークで遊ぶことができます。または、LINQpadを使用して、任意のc#コードのプロトタイプを作成できます。それとも、使用することができますScriptCsをかあなたのようなオンラインjsfiddle型環境を使用することができますComplify.netまたはJsilを。たくさんのオプション。
32 c#  .net  tools  f# 

3
関数パラメーターに注釈を付けないのはなぜですか?
この質問に答えられるようにするために、プログラマの心の中にある曖昧さのコストは、いくつかの余分なキーストロークよりもはるかに高価であると仮定しましょう。 それを考えると、なぜ私のチームメイトが機能パラメーターに注釈を付けないで逃げることができるのですか?はるかに複雑なコードの例として、次のコードをご覧ください。 let foo x y = x + y これで、ツールチップを簡単に調べると、F#がxとyがintを意味すると判断したことがわかります。それがあなたが意図したものであるなら、すべては順調です。しかし、それがあなたが意図したものかどうかはわかりません。2つの文字列を連結するためにこのコードを作成した場合はどうなりますか?または、ダブルスを追加するつもりだったと思う場合はどうなりますか?または、すべての単一の関数パラメーターの上にマウスを置いてそのタイプを決定する必要がない場合はどうなりますか? これを例として見てみましょう。 let foo x y = "result: " + x + y F#では、おそらく文字列を連結することを想定しているため、xとyは文字列として定義されます。ただし、コードを保守している貧弱なシュマックとして、私はこれを見て、xとy(int)を一緒に追加し、UI目的のために文字列に結果を追加するつもりだったのではないかと思うかもしれません。 確かにこのような単純な例では手放すことができますが、明示的な型注釈のポリシーを強制しないのはなぜですか? let foo (x:string) (y:string) = "result: " + x + y 明確であることにはどのような害がありますか?確かに、プログラマーは自分がやろうとしていることに対して間違ったタイプを選択する可能性がありますが、少なくとも私は彼らがそれを意図していたことを知っています。 これは深刻な質問です...私はまだF#が初めてであり、会社の道を切り開いています。私が採用する標準は、今後のF#コーディングの基礎となり、今後数年間、文化に浸透していくと確信している無限のコピーペーストに組み込まれます。 それで... F#の型推論に特別な何かがあり、それを保持する価値のある機能にし、必要な場合にのみ注釈を付けますか?または、専門のF#-ersは、自明ではないアプリケーションのパラメーターに注釈を付ける習慣をつけていますか?
28 f#  parameters 

3
F#でrecキーワードが必要なのはなぜですか?
F#では、recキーワードを使用する必要があります。Haskellでは、特定の関数が再帰的であるかどうかを明示的に伝える必要はありません。 関数型プログラミングにおける再帰の役割を考えると、F#の設計はかなり奇妙に思えます。それは良い言語設計の決定ですか、それとも歴史的な理由または実装の制約のためにのみ存在しますか?

2
Yコンビネーターとテールコールの最適化
F#のYコンビネーターの定義は let rec y f x = f (y f) x fは、最初の引数として、再帰的サブ問題の継続を期待しています。yfを継続として使用すると、fが次の呼び出しに適用され、開発できることがわかります。 let y f x = f (y f) x = f (f (y f)) x = f (f (f (y f))) x etc... 問題は、先験的に、このスキームがテールコールの最適化を使用できないことです。実際、fで保留中の操作がある可能性があります。その場合、fに関連付けられたローカルスタックフレームを変更できません。 そう : 一方では、Yコンビネータを使用するには、関数自体とは明示的に異なる継続が必要です。 TCOを適用する必要がある場合は、fで保留中の操作はなく、f自体のみを呼び出します。 これら2つを調整する方法を知っていますか?アキュムレータトリックを使用したYや、CPSトリックを使用したYなど?それともそれができる方法がないことを証明する議論?

3
F#のパフォーマンスとErlangのパフォーマンス、ErlangのVMが高速であることの証明はありますか?
私は関数型プログラミングの学習に時間を費やしてきたので、チュートリアルや例に手を出すのではなく、プロジェクトの作成を始めたい部分に来ました。 私の研究を行っている間、Erlangは並行ソフトウェアの作成に関しては非常に強力であるようです(これが目標です)が、開発用のリソースとツールはMicrosoft開発製品ほど成熟していません。 F#はLinux(Mono)で実行できるため、要件は満たされますが、インターネットを調べていると、F#とErlangの比較が見つかりません。現時点では、Erlangが最も報道されているという理由だけで傾いていますが、2つのシステムの間に実際にパフォーマンスの違いがあるかどうかは興味があります。 私は.NETでの開発に慣れているため、おそらくErlangよりもF#の方がはるかに高速になりますが、F#がErlangと同じくらいスケーラブルであることを納得させるリソースは見つかりません。 シミュレーションに最も興味があります。これは、多くの迅速に処理されたメッセージを永続ノードに送信します。 私が尋ねようとしているもので良い仕事をしていないなら、さらなる検証を求めてください。
19 f#  erlang 

3
最も速い関数型言語
私は最近、特にHaskellとF#の関数型プログラミングを掘り下げてきました。いくつかのグーグルを回った後、より顕著な関数型言語(Scala、F#など)のベンチマーク比較を見つけることができませんでした。 一部の言語はハイブリッドであるため、必ずしも公平ではないことを知っています(Scalaが思い浮かびます)が、どの操作と全体でどのパフォーマンスが優れているかを知りたいだけです。

2
F#は、データベース駆動型のWeb開発に特に役立つものを提供しますか?
私の組織は今年、ついにMS Visual Studio 2010にアップグレードしました。Visual Studio 2010が提供する大きな新機能の1つは、F#プログラミング言語です。 F#は、Lispと同様の関数型プログラミングパラダイムを提供することを理解しています。ただし、Lispとは異なり、F#は.netフレームワークのマネージコードにコンパイルされます。 現在、私はデータベース駆動型のWebアプリケーション開発に取り組んでいます。現在、私はバックエンドでSQLコードを使用し、フロントエンドでC#.net AJAX Webアプリケーションを使用するn層アプリケーションで作業しています。F#がこの種の開発に特に役立つものを提供しているかどうかを知りたいです。

4
型に対するパターンマッチングは慣用的ですか、またはデザインが貧弱ですか?
F#コードは多くの場合、型に対するパターンマッチのようです。もちろん match opt with | Some val -> Something(val) | None -> Different() よくあるようです。 しかし、OOPの観点から見ると、それはランタイムタイプチェックに基づく制御フローに非常によく似ており、通常は眉をひそめます。わかりやすく言うと、OOPではおそらくオーバーロードを使用することをお勧めします。 type T = abstract member Route : unit -> unit type Foo() = interface T with member this.Route() = printfn "Go left" type Bar() = interface T with member this.Route() = printfn "Go right" これは確かにより多くのコードです。OTOH、私のOOP-yの心には構造的な利点があるようです: …

3
C#とF#を一緒に使用すべきか
同じプロジェクトでC#とF#を一緒に使用できることは知っていますが、それが良いアイデアかどうかはわかりません。 2つの非常に異なるコーディングスタイル(機能的とOOP)を混在させると、デザインの凝集性が失われる可能性があります。これは正しいです?
16 design  f# 

5
FP思考に慣れている人は命令型コードをどのように読むべきですか?
私は約5か月前に大学を卒業し、過去4か月間地元の新興企業で働いています。大学にいる間、私はHaskellやF#などを自分で勉強しました。私たちは大学でJavaを教えられましたが、すぐに関数型プログラミングに触れるようになり、命令型プログラミングよりもはるかに多くの時間を費やしました。その結果、私の脳は機能的思考のために配線されています。私が参加した会社はPythonを使用しており、コードは非常に重要です。私は命令型コードを読むのに非常に苦労しています。変異を追跡することはできません。for-if-else-for -...のネストが4レベルを超える深さになると、コードで何が起こっているかを完全に把握できなくなります。さらに、Pythonは動的言語であるため、コードには型がありません。それ' コードベースの一部(おそらく「適度に複雑な」)を理解しようとしてから数週間が経ちましたが、これまでのところ理解できるほどの進展はありませんでした。そのコードを理解する方法についての実用的なテクニックをいくつか教えてください。前もって感謝します! 編集: コードに実際にはあまりコメントがなく、名前もあまり直感的ではないことを言及する必要があります。

4
命令型プログラマーに宣言型プログラミングを教えようとするとき、いくつかの良い習慣は何ですか?
私は自分の会社でF#のトレーニングを少し行うことを申し出ましたが、彼らは興味を示しているようでした。彼らは通常、プログラミングにあまり情熱を傾けないVB6およびC#プログラマーです。そうは言っても、機能的なことを考えると正しいコードを書く方が簡単だと思うので、彼らは間違いなく何らかの利益を得るはずです。 誰も私がこれにどのようにアプローチするべきかについていくつかのアドバイスを提供できますか? アイデア 構文に集中するのではなく、代わりにこの言語とそれが促進するイディオムをどのように使用できるかに集中してください。 命令的な方法で書くのは苦痛だが、宣言的な方法で書くとエレガントなコードに変換される例を試してみてください。

4
関数型プログラミング—不変性
私はFPで不変データを扱うことを理解しようとしています(特にF#ですが、他のFPも大丈夫です)、ステートフル思考(OOPスタイル)の古い習慣を破ります。ここでの質問に対する選択された回答の一部は、OOPのステートフルな表現とFPの不変な表現(たとえば、プロデューサーとコンシューマーのキュー)によって解決される問題に関する記述の検索を繰り返しました。何か考えやリンクは大歓迎ですか?前もって感謝します。 編集:質問をもう少し明確にするために、FPで複数のスレッド(例:プロデューサーとコンシューマー)で不変の構造(例:キュー)を同時に共有する方法

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.