2009-11-08 9 views
15

多くの言語を学んだことがありますが、今では一つを選びたいと思いますが、私が一番好きな言葉はハスケルです。それは翻訳された言語のようですが、コンパイルされています。それから、私はこの強力な言語の賛否両論を知りたい(正しい選択をする)。ハスケルの長所と短所

+2

http://xkcd.com/1312/ – Surya

答えて

51

私は現時点で私の頭の中にあるちょっとしたアイデアです。

賛否

  • 学習Haskellはあなたがプログラミングを考える方法が変更されます。
  • タイプセーフティは、主流言語(ヌルポインタの例外を誰にでも)よりもマイルです(
  • )タイプの推論では、タイプについて心配する必要はありません絶対に必要な場合を除きます。
  • 高性能の実行可能ファイルを生成します。
  • 並列処理はparpseqコンビネータ
  • インタラクティブな環境(抱擁/ GHCiの)あなたはすぐに
  • をアイデアのプロトタイプを作成できるようにすると、ほとんど自明で素敵な支援コミュニティ(IRC、メーリングリストなど)
  • 非常に表現力を持っています高性能コンピューティング
  • QuickCheck
  • の余分なキック用のGPU上でコードを実行するためのサポートを含むGHCが活発に開発及び改善されており、簡潔な構文
  • 、>単体テスト

短所

  • 学習Haskellはあなたのためのすべての他の言語を台無しにします。
  • あなたが書きたいん何、どのような種類のアプリケーションのことは自分を均等ではない数日後
+3

能力リストの先頭は1つの要素ではないでしょうか?多分あなたは最初のカップルが= Pを取ることを意味する – codebliss

+2

どのようにモジュール性についてですか?複雑なアプリケーションを作成する際の最大の問題は何ですか?タイプを正しく取得するのは難しいですか、あるいはリファクタリングする必要がありますか?モナドとモナド以外のバージョンを書くのは大変ですか? – egaga

+0

"学習のhaskellはあなたのために他のすべての言語を台無しにするでしょう。仰るとおり。ハスケルに書き込む前に、私は "Ok、what language in in?"というプロジェクトを考えていました。今私はハスケル以外の何かを考慮していません(おそらくAgdaまたはIdrisを除く)。公正であるために、私はそれがContraの多くであるかどうかは分かりません。ハスケルでは、多くが本当にうまく機能します。ハスケルで働いている* only *の主な問題は、別の言語(Node.JSなど)になっているので、労力をかけずに使えない特定のタスクのための良いライブラリとフレームワークがあることです。 – Turion

1

