Haskellには多くの誇大宣伝がありますが、実際のアプリケーションでそれがどのように使用されているかについての情報を取得することは困難です。Haskellの最も人気のあるプロジェクト/使用法は何ですか、なぜこれらの問題の解決に優れているのですか?
Haskellには多くの誇大宣伝がありますが、実際のアプリケーションでそれがどのように使用されているかについての情報を取得することは困難です。Haskellの最も人気のあるプロジェクト/使用法は何ですか、なぜこれらの問題の解決に優れているのですか?
回答:
この言語の一般的な用途は何ですか?
迅速なアプリケーション開発。
「なぜHaskellなのか」を知りたい場合は、関数型プログラミング言語の利点を検討する必要があります(https://c2.com/cgi/wiki?AdvantagesOfFunctionalProgrammingから取得):
関数型プログラムは、対応するImperativeLanguageよりもはるかに簡潔になる傾向があります。多くの場合、これはプログラマの生産性の向上につながります
FPは迅速なプロトタイピングを促進します。そのため、これはExtremeProgrammersにとって最高のソフトウェア設計パラダイムだと思います...しかし、私は何を知っていますか?
FPは機能面でモジュール化されており、ObjectOrientedProgrammingはさまざまなコンポーネントの面でモジュール化されています。
あなたのケーキを持ってそれを食べる能力。メッセージを処理する複雑なOOシステムがあるとします。すべてのコンポーネントがメッセージに応じて状態を変更し、リンクしているオブジェクトにメッセージを転送する場合があります。呼び出し階層の深いオブジェクトがメッセージに欠陥があると判断した場合、すべての変更を簡単にロールバックするには、あまりにもクールすぎませんか?さまざまな州の歴史を持つことはどうですか?
多くのハウスキーピングタスク:データ構造の分解(PatternMatching)、変数バインディングの格納(クロージャー付きのLexicalScope)、厳密な型指定(TypeInference)、GarbageCollection、ストレージの割り当て、ボックス化(pointer-to-value)または非ボックス化(値を直接使用) )表現...
安全なマルチスレッド化!不変のデータ構造はデータ競合状態の影響を受けないため、ロックで保護する必要はありません。既存のオブジェクトを破壊的に操作するのではなく、常に新しいオブジェクトを割り当てる場合は、割り当てとGarbageCollectionシステムでロックを非表示にすることができます。
これとは別に、Haskellには次のような独自の利点があります。
次のリンクを確認できます。
x = 5;
では、実行後にx
値が含まれることを保証します5
。
operator =
が呼び出されることを保証します。そして、それを定義しないとどうなるかを保証しますoperator =
この投稿の人々は、関数型プログラミング言語を使用したことがない人にとって最も重要なポイントを見逃していると思います。関数型プログラミングに慣れていない場合は、Haskellを使用すると、今まで考えたことのない方法で考えることができます。その結果、他の領域や他の言語でのプログラミングが向上します。いくら?定量化が難しい。
Haskellのような汎用言語が何に適しているかについて、1つの良い答えがあります。それは、一般的なプログラムの作成です。
それが実際に使用される目的のために、私はそれを確立するために3つのアプローチを持っています:
グラフィックス、ネットワーキング、システムプログラミング、データ構造、データベース、開発、テキスト処理に適していることを示します...
そして最後に、それが本当に強いものについての私の意見:
具体的に回答する場合は、質問の幅が広がっていることを理解していただければ幸いです。
Haskell Wikiから:
Haskellは、航空宇宙や防衛から金融、Webスタートアップ、ハードウェア設計会社、芝刈り機メーカーまで、商業的にさまざまな用途を持っています。このページには、Haskellの産業利用に関するリソースが集められています。
Wikipediaによると、Haskell言語は、既存の関数型言語を、関数型言語設計の将来の研究に使用できる共通の言語に統合する必要性から作成されました。
入手可能な情報から、それが本来の目的を超えており、研究以外の目的で使用されていることは明らかです。現在では、汎用の関数型プログラミング言語と見なされています。
それでも「なぜ使用する必要があるのか」と疑問に思っている場合は、「使用する理由」を読んでください。Haskell Wikiの紹介のセクション。
Haskellは、汎用プログラミング言語です。これは、他の言語を使用して実行するあらゆるものに使用できます。あなたはあなた自身の想像力以外には何も制限されていません。それは何に適していますか?まあ、ほとんどすべて。関数型言語が優れていないタスクはほとんどありません。
そして、はい、私はDreamincodeのレインです。:)
また、ウィキペディアのページを読んでいない場合は、関数型プログラミングはオブジェクト指向プログラミングのパラダイムであるのと同様に、パラダイムでもあります。念のために。Haskellは、機能するという意味でも機能的です。それでかなりうまくいきます。
言語がオブジェクト指向言語ではないからといって、言語が何かによって制限されているわけではありません。Haskellは汎用プログラミング言語であり、Javaと同じくらい汎用的な目的です。
私はクールなものを持っています、FacebookはPHPコードを書き換えるための自動化ツールを作成しました。ソースを解析して抽象構文ツリーに変換し、いくつかの変換を行います。
if ($f == false) -> if (false == $f)
理由は分かりませんが、それが彼らの独特のスタイルのようで、かなりプリントされています。
https://github.com/facebook/lex-pass
私たちは小さなドメイン固有の言語を作るためにhaskellを使用しています。膨大な量のデータ処理。ウェブ開発。Webスパイダー。アプリケーションのテスト。システム管理スクリプトの作成。他のパーティと通信するバックエンドスクリプト。監視スクリプト(muninとうまく連携するDSLがあり、アプリケーションの正しい監視コードを簡単に作成できます。)
実際にはあらゆる種類のものです。数学的に少し傾倒している場合は、非常に強力で便利な機能を備えた日常の汎用言語です。
false
左側に書くことの利点はわかりますが、ツールを使用してそれを自動的に==
行う意味はわかりません。すでにオペレーターがいる場合は、その部分のバグがないことをすでに知っています。 lex-passはキャッチすることを意図しており、=
代わりにを持っている場合、それが意図的にそうであるかどうかを判断する確実な方法はありません。
これはHaskellとその使用法に関する情報のかなり良い情報源です: