Haskellは実世界で何に使用されていますか?[閉まっている]


475

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


56
いいえ、それは明確な答えなので、しません。意見などの余地はありません。言語が何のために作られたのか知りたいだけです。
セルジオタピア


12
@ Papuccino1、待って、それが何のために役立つのか、それが何のために作られたのか知りたいですか?前者は質問が何を求めているかであり、そこには意見の余地がたくさんあります...
bdonlan

3
@ Papuccino1-タイトルの余分な単語が質問にもたらすメリットは何ですか?また、この文脈での「機能的」という用語の使用を誤解していると思いますが、それはわかりにくいです。
Chris Lutz、

2
自社のウェブサイトによると、多くの企業がさまざまな目的で使用しています... haskell.org/haskellwiki/Haskell_in_industry
Julian

回答:


309

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

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

「なぜHaskellなのか」を知りたい場合は、関数型プログラミング言語の利点を検討する必要があります(https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgrammingから取得):

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

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

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

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

  • 多くのハウスキーピングタスク:データ構造の分解(PatternMatching)、変数バインディングの格納(クロージャー付きのLexicalScope)、厳密な型指定(TypeInference)、GarbageCollection、ストレージの割り当て、ボックス化(pointer-to-value)または非ボックス化(値を直接使用) )表現...

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

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

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

次のリンクを確認できます。


20
次の考えがよく私の心を越えます。純粋な言語では、関数は同じパラメーターを渡されたときに常に同じ結果を返します。これは保証です。対照的に、命令型言語は「ステートメント」の上にすべてを構築します。ステートメントには、いかなる保証もありません(実行に時間がかかり、熱が発生する場合を除きます)。したがって、財団はすでに不安定であり、その上にあるすべてのブルトは不安定なままです。私にとって、これはhaskellを学ぶ理由の1つでした。
マーティンドラウツブルク2014年

8
この質問が質問されてから、Goプログラム言語がデビューしてから6年になります。型システムが弱く、一般に「機能的/ MLファンによると」客観的に劣っているにもかかわらず、Haskellが26年間よりも多くの(そしてより重要な)ソフトウェアを6年間で出荷することができました。これはケーススタディとして意味します。関数型言語を妨げているものは明らかにあり、それらはすべて誇大宣伝に帰することはできません。
weberc2

3
要点を忘れました-Haskellでのコーディングは絶対的な爆発です;)Haskellのいくつかの問題に手を加えるのはとても楽しかったです。
J Atkin、2016

8
@MartinDrautzburgもちろんステートメントには保証が付いています。どんな種類の有用な言語が保証なしのステートメントを持っているでしょうか?たとえばC x = 5;では、実行後にx値が含まれることを保証します5
user253751

5
@ E4z9そうですが、C ++ではそれoperator =が呼び出されることを保証します。そして、それを定義しないとどうなるかを保証しますoperator =
user253751

234

この投稿の人々は、関数型プログラミング言語を使用したことがない人にとって最も重要なポイントを見逃していると思います。関数型プログラミングに慣れていない場合は、Haskellを使用すると、今まで考えたことのない方法で考えることができます。その結果、他の領域や他の言語でのプログラミングが向上します。いくら?定量化が難しい。


2
iPhone、Macを使っています。Haskellはどこで使用されていますか?私が使用したアプリとは、Objective-CまたはSwiftで書かれたもので、データベースやサーバー向けのものです。スウィフトも機能することができます。繰り返しますが、それがどこで使用されているのか混乱しています
Honey

2
FacebookはそれにSPAM検知を行います。code.facebook.com/posts/745068642270222/...
アレックス

25
別の口調で書かれたこの答えは、Haskellはプログラマーにとって素晴らしい練習であり、IMOが優れた汎用言語を作成していないことを示しています
Passer By

5
Keera Studiosでは、Haskellを使用してiOSおよびAndroidのゲームとアプリを作成しています。
Ivan Perez

1
私はこれに完全に同意します。私は何十年にもわたって命令型言語で多くのコードを書いてきました。Haskellを数か月間探索してきましたが、今まで考えていなかったことに心が開かれました。
Adahus

87

Haskellのような汎用言語が何に適しているかについて、1つの良い答えがあります。それは、一般的なプログラムの作成です。

それが実際に使用される目的のために、私はそれを確立するために3つのアプローチを持っています:

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

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

具体的に回答する場合は、質問の幅が広がっていることを理解していただければ幸いです。


15
タグクラウドが壊れている
Elliot Cameron

タグクラウドはwordcloudを使用して生成されましたか?
Janus Troelsen、2015

29

動作中のHaskellの1つの例は、「1200行未満のコードで機能が充実したウィンドウマネージャー」であるxmonadです。


18

Haskell Wikiから:

Haskellは、航空宇宙や防衛から金融、Webスタートアップ、ハードウェア設計会社、芝刈り機メーカーまで、商業的にさまざまな用途を持っています。このページには、Haskellの産業利用に関するリソースが集められています。

Wikipediaによると、Haskell言語は、既存の関数型言語を、関数型言語設計の将来の研究に使用できる共通の言語に統合する必要性から作成されました。

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

それでも「なぜ使用する必要があるのか​​」と疑問に思っている場合は、「使用する理由」を読んでください。Haskell Wikiの紹介のセクション。


13

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

そして、はい、私はDreamincodeのレインです。:)

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

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


9

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

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

理由は分かりませんが、それが彼らの独特のスタイルのようで、かなりプリントされています。

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

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

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


6
再:FBスタイル、==の前にfalseを置くことは、忘れて1つの=のみを書き込む場合、意図しない割り当て操作をサイレントに実行して通常どおり続行するのではなく、結果の動作がより明らかに間違っている
Magnus

それは賢いです、あなたの力は、そのとき既知のコンパイル時のエラーです。
Edgar Klerks、2014

@ EdgarKlerks、PHPにはコンパイル時間はありません。これにより、遠くのコードで奇妙な動作やエラーが発生するのではなく、間違いがあった場所で例外が発生します。
dfeuer 2015年

false左側に書くことの利点はわかりますが、ツールを使用してそれを自動的に==行う意味はわかりません。すでにオペレーターがいる場合は、その部分のバグがないことをすでに知っています。 lex-passはキャッチすることを意図しており、=代わりにを持っている場合、それが意図的にそうであるかどうかを判断する確実な方法はありません。
ジェレミーリスト

1
@JeremyList多分彼らはコーディングスタイルに関して本当に厳しいです。きちんとフォーマットされたコードは、よりきちんとフォーマットされたコードを書くように誘うことがわかります。単なるワイルドな推測です。
Edgar Klerks、2015

6

Haskellから:

Haskellは、標準化された汎用の純粋な関数型プログラミング言語であり、厳密でないセマンティクスと強力な静的型付けを備えています。論理学者のHaskell Curryにちなんで名付けられました。

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


5

たとえば、インタラクティブなリアルタイムHTML5 Webアプリケーションの開発に使用します。Elmを参照してください。そのコンパイラはHaskellに実装されており、その構文はHaskellから多くを借りています。


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