F#が.NETコミュニティに対して行うことをJavaコミュニティに対して行う関数型言語はありますか?
-
05-07-2019 - |
質問
F#が.NETコミュニティに対して行うことをJavaコミュニティに対して行う関数型言語はありますか?
JVMで利用可能な、または開発中の機能プログラミング言語は何ですか?
解決
おそらく Clojure 。静的に型付けされているわけではありませんが、F#よりも不変性と並行性を重視しています。ただし、F#と同様(およびCommon Lispとは異なり)、基本的なプラットフォームからOOライブラリを使用するのが得意な、主に機能的な言語であることが意図されています。
他のヒント
Scala が言語になります。
厳密には機能的ではありませんが(機能的指向とオブジェクト指向の混在です)、Java専用ではありません( Scalaの.NETバージョン)、これはJVMのF#に最も近いアナログです。
最初に思いついたのは Scala でしたが、実際は Ocaml-Java F#はOcamlのバリアントであるため、 が近づいています。 Ocaml-JavaとScalaを比較するこの投稿をご覧ください。
OCamlプログラマは、通常、JavaまたはC ++の生産性の10倍以上です。 幅広い実用的なタスクのプログラマー。に基づいているにもかかわらず 基本的にOOPプラットフォーム、F#は生産性の獲得に大いに役立ちます。 OCaml(およびMLファミリ全体)の利点を高めます。対照的に、Scala いくつかの本当に基本的なものを含む多くの利点を獲得できず、 したがって、Scalaでは正しいコードを書くのがはるかに難しい 実際のML。
さらに、MLファミリの言語は簡潔になるように設計されていますが、Scalaは 「Hello world!」からのすべてについて不必要に冗長です。上向き。 MLファミリー 言語の大部分は型推論を提供します(ほとんどの場合OCaml) 比較すると、Scalaには基本的な推論しかありません。 OCamlには異常な 表現型システムですが、Scalaは実用的なOOPにはほとんど追加しません 重要。
今のところ、私はScalaと言います。しかし、将来的には、Fortressをご覧ください。仕様の最初の実装は2008年4月1日にリリースされました。いいえ、それは冗談ではありません。主な機能は次のとおりです。
- 静的に型付けされますが、混乱を避けるために多くの型推論が行われます
- Unicodeおよび数学関数の2Dレンダリング
- 並列実行用に設計されています(デフォルトごとに)
- カスタムライブラリの強力なサポート(Guy Steeleの影響)
- 並置演算子を含む演算子のオーバーロード
JVMにはテールコールがなく、スタック消費に関してほぼすべての機能コードを堅牢にする必要があるため、おそらくありません。
JVMでの関数型言語の実装に最も近いのは、 Clojure 、 Scala および OCaml-Java プロジェクト。テールコールの欠如(トランポリンなど)の回避策はありますが、回避策がさらに深刻な問題を引き起こすため、これらの言語実装はこれを行いません。パフォーマンスの低下とデバッグの完全な難読化。
Sunは何年もテールコールについて話していましたが、最近では、テールコールをすぐに実装するつもりであることを示しています。それが完了するとすぐに、JVMでの言語の多様性、特に生産品質の関数型言語の実装がさらに増えると確信しています。それまでは、これらすべての言語をおもちゃと考えています。
乾杯、 ジョンハロップ。
機能プログラミングのパラダイムや他のパラダイム言語を含む、JVMのプログラミング言語の良いリストがあります:
- en.wikipedia.org/wiki/List_of_JVM_languages
最初の選択は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つの言語があることが開発者の願いだと思います。
@Marc Gravell-関数型言語は、エンタープライズグレードの金融システムの根幹でますます使用されています。私が働いている銀行では、多くの機能(純粋または「半純粋」)を使用しています...
一方、 Frege があります。これは、 JavaにコンパイルするHaskellは、環境(コマンドラインまたはEclipse)に応じてjavacまたはeclipseコンパイラでさらにコンパイルされます。
実際、私は間違っているかもしれませんが、F#が他の.NET言語ほど主流になるとは思いません。いくつかのサークル(アカデミック、コンパイラ、他のいくつかのシナリオ)で役立ちます-ただし、 C#はFPの使用を提供することを忘れないでください。 C#2.0には匿名メソッドとキャプチャ/クロージャーがあります。 C#3.0には、簡単にするためのラムダと抽象化するための式があります。匿名型(C#3.0)はタプルと some の類似性を(利便性の観点から)共有しますが、明らかに非常に異なる獣なので、間違いなく類似の比較ではありません。
たぶんF#ほど最適化されていないかもしれませんが、ほとんどの日常的なFPユースケースでは十分すぎるほどです。
不変性(特にスレッド化)のより良いサポートが、将来の検討のためにC#言語チームの心に非常に重要であることも非常に明確です。
私のお金はFPで良くなっているC#であり、ほとんどの日々の目的のための.NET FP製品です。もちろん、F#を使用することもありますが、(純粋に主観的に)移行が大規模になることはわかりません。