F#とScalaはどちらも関数型プログラミング言語であり、開発者に不変のデータ型のみを使用するよう強制するものではありません。どちらもオブジェクトをサポートしており、他の言語で作成されたライブラリを使用して仮想マシンで実行できます。どちらの言語もMLに基づいているようです。
F#は.NETとScala for Scalaのために設計されているという事実にもかかわらず、F#とJavaの最大の違いは何ですか? =プラットフォーム?
主な違い:
ScalaとF#は、OO命令プログラミングと関数型プログラミングを1つの言語に組み合わせたものです。ただし、パラダイムの統一へのアプローチは大きく異なります。ScalaはFuse2つのパラダイムを1つに(オブジェクト機能パラダイムと呼びます)、F#は2つのパラダイムを並べて提供します。たとえば、F#の代数データ型ScalaのADTは通常のクラスとオブジェクトですが、CLRバイトコードへのコンパイルプロセスでは、F#ADTもクラスとオブジェクトになりますただし、ソースレベルではF#プログラマーには表示されません。)
F#には、完全なHindley-Milnerスタイルの型推論があります。 Scalaには部分的な型推論があります。サブタイプと純粋なOO-nessのサポートにより、Hindley-Milnerスタイルの型推論はScalaでは不可能になります。
ScalaはF#よりもはるかにミニマルな言語です。 Scalaには、言語全体で再利用される非常に小さな直交する構成要素のセットがあります。F#は、あらゆる小さなものに新しい構文を導入するようで、Scalaに比べて構文が非常に重くなります。(Scala F#には97個のキーワードがありますが、40個のキーワードがあります。
F#はMicrosoft言語であるため、IDEはVisual Studioの形式でサポートされています。Scala側では物事はあまり良くありません。Eclipseプラグインはまだありません。マークまで。NetBeansプラグインについても同様です。IDEAは現時点で最善の策のようですが、Java IDE(EmacsのファンにはENSIMEがあります。このパッケージについて多くの良いことを聞いたことがありますが、まだ試していません。)
ScalaはF#よりはるかに強力な(そして複雑な)型システムを持っています。
その他の違い:
F#関数はデフォルトでカリー化されています。 Scalaではカレーを利用できますが、あまり使用されていません。
Scalaの構文は、Java、標準ML、Haskell、Erlang、その他多くの言語の構文を組み合わせたものです。 F#構文は、OCaml、C#、Haskellの構文に触発されています。
Scalaはより高い種類と型クラスをサポートしています。 F#はサポートしていません。
ScalaはF#よりもDSLにはるかに対応します。
PS:私はScalaとF#の両方が大好きで、将来的にそれぞれのプラットフォームの主要言語になることを願っています。:-)
小さいが重要な点の1つはライセンスです。ScalaはBSD(かなり寛容なフリーソフトウェアライセンスです))、F#は「Microsoft Research Shared Sourceライセンス契約」でしたが、商用です最近の製品(以下の@Lorenzoによると、特定のライセンス契約はどこにも見つかりませんでした)。