質問

1)関数型言語はWebアプリケーションの開発に適していますか?

2)ビジネスに適した機能言語/ ERP / CRM アプリケーションの種類?

役に立ちましたか?

解決

説明する種類の機能言語は汎用プログラミング言語であり、Webアプリやビジネスアプリを含むあらゆる種類の物に使用されます。 (私はHaskellを使用しています)。

gaborが示唆するように、最終的にはライブラリになります。 ScalaにはWebフレームワーク、liftがあります。 Haskellには happstack 2100 4400( 2010 があります) 2012) Hackage のあらゆる種類のライブラリ。

特定の特殊なドメインを検討する際、ツールチェーンほど言語の問題ではありません。

他のヒント

関数型言語は、使用したいあらゆるものに適しています。

ただし、最近のアプリケーションの開発は、プログラミング言語を使用するほど簡単ではありません。 Java、C#などの利点は、ビジネスソフトウェアを構築するときに絶対に必要な大規模なライブラリおよびその他の環境機能が付属していることです。ほとんどの関数型言語には、それほど優れたサポートはありません(まだですか?)。

F#は.NET環境にあり、そこにあるツールを利用できるため、有望かもしれません(間違っている場合は修正してください)。

この記事では、初期の関数型言語であるLispを使用してWebベースのアプリケーションが正常に終了しました。

関数型言語は、Webアプリケーション開発、特にScalaに適しています。

詳細については、 Lift フレームワークをご覧ください。

  

2)関数型言語はビジネス/ ERP / CRMタイプのアプリケーションに適していますか?

ビジネス/ ERP / CRMアプリに関する2番目のポイントに対処するには、個人的には「純粋」にこれらを実装しません。 Haskellのような関数型言語、またはClojureのような動的関数型言語。一方、私は現在ScalaでERPを実装しています 、もちろんハイブリッドOOP / FPで静的にコンパイルされています。

これを言う理由は、ERPのようなビジネスアプリは基本的にレコード指向であるためです。さまざまなレコードタイプを表すデータスキーマがあり、アプリロジックはそれらのレコードのCRUDとカスタムビジネスワークフローの適用を中心にほぼ設計されます彼らへ。基本的に、これらの種類のデータ中心のビジネスアプリが機能モデルに最適であるとは思いません。

人々はOOPとリレーショナルの不一致について好きなように話すことができますが、最終的にはOOPとデータベースの両方がレコード指向です:優れたORMを備えたOOP言語を使用すると、これらの異なるデータモデルをコードにマッピングして、処理するコードを添付できます各モデル。そして、これを静的に型付けすることにより(理想的にはScalaのsquerylのような強く型付けされたORMで)、実行時エラーや、コードを介して適切に適用されていないデータモデルの1つへの変更。

誤解しないでください-私はFPの大ファンです(Haskellでシステムプログラミングをますます行っています)が、OOPのレコード指向のアプローチは、関数よりも理にかなっていますビジネスERPなどのデータオブジェクトを処理するためのFPの指向アプローチ。 (Scalaは、レコード操作に高品質のORMとともにOOPパラダイムを使用できるようになるだけでなく、一般的なアプリプログラミングにもFPの良さをもたらすため、ルールの素晴らしい例外です。)

  1. はい、窒素は機能的なWebフレームワークの良い例です。また、スケーリングします。

http://nitrogenproject.com/

Yaws はErlangの素晴らしいWebサーバーです。

特定の関数型言語がWeb開発を行うために調整されているとは言いませんが、関数型言語でWeb開発を行うことはできないとは言いません。これは、選択した言語で利用可能なWebフレームワークと、その言語をサポートするWebサーバーがあるかどうかに完全に依存すると思います。

たとえば、IIS上のASP.NetとともにF#を使用してWeb開発を行うことができると確信しています。テンプレートエンジンにはF#のサポートがあるとは思いませんが、間違いなくF#でビジネスロジックを書くことができます。

同様に、Apacheには mod_haskell があります。これにより、haskellでの動的出力が比較的簡単になります。ただし、私は個人的に使用したことはありません。同時に、Apache用の mod_(erlangまたはscala)があれば、それらの言語でも同様に簡単です。

最終的に、関数型言語のステートレスな性質により、ステートレスなMVCスタイルのWebフレームワークに適したものになると思います。しかし、これらの言語で作業する際にあなたの人生を楽にするために利用できるツールとフレームワークに本当に帰着すると思います。たとえば、RubyはRailsが普及するまでWeb開発ではあまり人気がなく、djangoを見つけるまでPythonでwebbyをするのはあまり好きではありませんでした。

関数型言語は、Web開発に使用できる新しい種類の抽象化を提供します。継続ベースのWebサーバーは、たとえば関数型言語で人気があります。 PLT Scheme Webサーバーは、この種のWebアプリケーション開発をサポートしています。 wikipedia

で、Web開発における継続とその使用の詳細を読むことができます。

ほとんどの関数型言語、つまりあなたが含めた言語は、汎用言語と見なされます。 Web開発では、ClojureまたはScalaの使用を深く検討します。どちらも非常に優れたWebフレームワークを備えており、どちらもJVMで実行されます。 ClojureとScalaを完全にお勧めできますが、他の人にはあまりお勧めできません。

HaskellにはWebフレームワークがありますが、使用したことがありません。

ビジネスアプリケーション?もちろん。関数型言語は、あらゆるものに最適です。

関数型言語の支持者が主張する最大の利点の1つは、並列実行可能なプログラムの作成が容易になることです。ただし、通常、Webアプリケーションには並列処理の問題はありません。通常、Webサーバー/アプリケーションサーバーはスレッドのプールを維持し、各ユーザーリクエストは異なるスレッドに割り当てられ、異なる物理プロセッサで実行できます。そのため、あまり問題なくマルチプロセッサを活用できます。秘Theは、Webアプリは多数の小さなリクエストによって特徴付けられ、そこでスレッドと命令型言語がうまく機能するということです。命令型言語が崩壊し始めるのは、少数の計算負荷の高いリクエストがあるときです。

関数型言語のもう1つの大きな利点は、関数に副作用がないため、テストが簡単になることです。いくつかの入力で各機能を個別にテストし、システムが機能することを知っています。しかし、キャッチがあります。操作に入力または出力が含まれる場合、関数ではなくモナドを使用します。コードのその部分に対するこのテスト容易性の利点は失われます。

しかし、通常、Webアプリケーションには、要求から情報を読み取り、データベースに要求を行い、データベースから応答を読み取り、応答をフォーマットする必要があります。これは大量のIO、つまりモナドであり、関数の機会はほとんどありません。

これらのWebアプリケーションの特性を考慮すると、関数型言語はWebアプリケーションプログラミングにどのような利点をもたらしますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top