、誰が理解していない不可解なプログラムを書くことは非常に簡単

  • に入るために非常に複雑ですか?どのような問題を解決したいですか?

    ハスケルが優れているいくつかの問題タイプがありますが、常に変化する状態を必要とするプログラムを書くと、ハスケルは悪い選択です。

    問題をモデリングする際に、CAD(コンピュータ支援設計)プログラムの作成などの機能プログラミングにはうまく適合しない場合は、プログラミングパラダイムがモデルに適しているからといって、OOPが良い選択になります。

    しかし、これらの問題の影響を受けていない場合、Haskellは素晴らしい言語です。

  • +0

    機能的な言語で書かれたAutoCAD? – Chuck

    +0

    @Chuck - それはCで書かれたようです。http://www.fourmilab.ch/autofile/www/subsection2_38_3_1.html –

    +0

    ああ、変です。何らかの理由で私はそれがLispだと思った。訂正してくれてありがとう。 – Chuck

    20

    特定のプロジェクトにはHaskellを使用するのは難点がありますが、 Haskellにはの学習には欠点はありません。時間はかかりますが、それはそれだけの価値があります。あなたはより良いプログラマーになるでしょう。

    2

    が、今、私は1

    を選びたい...

    それから私は、この強力な言語(ただ、正しい選択をすること)の長所と短所を知ってほしいです。

    私が一般化できるようにするなら、言語の選択は本当に解決しようとしている問題によって決まります。すべてのために働く1つの選択肢はありません。 現在使用している言語よりもよく見える言語が常にあります。

    しかし、新しい言語の学習は、プロジェクトの言語が間違っていることを経験者が知る能力を高めます。

    10

    長所:
    1)Haskellは、最先端のプログラミング言語です。 私はいくつかの研究を行い、haskellは現実の最先端の唯一のプログラミング言語だと思われます。 agdaやcoqのようなものもありますが、これらは実際には実験的なものであり、実際のプログラミング(例:ライブラリのサポート)には欠けています。最先端のプログラミング言語に投資するのが最善です。

    (注:なぜhaskellが最先端のものなのかについては、私は主張しません。ほとんどのプログラミング言語はそうではありません。 Haskellのプログラマは通常、非常にスマートです)私は、後に言及し、いくつかの機能は、おそらくGHCは特定されているが、私はまだ)

    2のみハスケルを記述します。

    (注)他の文についても同様です。ライブラリのコード品質は非常に高いです。さらに、stackoverflowのヒントは非常によく書かれています。また、高レベル(Don Stewartのような人たちのおかげで、ちょうど名前をつけています)。私は、プログラミングを改善する最善の方法の1つは、他の人々のコードから学ぶことだと思います。ハスケルはその点で非常に優れています。

    3)多くのOOP言語の命令プログラミングは時代遅れです。副作用を伴う通常のプログラミング方法です。しかし、副作用のない宣言型プログラミングのプログラミング言語はごくわずかです。例えばScala、F#、Ocaml、Erlangは副作用がありません。 (ただし、OOP言語の学術分野でも、古いものではないことは明らかです。過去のAlan KayやSmalltalkの分野における最新の学術研究を考慮してください)

    4)Haskellは、抽象的な数学的概念(例えば、モナド、ファンクタ、コンビネータ、GADTなど)を使ったプログラミングをサポートしています。私はこれがプログラミングの生産性を向上させると思います。

    5)Haskell型のシステムは非常に柔軟であり、型推論をサポートします。これにより、起こりうるエラーを大幅に減らすことができます。型システムはコンパイル時にチェックされます。型システムはドキュメントとして役立ちます。

    6)最先端の概念は、まず、(QuickCheckライブラリのような)haskellで実装されています。面白い拡張がたくさんあります。

    7)haskell構文は非常によく設計されています。不要なかっこはありません。コードはコンパクトで、パターンマッチングとリストの理解のためのsynataxはとてもいいです。 Knuthのような人々は文章のプログラミングを主張し、haskell/GHCはそれをサポートします。

    8)Haskellは

    短所遅延評価をサポートしています。
    1)それは学ぶことは非常に困難だし、それはHaskellのをマスターする時間、数ヶ月かかります。適切なコンピュータサイエンスのバックグラウンドがなければさらに困難です。 MonadsやFunctorsのようなものは、数学的なバックグラウンドがないと、理解するのが難しいです。だから、ほとんどのプログラマーはおそらくhaskellを学ぶ能力や意志を持っていないだろう。ハスケルは単純ではありません。すべての高度な機能をサポートする単純な言語を使用することは不可能です。

    2)IDEのオプションは他のプログラミング言語のものほど良くありません。私は私のIDEとしてleksahを使用しています。とても良いですが、Java開発用のEclipseに匹敵しません。

    3)アンドロイドやIphone開発にHaskellを使用することはできません。対照的に、Scalaはアンドロイド開発に使用でき、Javaにも互換性があり、大きな利点です。

    4)一部の図書館では、それらを維持し改善する人々をサポートしていないと思います。私はhaskellでセマンティックWebプログラミングを行い、ライブラリのサポートはより良くなるかもしれません。

    ハスケルはすべてのプロジェクトに適していません。ミリ秒ごとのパフォーマンスが必要な場合は、おそらくC/C++がおそらく最適なオプションです。だから、haskellは多くのプロジェクトに適しているが、すべてではない。

    ハスケルは、他のプログラミング言語に比べて多くの技術的利点があります。しかし、haskellを使用することに対する政治的理由があるかもしれません。たとえば、Scalaは既存のJavaインフラストラクチャとよりよく統合されます。私もその単なる美しさにもかかわらず、ハスケルの実用的な機能のいくつかを強調したい

    +3

    "Haskellのプログラマは通常、非常にスマートです" - >この "理由"は、パラダイムに関する議論の大部分、特にHaskellが言及されたときに出てくるようです。私はハスケルが大好きですが、それは純粋なばかげたばかです。偏見は良くありません。コンピュータサイエンスには有効な教義がありません。正当な議論としての誤謬を悪いものとして扱うことはちょっとしたことです。 –

    +0

    スマートではなく "とても良いプログラマー"と書く方が良いでしょう。 Haskellのような言語や、より多くのCoq/Agda(Istabelleなども)は非常に優れたプログラマを惹きつけ、通常はそれほど良くないプログラマを放棄します。後者は、I/Oや、カテゴリ理論の理解の欠如により、彼らがハズケルの使用を止めることにあまりにも不満を抱いています。 PHPのようなアマチュアプログラマーやJavaのようなランゲージも、「シンプルで使い慣れた」と感じるようにしなければならない多くの言語があります。 「平均的な」Agdaユーザーは、CSまたは数学で博士号を取得しており、非常に優れたプログラマです。 – mrsteve

    +0

    それはずっと正確です。多かれ少なかれ議論の余地がある他の理由がいくつかありますが、私はあなたに同意します。例えば、両方のパラダイムが古く、実際には突然変異に関するものがたくさんあります。それでもあなたは正当な理由があります。 –

    13

    • はどこそれが必要正確にあなたの方法で取得し、そうでなければ、あなたの邪魔にならないように保持します。これは興味深い機能の1つで、why Haskell just worksを担当しています。
    • パフォーマンスの高いアプリケーションに対応できる優れた並行性システムを備えています。
    • 新しく革新的な抽象化とデザインパターンの基礎を提供します。
    • ハスケルでは、他の言語(適切なシーケンシング、ロック、初期化など)で考えなければならないことがたくさんあるため、非常に複雑な問題にも取り組むのが簡単です。
    • 怠惰は単なる最適化ではありません。これにより、脳にはるかに簡単な全く新しい方法で問題を解決することができます。破壊的な更新はありませんが、ほぼ同じパフォーマンスで同じ結果が得られます。

    あなたが選択すれば、他のどの言語よりもHaskellを学ぶことをお勧めします。既存の言語間の安全性、抽象度のレベルと実用性の間の最適なトレードオフを作るようです。

    関連する問題