89

私は最近、関数型プログラミングについて多くのことを見てきましたが、Clojure は特に興味深いようです。私はそれが何であるかの基本的な説明を「理解」していますが、Web 開発者として日常的にどのように使用するかを理解することはできません。私が読んだものの多くは、通常の OO で見られる典型的なプログラミングの状況ではなく、関数型プログラミングの数学的な側面に焦点を当てています。

スティックの端が間違っていますか?関数型プログラミングは Web 開発とはまったく無関係ですか? そうでない場合、「ウェブ用」に使用されている例はありますか?

4

19 に答える 19

62

関数型プログラミングは、Web アプリと非常によく一致します。Web アプリは HTTP 要求を受け取り、HTML の結果を生成します。これは、リクエストからページへの機能と考えることができます。

通常、長時間実行されるプロセス、ステートフルな UI、および複数の方向のデータフローがあるデスクトップ アプリと比較してください。これは、オブジェクトの状態とメッセージの受け渡しに関心がある OO により適しています。

于 2008-11-15T07:42:08.207 に答える
32

私の頭の上からいくつかの例:

于 2008-11-15T02:41:19.013 に答える
20

なぜそうしないのかわかりません.標準に準拠したHTMLをブラウザに配信している限り、関数型言語、命令型言語、訓練されたサルなど、ブラウザはそれを生成するために使用したものを気にしません.

于 2008-11-15T03:00:49.037 に答える
20

純粋な関数型プログラミングは、Web プログラミング環境にうまく対応できない場合があります。しかし、主な障害は、インフラストラクチャ (フレームワークと API) の欠如です。関数型言語が Java、Python、または Ruby と同じくらいリッチな Web プログラミング環境を持つようになるまでには、長い時間がかかります (おそらく、正直なところ、決してありません)。

とはいえ、いくつかのオプションがあります。

  • HAppS - Haskell Web アプリケーション サーバー
  • Haskell サーバーページ
  • Links - 関数型 Web プログラミング言語
  • mod_caml - Apache 用の OCaml CGI モジュール
  • Ocsigen/Eliom - OCaml Web サーバー/プログラミング フレームワーク
  • OPA - 商用 Web アプリケーション フレームワーク
  • Yesod - Haskell の Web フレームワーク

私はこれらのいずれについても経験がありません。たぶん、コメンテーターは、彼らにとって何がうまくいったかを検討することができます.

于 2008-11-15T15:31:58.537 に答える
14

Twitter は、オブジェクト指向と関数型の両方のパラダイムをサポートする JVM 言語である Scala でバックエンドを書き直しました。

また、Lift Web フレームワークは Scala で記述されています。

于 2009-08-05T21:56:43.120 に答える
4

Clojure については、Clojure と Google App Engine を使用して開発した興味深いスタートアップ (TheDeadline) があります。彼らは Slideshare に優れた ppt を、InfoQ にインタビューを掲載しています。

GAE を使用した Clojure のデプロイに関する適切な議論については、http: //news.ycombinator.com/item?id= 1239788 を参照してください。

私の知る限り、Clojure にはいくつかの Web 開発ライブラリがあります。コンポジュア リング コンジュア

これがあなたの質問のいくつかに答えることを願っています=)(私も始めたばかりです..)

ベスト、ライアン

于 2010-10-25T03:43:54.670 に答える
3

Ur/Webをチェックしてください。非常に高速で、その静的型システムは HTML や SQL などを認識しているため、セキュリティに関するあらゆる種類の優れた機能を保証できます。

于 2010-10-25T02:32:00.510 に答える
3

Web 開発とまったく無縁というわけではありません。サーバー上にあるアプリは、クロージャー、高次関数、不変性、参照透過性などの機能をうまく活用できます...たとえば、何らかの方法で変換または操作する必要があるコレクションがあることは確かです。ここで関数型プログラミングが役立ちます。そのイディオムが主流の言語に浸透しているのには理由があります。機能的な機能は、簡潔さ、テスト容易性、並列化に役立ち、そうでなければパターンで解決する問題に対するネイティブな解決策を提供することもできます。

更新: 関数型言語用の Web フレームワークもあります。Common Lisp の Webblock、Scala の Lift。これらは私が聞いたものであり、もっとあるかもしれません...しかし、必ずしも純粋に機能的である必要はありません.たとえば、Scalaは純粋ではなく、どのJavaフレームワークでも動作するはずです.ビジネス層などに関数型プログラミングを使用する。

于 2008-11-15T02:47:17.020 に答える
3

Erlang は、スケーラブルな Web アプリケーションの一部のインフラストラクチャで多く使用されているようです。CouchDB および Riak データベースは、RabbitMQ メッセージ キューイング サーバーと同様に、ほとんどが Erlang で記述されています。その成功の鍵の 1 つは、共有の変更可能な状態を使用せずに、メッセージ パッシングを通じて同時実行性を処理することです。特定の関数型プログラミング言語よりも役立つのは、問題に対するこの考え方です。

