Haskellから得た知識とスキルをエクスポートするために最も互換性があり、広く使用されている生産言語は何ですか?


14

私はHaskellが好きで、シンプルでシンプルです。Haskellは本番ソフトウェアで使用されていますが、私が見たものから特に広く展開されているわけではありません。業界で同様に素晴らしいものを使用する雪だるまの機会を得るために、生産プロジェクトに関して最も類似しており、まだ広く使用されている言語は何ですか?

また、最初の部分と同じ言語が多数のプラットフォームで利用可能ですか?そうでない場合、プラットフォームを幅広く展開するのに最適な代替手段は何ですか?大規模な群れや家族ではなく、1つの言語でTo Doリストを作成したいです。確固たる証拠はプラスになります。

回答:


21

Haskellは、MLファミリーの言語と最も密接に関連しています。これには、もちろんOCamlなどが含まれますが、.NETプラットフォーム上のF#も含まれます。これらの言語は、Haskellと型システムの基礎とデータの使用方法(代数データ型、パターンマッチング、型推論など)を共有します。もちろん、他の点でHaskellとは大幅に異なる場合があります-ほとんどのMLは厳密で不純ですそもそも、Haskellが型システムと言語設計の研究の手段として人気があるということは、ほとんどのMLスタイルの言語は、それほど強力ではない(ただし、理解しやすい)型システムを持つ傾向があることを意味します。あなたが逃すかもしれない間、それはおそらく安全ですHaskellに関するいくつかのこと、特に最初は、ほとんどのHaskellプログラマーは、基本的な物事のレベルで、MLで非常に素早く自宅で快適に感じるでしょう。Haskell と同じ全体構造を持つ言語が必要な場合は、MLが最適です。

Scalaの機能面MLの伝統からも大きく引き寄せられており、Haskellでよく知られているいくつかの高度なタイプシステム機能と、上記に統合されたより標準的なOOPシステムも取り入れています。MLスタイル言語のオブジェクト指向は、「基本的な機能ツールを備えたモデルOO」のように扱われる傾向がありますが、ScalaはJavaスタイルのオブジェクト指向を生き生きとさせます。ご想像のとおり、これにはJava相互運用性に利点があり、OOプログラマーにとってより使い慣れた作業環境を提供します。ただし、Haskellのバックグラウンドから来ると、Scalaで物事を混ぜ合わせると機能的なイディオムが不格好になり、ほとんどのJava APIが不適切に設計され、使用が不必要に難しくなることに悩まされる可能性が高くなります。

最後に、考えるのは奇妙に思えるかもしれませんが、Clojureは実際にはHaskellと共通する多くのことをより哲学的なレベルで持っています。Clojureの状態と値対アイデンティティに対するアプローチのほとんどは、Haskellが型システムを通じて形式化するものに非常に近い精神です。それに対応して、ClojureはJavaの相互運用をそれほど重視しておらず、OOPでのドラッグについてはそれほど心配していません。そのため、ある意味では、Clojureの関数型プログラミングへのアプローチはすでに慣れ親しんでいるものに最も近いかもしれません。私の知る限り、ClojureはSTMの実装を持つHas​​kell以外の唯一の言語であるということをこの点で伝えていると思いますそれはシンプルで効果的で、うまく機能します。一方、ClojureはLispの伝統に由来するため、静的型システムに欠けており、MLの影響を受ける言語に見られる代数的データ型とパターンマッチングに重点が置かれていません。そしてもちろん、それはLispであり、それ自体は一部の人々にとって否定的です(私は本当に理由を知りませんが)。

関数型プログラミングの私の最初の経験がSchemeであったという免責条項で、私自身のために言えば、私はおそらくClojureに傾いていたでしょう。


F#は、OCamlから派生したものではないにしても、それに触発されたと言われています。以前のSOの質問であるF#とOCamlは、その関係についての良い議論をカバーしています。.NET側の場合は、F#が優れた選択肢となり、MicrosoftはF#を「ファーストクラス」の.NET言語と見なしています。JVM側では、Scalaには産業利用の実績があり、Clojureはチャートで上昇しているようです。現時点では、市場がこのオブジェクト機能の分野で明確な勝者を宣言していないため、現時点で最善の選択肢はありません。
ジョントブラー

4

私は自分で使ったことはありませんが、Scalaがブログやプロジェクトの説明に時々現れるのを見て、Haskellからの主要な概念を取り入れたと思います。ScalaはJVMまでコンパイルし、Javaと相互運用できます。


3

機能的な代替手段はErlangです。非常に同時的な言語ですが、シーケンシャルサブセットは、クロージャ、不変データ、パターンマッチングなど、関数型言語の多くのプロパティを持つ純粋な関数型言語です。Linux、さまざまなUNIX、Windows、macosxなど、多くのプラットフォームで実行されます。現在、JVMの実装であるerjangもあります。他の言語と簡単に通信および共存できます。これが、よく使用される方法です。

メインサイトをご覧ください。


3

Clojureはますます広く使用されており、表面的なレベルではHaskellのようには見えませんが、少し深く見ると明らかにHaskellに非常に触発されており、非常によく似た機能スタイルを推奨しています。

Haskellユーザーが使い慣れた魅力的なClojureの主要機能:

  • コア言語は純粋に機能的です -副作用は可能ですが、特定の場所(STM参照、IO関数、Java相互運用性など)に埋められます
  • すべてのデータ構造は不変で永続的です
  • azine -Clojureのユビキタスなレイジーシーケンスによって主に達成されます。これは、Haskellユーザーには非常に馴染みがあります。無限の遅延シーケンスは問題ありません。
  • ソフトウェアトランザクションメモリ -Clojureで変更可能な状態を処理する主な方法です。Rich HickeyがClojureのアイデンティティと状態へのアプローチを説明しているこの素晴らしいビデオを見る価値はあります:http : //www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

主な違い(あなたの視点に応じて正または負になる場合があります):

  • それは不純です-私の観察では、慣用的なClojureスタイルは可能な限り純粋な関数を貼り付けることです。
  • 静的型付けではなく動的型付け(静的型ヒントは、パフォーマンスの最適化のためにオプションで使用できます)
  • これは、Javaライブラリエコシステム全体に簡単にアクセスできるJVM言語です。これは、実世界での適用性の面で最大の利点です。
  • Lisp構文。だから、すべての括弧を通して見ることを学ぶ必要がありますが、ホモイコニシティのすべての利点を得ることができます:-)

個人的な観点:私はClojureの前にHaskellを学びましたが、Haskellが優雅で数学的純粋であることを愛していました。Clojureは多くのインスピレーションを引き出し、Haskellから多くの優れた機能を取り入れていますが、より実用的で実用的な言語です。特に、Javaライブラリエコシステムを活用できるという大きな価値を考えると、「ものを成し遂げる」ための優れた言語になります。


1

Haskellが好きで、JVM用のコードを作成する必要がある場合、fregeは興味深いかもしれません。Haskell 2010にできるだけ近くなるように設計されていますが、Javaコードを生成します。

もちろん、freg自体は「広く使用されているプロダクション言語」(最近公開されたばかり)とは異なりますが、Javaは確かです。

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