web-dev-qa-db-ja.com

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

私はHaskellが好きです。 Haskellは実稼働ソフトウェアで使用されていますが、私が見たものから特に広く展開されているわけではありません。 Snowballが業界で同様に素晴らしいものを使用する可能性があるように、プロダクションプロジェクトに関して最も類似していて、今でも広く使用されている言語は何ですか?

また、最初の部分と同じ言語を多数のプラットフォームで利用できますか?そうでない場合、プラットフォームを幅広く展開できる最善の選択肢は何ですか?大規模な群れや家族ではなく、1つの言語でto-doリストに載せたいのですが。ハード証拠はプラスになります。

14
World Engineer

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

Scalaの機能面は、MLの伝統からも大きく引き出され、Haskellでよく知られているいくつかの高度な型システム機能と、より標準的なOOPシステムが統合されています上記で。 MLスタイルの言語でのOOは、「基本的な機能ツールを備えたモデルOO」ScalaがJavaスタイルのOOであり、息を吹き込むように近づく傾向があります。これは、ご想像のとおり、Java相互運用にメリットがあり、OOプログラマーにとってより使い慣れた作業環境を提供します。ただし、Haskellのバックグラウンドでは、Scalaで物事を混ぜ合わせると機能的なイディオムが扱いにくくなり、ほとんどのJava AP​​Iが不適切に設計されていることに気付く可能性が高くなります。そして不必要に使いにくい。そのため、Haskellの多くのものの直接翻訳を可能にする(構文上のオーバーヘッドを追加する)洗練された型システムが必要で、関数型のスタイルに妥協する必要がない場合は、Scalaをお勧めします。

最後に、考えるのは奇妙に思えるかもしれませんが、Clojureには、実際にはHaskellとより多くの哲学的レベルでの共通点がたくさんあります。 Clojureの state and values vs. identities へのアプローチで見つかるもののほとんどは、Haskellが型システムを通じて形式化したものに非常に近いものです。同様に、ClojureはJavaの相互運用性を少しだけ強調しており、OOPでのドラッグについてそれほど心配していません。そのため、いくつかの点で、Clojureの関数型プログラミング自体へのアプローチあなたがすでに知っているものに最も近いかもしれません。私の知る限りでは、Haskell以外の言語でClojureが [〜#〜] stm [〜#〜] の実装を備えた唯一の言語であり、シンプルで効果的であると言っていると思います、そして動作します。一方、ClojureはLISPの伝統に由来するため、静的型システムがなく、MLの影響を受ける言語で見られる代数的データ型とパターンマッチングに重点が置かれていません。そしてもちろん、それはLISPであり、それ自体が一部の人々にとって否定的です(理由は本当にわかりませんが)。

私自身と言えば、関数型プログラミングの最初の経験はSchemeであったという免責事項があるので、私はおそらくOCamlが2番目の選択肢であるClojureに傾くでしょう。

21
C. A. McCann

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

4
Jürgen Strobel

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

Haskellユーザーが馴染みのある魅力的なClojureの主要機能:

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

主な違い(あなたの見方によっては、ポジティブかネガティブかもしれません):

  • それは不純です-私の観察は、慣用的なClojureスタイルは可能な限り純粋な関数を固執することです。
  • 静的型付けではなく動的型付け(静的型ヒントをオプションでパフォーマンス最適化に使用できます)
  • これは、Javaライブラリエコシステム全体に簡単にアクセスできるJVM言語です-これは、私の意見では、現実世界の適用性の点で最大の利点です。
  • LISP構文。だから、あなたは homoiconicity のすべての利点を得ますが、かっこ全体を見通すことを学ばなければならないという犠牲を払っています:-)

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

3
mikera

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

メインサイト を確認してください。

3
rvirding

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

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

1
Ingo