関数型プログラミングはWeb開発に関連していますか?[閉まっている]


88

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

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

回答:


31

私の頭のてっぺんからいくつかの例:

  • Yahoo! ストアはLispを利用しています(買収前は元々Viawebという名前でした)
  • RedditはLispで完全にプロトタイプ化されましたが、2005年にPython切り替えました
  • Hacker Newsは完全にArc(Lisp方言)で書かれています

7
Yahoo! ストアは数年前にC ++で書き直されました。
apg

5
言語!=プログラミングパラダイム。
phkahler 2010年

58
奇妙な例の選択... Yahoo!Storeは、Lispの大きな支持者であるPaulGrahamによって書かれました。彼はまた、事実上RedditのクローンであるHackerNewsを書いた。おそらく、HNは、RedditがLispからPythonに切り替わったことに対応して作成されたものであり、RedditのメンバーはPaulGrahamによって実行されるアクセラレータプログラムであるYCombinatorの一部でした。これを3つではなく1つの例として数えます。
ブランドンブルーム

@ShermPendleyサーバー構成、ネットワークセットアップ、およびデータベースアクセスもパフォーマンスの主要な要因です。Webアプリのスクリプト実行時間は、通常、全体的なコストのごく一部です。
agmLauncher 2015年

62

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

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


20

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


20

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

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

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



4

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

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

私の知る限り、ClojureにはいくつかのWeb開発ライブラリがあります。Compojure Ring Conjure

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

最高、ライアン


3

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

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


3

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


3

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

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

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



2

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



2

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

http://hypernumbers.com

どんな基準でも、これは精神的に複雑な巨大なGUIで構築できる最も複雑なWebアプリの1つです。


2

これは、Haskellを使用してWebアプリを構築する際のWeb開発者の経験です。関数型言語は非常に型安全性が高く、並行性が優れていますが、長い間学界の最愛の人であり、現実の世界ではまだ強く受け入れられていないため、常に最高のAPIを欠いていました。それほど遠くないことを願っています。Erlangはすでにそれに取り組んでいました。


1

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

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


1

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

警告:私はそこで働いています。


1

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


0

はい、関数型プログラミングはどの言語でも実行できるため、Web開発者として日常的に使用できます。

あなたはすべきですか?それはあなたが解決している問題に依存します。関数型プログラミングはプログラミングパラダイムであり、どこで使用すべきかは、解決しようとしている問題によって異なります。

決定を簡単にするために、カプセル化、多態性、機能のような継承があなたの生活を楽にすることができるOOPの概念を使用して、いくつかの問題を解決する方が簡単かどうかを考えてください。

はいの場合、そこで関数型プログラミングに行かず、単にOOPを使用します。アプリケーションが複雑な計算/計算/ビジネスロジックを実行し、大量の並行処理を伴う場合、関数型プログラミングはそのような場合に多くのツールと利点を提供できます。

これらは、プログラムの構造と要素を構築するための異なるスタイルであるため、適切なジョブに適切なツールを使用することがすべてです。残りは、何を使用しても何でも実行できます。

Web開発における関数型プログラミング:

JavaScriptは関数型プログラミングをサポートしており、Web開発のコンテキストでは非常にサポート的です。Reactフレームワークは関数型プログラミングの原則に大きく影響され、多くのWebアプリケーションで使用されています。

また、以下にリストされている関数型プログラミング言語で開発されたフレームワークで構築および実行されている多くのWebアプリケーションを見つけることができます。

•WebSharper(F#)

•スナップ(Haskell)

•リフト(Scala)

•Ocsigen(OCaml)

•シカゴボス、ゾトニック(erLang)

だから私の答えは誰にでも役立つことを願っています。


-2

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

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

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

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


1
実際、Paul Grahamは、Lispsの大きな利点は、利用可能な「最も強力な」言語であると述べています。彼は、viawebの4分の1(行単位)のようなものはLispマクロであると言って彼の議論を支持しています。ほとんどの言語(特に90年代半ばに利用可能な言語)でのメタプログラミングは困難です。本番サーバーにプッシュされた場合、プロトタイプではありません。
nmichaels 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.