F# が .NET コミュニティに対して行うことを、Java コミュニティに対して行う関数型言語は存在するでしょうか?
JVM で使用できる、または開発中の関数型プログラミング言語は?
F# が .NET コミュニティに対して行うことを、Java コミュニティに対して行う関数型言語は存在するでしょうか?
JVM で使用できる、または開発中の関数型プログラミング言語は?
Scalaが言語になります。
厳密には機能的ではありませんが (機能指向とオブジェクト指向が混在しています)、厳密には Java 用ではありません ( Scala の .NET バージョンがあります) が、JVM の F# に最も近いものになります。
最初に頭に浮かんだのはScalaでしたが、F# は Ocaml のバリアントであるため、実際にはOcaml-Javaに近づいています。Ocaml-Java と Scala を比較したこの投稿を参照してください。
OCaml プログラマーは通常、Java や C++ プログラマーの 10 倍以上の生産性で、幅広い実用的なタスクをこなします。基本的に OOP プラットフォームに基づいているにもかかわらず、F# は OCaml (および ML ファミリ全体) の生産性向上の利点を捉えるのに大いに役立ちます。対照的に、Scala はいくつかの本当に基本的な利点を含む利点の多くを捉えることができず、その結果、Scala で正しいコードを記述することは、実際の ML よりもはるかに困難です。
さらに、言語の ML ファミリーは簡潔になるように設計されていますが、Scala は「Hello world!」からすべてに対して不必要に冗長です。上向き。ML ファミリーの言語は広範な型推論を提供しますが (ほとんどの言語よりも OCaml)、Scala には初歩的な推論しかありません。OCaml には非常に表現力豊かな型システムがありますが、Scala は実際に重要な OOP にほとんど追加しません。
おそらくClojure。静的に型指定されていませんが、F#よりも不変性と並行性に重点が置かれています。ただし、F#と同様に(そしてCommon Lispとは異なり)、基盤となるプラットフォームからOOライブラリを利用するのに適した主に関数型言語となることを目的としています。
今のところ、私はScalaと言います。しかし、将来のために、私はフォートレスを見たいと思います. 仕様の最初の実装は 2008 年 4 月 1 日にリリースされました。いいえ、それは冗談ではありません。主な機能は次のとおりです。
詳細については、Project Fortress Community Web サイトおよびWikipedia Fortress ページを参照してください。
関数型プログラミング パラダイムやその他のパラダイム言語を含む、JVM 用のプログラミング言語の優れたリストがあります。
私の最初の選択は Scala (マルチパラダイム; OO & FP) です。私は 2009 年に 5 か月以上 Scala を勉強し、クイック リファレンス シートを作成しました: bchiprog.blogspot.com/2009/05/scala-cheat-sheet.html
他にも興味深いプログラミング パラダイムがあり、X10、Fortress、Chapel などの並列処理に焦点を当てていることに気付きました。X10 は Scala の上に実装されています - http://www.scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf
それは、解決する必要がある問題に基づいており、それを最もよく解決できる言語を選択します。あらゆるタイプの問題を簡単に解決でき、簡単に実行できる言語が 1 つあることは、開発者の願いだと思います。
JVM にはテール コールがなく、ほとんどすべての機能コードをスタック消費に関して堅牢にする必要があるため、ほぼ間違いありません。
JVM での関数型言語の実装に最も近いものは、Clojure、Scala、およびOCaml-Javaプロジェクトです。末尾呼び出しがない場合の回避策 (トランポリンなど) はありますが、これらの言語実装はいずれもこれを行いません。これは、回避策がパフォーマンスの低下やデバッグの完全な難読化など、さらに深刻な問題を引き起こすためです。
Sun は何年もの間、テール コールについて話し合ってきましたが、最近では、それらをすぐに実装するつもりであることを示しています。それが完了するとすぐに、JVM でさらに多くの言語の多様性が見られると確信しています。特に、製品品質の関数型言語の実装がいくつか見られます。それまでは、これらの言語はすべておもちゃだと思っています。
乾杯、ジョン・ハロップ。
@Marc Gravell - 関数型言語は、エンタープライズ グレードの金融システムの内部でますます使用されています。私が働いている銀行では、多くの機能 (純粋または「半純粋」) を使用しています...
一方、Java にコンパイルされる Haskell の精神に基づく純粋な関数型の非厳密な言語であるFregeがあり、その後、環境 (コマンドラインまたは eclipse) に応じて javac または eclipse コンパイラーでさらにコンパイルされます。
実際、私は間違っているかもしれませんが、F# が他の .NET 言語ほど主流になるとは思っていません。いくつかのサークル (学術、コンパイラ、その他のいくつかのシナリオ) で役立ちます。ただし、 C#は FP の使用法を提供することを忘れないでください。毎回改善されます。C# 1.2 にはデリゲートがあります。C# 2.0 には匿名メソッドとキャプチャ/クロージャがあります。C# 3.0 には、単純化のためのラムダと、抽象化のための Expression があります。匿名型 (C# 3.0) は、(利便性の点で) タプルとある程度似ていますが、明らかに非常に異なる獣であるため、同種の比較ではありません。
F# ほど最適化されていない可能性がありますが、ほとんどの日常的な FP ユースケースでは十分です。
また、不変性 (特にスレッド化) のより良いサポートが、将来の検討のために C# 言語チームの心にかかっていることも非常に明らかです。
私のお金は、C# が FP でより良くなり、ほとんどの日常的な目的で .NET FP が提供されるようになったことにあります。もちろん、ある程度の F# の使用はありますが、(純粋に主観的なものですが) 大規模な移行があるとは思えません。
https://eta-lang.orgを提案に追加します。これは基本的に JVM 用の Haskell です。この質問は、F# が ML 言語であるのに対し、Clojure は LISP の方言であるという事実に沿っていると思います。