web-dev-qa-db-ja.com

Haskellは実世界で何に使われていますか?

Haskellの周りには多くの宣伝がありますが、実際のアプリケーションでの使用方法に関する情報を入手するのは困難です。 Haskellで最も人気のあるプロジェクト/使用方法は何ですか?なぜそれがこれらの問題を解決するのに優れていますか?

448
Sergio Tapia

この言語の一般的な用途は何ですか?

迅速なアプリケーション開発.

「なぜHaskellなのか」を知りたい場合は、関数型プログラミング言語の利点を考慮する必要があります( http://c2.com/cgi/wiki?AdvantageOfFunctionalProgramming から引用)。

  • 関数型プログラムは、ImperativeLanguageよりもはるかに簡潔になりがちです。多くの場合、これはプログラマーの生産性向上につながります。

  • FPは迅速なプロトタイプ作成を促進します。そのように、私はそれがExtremeProgrammersのための最高のソフトウェアデザインパラダイムだと思います...しかし、私は何を知っていますか?

  • FPは機能面でモジュール化されていますが、ObjectOrientedProgrammingはさまざまなコンポーネントの面でモジュール化されています。

  • あなたのケーキを持ってそれを食べる能力。複雑なOOシステム処理メッセージがあるとします。すべてのコンポーネントがメッセージに応じて状態を変更してから、リンク先のオブジェクトにメッセージを転送します。呼び出し階層の深いオブジェクトがメッセージに欠陥があると判断した場合、すべての変更を簡単にロールバックできるというだけではクールすぎないでしょうか。さまざまな州の歴史を持つのはどうですか。

  • データ構造の分解(PatternMatching)、変数バインディングの格納(LexicalScope with Closures)、強い型付け(TypeInference)、GarbageCollection、格納割り当て、ボックス化(値へのポインタ)またはボックス化解除(直接値) )表現...

  • 安全なマルチスレッド!不変データ構造はデータ競合条件の影響を受けないため、ロックで保護する必要はありません。既存のオブジェクトを破壊的に操作するのではなく、常に新しいオブジェクトを割り当てる場合は、割り当ておよびGarbageCollectionシステムでロックを隠すことができます。

これとは別にHaskellには、次のような独自の利点があります。

  • 数学的表記に触発された明確で直感的な構文。
  • 既存のリストに基づいてリストを作成するためのリスト内包表記。
  • ラムダ式:明示的な名前を付けずに関数を作成します。そのため、大きな式を扱う方が簡単です。
  • Haskellは完全に 指示的に透明 です。 I/Oを使用するコードはすべて、そのようにマークする必要があります。このように、副作用のあるコード(画面にテキストを表示するなど)を含まないコード(計算)からコードを分離することをお勧めします。
  • 遅延評価は本当にいい機能です:
    • 何かが通常エラーを引き起こすとしても、結果を使用しない限りそれはまだ動作します。たとえば、1 / 0をリ​​ストの最初の項目として指定することができますが、2番目の項目のみを使用した場合でも機能します。
    • 数独ソルバー のような検索プログラムは、すべての組み合わせを一度に読み込むわけではないので、作成するのが簡単です。他の言語でも可能ですが、デフォルトではHaskellだけがこれを行います

あなたは以下のリンクをチェックアウトすることができます:

294
Xinus

この記事の人々は、関数型プログラミング言語を一度も使ったことがない人にとって最も重要なポイントを見逃していると思います。もしあなたが関数型プログラミングに不慣れならば、Haskellはあなたが今まで考えなかった方法であなたを考えさせるでしょう。その結果、他の分野や他の言語でのプログラミングが向上します。いくら?定量化するのは難しいです。

219
wheaties

Haskellのような汎用言語が何に適しているかについて一つの良い答えがあります:プログラムを一般的に書くこと。

実際に使用されているものとして、それを確立するための3つのアプローチがあります。

グラフィックス、ネットワーキング、システムプログラミング、データ構造、データベース、開発、テキスト処理に適していることを示します。

そして最後に、それが本当に強い点についての私の意見は、

それがあなたの質問がどれほど広い範囲に渡っているのかという感覚をあなたに与えてくれることを願っています。

82
Don Stewart

Haskellの実際の動作の一例は xmonad で、 "1200行以下のコードで機能のあるウィンドウマネージャ"です。

29
unutbu

から Haskell Wiki

Haskellは、航空宇宙や防衛から、資金調達、Webスタートアップ、ハードウェア設計会社、そして芝刈り機製造業者まで、幅広い商業用途を持っています。このページではHaskellの産業利用に関する情報を集めています。

ウィキペディアによれば、 Haskell 言語は、既存の機能言語を将来の機能言語設計の研究に使用できる共通言語に統合する必要性から生まれました。

入手可能な情報に基づいて明らかになっているのは、それが本来の目的を上回っており、研究以外の用途にも使用されているということです。現在は汎用の関数型プログラミング言語と見なされています。

それでも「なぜそれを使うべきなのか」と自問しているのなら、 なぜそれを使うのですか? のセクションを読んでください。 Haskellウィキはじめに.

18
Robert Groves

Haskellは汎用プログラミング言語です。それはあなたがするためにあなたが他の言語を使用することすべてに使用することができます。あなたはあなた自身の想像力以外何にも制限されていません。それは何に適していますか?まあ、ほとんどすべてです。関数型言語がExcelに対応していないタスクはほとんどありません。

はい、私はDreamincodeのRayneです。 :)

また、ウィキペディアのページを読んでいない場合は、オブジェクト指向プログラミングがパラダイムであるのと同様に、関数型プログラミングもパラダイムです。念のためにあなたは知らなかった。 Haskellは機能するという意味でも機能的です。それはそれでかなりうまくいきます。

言語がオブジェクト指向言語ではないからといって、その言語が何にも制限されているわけではありません。 Haskellは汎用プログラミング言語であり、Javaと同じくらい汎用的です。

13
Rayne

私はクールなものを持っています、facebookはPHPコードを書き換えるための自動化されたツールを作成しました。それらはソースを抽象構文木に解析し、いくつかの変換を行います。

if ($f == false) -> if (false == $f)

私はその理由を知りませんが、それが彼ら特有のスタイルであるように思われ、それから彼らはそれをきれいにプリントします。

https://github.com/facebook/Lex-pass

私たちは小さなドメイン特有の言語を作るためにhaskellを使います。膨大な量のデータ処理ウェブ開発。 Webスパイダーアプリケーションのテストシステム管理スクリプトを書く他の関係者と通信するバックエンドスクリプト。監視スクリプト(muninと一緒にうまく動作するDSLがあるので、あなたのアプリケーション用に正しい監視コードを書くことがずっと簡単になります。)

実際にはあらゆる種類のもの。あなたが多少数学的に傾いている場合、それはいくつかの非常に強力で便利な機能を備えた単なる日常の汎用言語です。

9
Edgar Klerks

から Haskell

Haskellは標準化された、汎用の純関数型プログラミング言語であり、厳密ではない意味および強い静的型付けそれは論理学者のHaskell Curryにちなんで名付けられました。

基本的にHaskellは他の汎用言語(例えばC#、Java、C、C++など)を使って通常作成するものはほとんど何でも作成するために使用することができます。

6
Andrew Hare

たとえば、対話型のリアルタイムHTML 5 Webアプリケーションを開発するためです。 Elm を参照してください。そのコンパイラはHaskellで実装されており、その構文はHaskellのものから多くを借りています。

5
thSoft

これはHaskellとその用途に関する情報のためのかなり良い情報源です:

オープンソースHaskellのリリースと成長率

3
Robert Harvey