7

Chris Smith が F# について話しているポッドキャストを聞いたところです。その中で彼は、F# はC#/VB.NET とは異なる方法で問題にアプローチできる言語であると語っています。また、F# がどのように "XML のようになる" か、特定の問題をより効率的な方法で解決するために、選択した言語 (C# または VB.NET) に加えて使用するものです。

これにより、.NET 言語の関係について考えるようになりました。以下に、それらをどのように理解するかを示します。

  • C# と VB.NET は構文的には異なりますが、実質的な違いはありません。つまり、C# プログラマーは、「新しい方法で問題にアプローチする」ために VB.NET を学ぶことはありません。
  • ただし、C# または VB.NET のプログラマーは、 「機能的な方法でプログラミングの問題にアプローチする」ために F# を学習します。

しかし、IronPythonIronRubyはどうでしょうか? Chris は「F# は Ruby と Python から多くを学んだ」と述べたので、F# は IronRuby/IronPython と同様の関係を持ち、C# は VB.NET と同様の関係を持っていると思います。しかし、ちょっとググってみると、IronRuby と IronPython はどちらも DLR 上に構築されていますが、F# はそうではありません

F#、IronRuby、IronPython の関係を最もよく理解するにはどうすればよいですか?

4

6 に答える 6

15

F# と IronPython/IronRuby は、言語の観点からは何光年も離れています。F# は、機能的で高度に型指定されたコンパイル済み言語です。IronRuby/IronPython は、動的に型付けされ、解釈される言語です。

IronPython は追加でコンパイルをサポートしていると思いますが、100% 確信があるわけではありません。

VB.Net と C# の関係は非常に密接です。

于 2009-06-10T19:59:14.877 に答える
6

多くの点で、F# と Ruby/Python は表面的に似ています。3 つの言語はすべて、コードに多くの型を散らかすことなく、アイデアを簡潔に表現することができます。ただし、F# は静的に型付けされる言語であるのに対し、Ruby と Python は動的に型付けされるため、F# は実際には Ruby や Python とは大きく異なります。慣用的な F# コードで型が言及されることはめったにありませんが、コンパイラは型を推測し、型エラーはコンパイル中にコンパイラによってフラグが付けられます。Ruby と Python の場合、間違った型の値を使用すると、実行時にのみエラーが発生します。Ruby と Python のダイナミズムは、どちらも F# よりもメタプログラミングに適していることを意味します (たとえば、型は実行時に変更できます)。一方、F# はほとんどのタスクでパフォーマンスが向上します (C# に匹敵)。また、パターン マッチングを使用した判別共用体など、多くの優れた機能的抽象化を提供します。これらの言語をよく学ぶと、C# や VB.NET とは異なる方法で問題を考えるようになることは確かですが、F# と Python/Ruby の間でもアプローチが大きく異なる可能性があります。

于 2009-06-10T20:11:12.263 に答える
5

F# は、Ruby と Python を組み合わせたものよりも、OCaml から多くのことを学んだと思います。唯一の実際の比較は、IronPython/Ruby が Python/Ruby を .NET にもたらしたのと同じように、F# が ML を .NET にもたらしたことです。

于 2009-06-10T20:12:36.877 に答える
0

F# は、関数型のアプローチで対処するのが最適な特定の問題がある "ツール" 言語のようなものです。F# は本質的にスレッド セーフであるため、複数のプロセッサを使用するようにアプリケーションをスケーリングするのに役立つことが期待されます。特定の問題を処理するために VB.NET または C# で使用されるコンポーネントを構築するために F# が使用されていることがわかります。

于 2009-06-10T20:00:43.423 に答える
0

F# には動的言語に似た側面があります。ただし、JaredPar の回答は、実際にそれを要約しています。F# は関数型プログラミングの独自のカテゴリに属し、IronRuby と IronPython は動的言語であり、C#/VB OO 言語です。それらはすべて同じことを行うことができ、それをどのように行いたいかによって異なります。それぞれに、特定の問題に対する長所と短所があります。

于 2009-06-10T20:04:56.097 に答える
0

注:これは主に、この件に関する私の考えと観察をまとめたものです。昼は C# プログラマー、夜は Python です。

ええ、私は言われたことのいくつかに同意しますが、少し時間があるので、自分の考えを詳しく説明して共有したいと思います.

F# は関数型言語です。つまり、いわば動詞にもっと関心があるということです。これは依然として静的に型付けされ、CLR で実行されますが、コードの構造と問題の処理方法が異なります。通常、関数型言語は構造がより数学的であり、正式に証明するのが簡単であると考えられています。もちろん、それは一般的にほとんどアカデミックなものと見なされています。

C# やその他の静的に型付けされた OO 言語は、私の類推をさらに進めるために、名詞に重点を置いています。したがって、コードを構造化し、それに関する問題に取り組みます。もちろん、状態を維持し、OO 言語でより頻繁に発生する傾向があるオブジェクトに対して非決定論的なメソッドを使用することには、自然な問題もあります。

もちろん、F# には OO 言語から借用したいくつかの機能とアイデアがあり、C# には関数型から借用したアイデアと機能があります。

Python と C# の比較は、動的型付けと静的型付けの違いに関するものです (ただし、Python には、C# にまだないいくつかの機能があります)。動的型付けは通常、イントロスペクション/リフレクション アクティビティと実行時の変更を処理するのがはるかに簡単ですが、「通常の」コードで使用されるタイプミスや不適切なオブジェクトによる実行時エラーのリスクが追加されます。

通常、静的言語には、動的言語にはない開発者のオーバーヘッドがあります。オーバーヘッドは通常、物事を抽象化するためのレイヤーを作成する必要があり、必要な/必要な抽象化を操作するための継承階層とインターフェイスを作成する必要があるためです。型への依存を避けようとしているので。

大規模なチームでは、静的言語の方がはるかに管理しやすいようです。さらに、そこにあるすべてのチェックとツールを使用して、リファクタリングの利点を非常に簡単に得ることができます。

于 2009-08-19T20:33:05.773 に答える