または、MapReduce を見てください。map 関数と reduce 関数がたまたま内部的にステートフルな場合でも、これは計算を見る非常に機能的な方法です。そのため、フォールト トレラントで分散された方法で大規模なデータセットをクエリするのに非常に適しています。

ぜひ、あなたにとって最も実用的と思われるものを選んでください。ただし、関数型プログラミングは常に頭の片隅に置いておいてください。いつ役に立つかはわからないからです。

于 2010-10-25T02:47:40.390 に答える
2

言語とパラダイムはWebアプリにとって重要ではなく、すべて同じように良い面と悪い面があります。新しいパラダイムを学ぶ理由を探しているなら、ただ飛び込んでください。私のアドバイスは、あなたが解決しようとしている問題を分析し、適切なツールセットを選択することです。

于 2010-10-24T22:25:57.513 に答える
2

彼らは、エジンバラ大学でWeb用の関数型プログラミングを使ってかなりクールなことをしています。

于 2008-11-15T10:57:54.503 に答える
2

Javascript (Web の FE 部分の言語であり、ますます BE にも使用される言語) 自体は機能しませんが、関数は一次関数的です。

于 2010-10-25T03:42:30.753 に答える
2

これは、 Haskellを使用して Web アプリを構築する Web 開発者の経験です。関数型言語は非常にタイプ セーフであり、優れた同時実行性を備えていますが、長い間学界の寵児であり、まだ現実の世界で強く受け入れられていないため、常に最良の API が欠けていました。遠くないことを願っています。Erlang はすでにそれに取り掛かっていました。

于 2010-09-24T23:29:28.873 に答える
2

バックエンドが完全に Erlang で書かれているオンライン スプレッドシートを立ち上げました。

http://hypernumbers.com

どんな基準から見ても、これは非常に複雑な GUI を使用して構築できる最も複雑な Web アプリの 1 つです。

于 2010-10-25T07:44:32.203 に答える
1

関数型プログラミングがWebプログラミングで人気がある理由は、関数型プログラミングが共有状態と変化する状態を明示し、プログラマーが純粋関数型部分を純粋関数として表現できるようにするためです。純粋関数には、副作用がないため、並列実行が非常に簡単であるという利点があります。

少なくともそれが私の理由です。

于 2010-10-24T23:57:40.100 に答える
1

関数型言語は優れたアプリの構築に直接役立つわけではありませんが、アプリの構築には関数型プログラミング パラダイムを多用しています。純粋な関数型プログラミングには、「副作用がない」という制約があります。これにより、純粋な関数呼び出しが呼び出された順序で同じ結果をもたらすことが保証されます。これは Web 開発には理想的ではありませんが、関数型プログラミングを状態変更システムと組み合わせると、堅牢な Web アプリを構築できます。詳細については、私の論文をご覧ください: FAST Server また、これらのスライド.

于 2016-07-19T10:12:53.177 に答える
1

別の短い答え: http://www.mlstate.com -- FP に基づく完全な Web 開発プラットフォーム。言語のクリーンなセマンティクスにより、あらゆる種類の自動化された安全性とセキュリティの分析、最適化などが可能になります。

注意:私はそこで働いています。

于 2010-10-25T06:35:42.437 に答える
-3

あなたはおそらくそれを使用しないでしょうし、それを使用すべきではありませんが、誰かが常にルールの例外を見つけると言うとき(Viawebなど)。基本的に「スーパー言語」はなく、通常は「Blub」のコードの作業行のみがあります。Paul Grahamでさえ、Lispの主な(実際にはのみ)利点は、迅速にプロトタイプを作成できることであると述べています。

また、「スーパー言語」は通常、コードの可読性を高めるのではなく影響を及ぼします。つまり、それを書いた1人の「天才」は、他の誰も理解できないため、特に自分の修正した方言で書く可能性があるため、永久に維持する必要があります。これにより、プロジェクトの可能な範囲が狭くなります。つまり、新しく革新的なことができたとしても、それらは拡張可能ではなく、比較的小規模なままです(ArcのHacker Newsのように)。

それは、誰かが天才的なアイデアを持って、それを理解できないスタイルで実装し、それをBlubで書き直して拡張し、多くの人々がそれから利益を得ることができないということではありません。実際、これまでに生きてきたすべての有名な哲学者は言うまでもなく、Lispのすべてのサクセスストーリーで起こったことはまさにそれです。しかしもちろん、あなたが「天才」であれば、他の方法で製品のプロトタイプを作成することもできるかもしれません。

JVM上のFPに関しては、制限はありますが、可能性のあるクールなものがあります。個人的にはプロトタイピングにのみ使用しますが、ある程度の改善が見られるユースケース(通常はマルチスレッドに関係するもの)がある可能性があります。

于 2010-10-25T02:11:55.643 に答える