27

私は、Erlang の最も成熟した Web 開発フレームワークであると思われるNitrogen Projectをチェックしてきました。

Erlang は、言語として非常に印象的です。ただし、Nitrogen に関しては、Erlang のあまり一般的ではない構文を使用して UI を構築することにはあまり関心がありません (PROLOG のネイティブでない限り)。

Django や Rails などの他の主流のWeb フレームワークとは対照的に、それについてどのような経験をしましたか?

4

4 に答える 4

31

私はこれまで Nitrogen についてほとんど何もしていませんでしたが、何ヶ月もメーリング リストを監視してきました。

Erlang と Nitrogen フレームワークの構文に関するあなたの懸念に対して、私は、それは不適切というよりも、純粋に不慣れなケースのように聞こえると答えます。客観的に見て、HTML は美しい言語ではなく、多くの癖があります。今は慣れているので、それほど悪くはないようです。Nitrogen/Erlang にチャンスを与えてください。そうすれば、すぐに慣れることができるかもしれません。

他の言語やフレームワークとの比較に関するあなたの質問に対して、最大の違いは Nitrogen では、Web サイト全体が Erlang ランタイムによって直接提供されていることです。Ruby on Rails にはこのようなモードがありますが、テストのみを目的としています。他の多くのフレームワークでは、単一の長時間実行プロセス内ですべてを実行するオプションさえ提供されていません。

Web アプリケーション全体とその基盤となるインフラストラクチャを単一の長時間実行プロセス内で実行すると、サイトの実行方法に大きな影響があります。

  • Apache では、各子は N 接続ごとに強制終了されます (N=500 程度)。特定の子が常に特定のクライアントの要求をすべて処理するかどうかはわかりません。HTTP はステートレスですが、ほとんどの場合、Web アプリは何らかのクライアント状態を必要とするため、Apache の子は、新しい接続の処理の一部として、クライアント状態のビューを再構築する必要があります。デフォルトでは、これは、そのクライアントについて保存されている永続データのためにディスクに戻ることを意味します。memcachedのような代替手段がありますが、これらは LAMP タイプ スタックのコアに組み込まれていません。Erlang では、定期的に強制終了されるものはありません。Erlang は、ディスクでバックアップされたメモリ内 DB を提供する Mnesia などの標準機能を提供します。

    ちなみに、 nginxに精通している場合、これは Erlang と同じ原則に基づいて構築されており、同じ理由で高速です。nginx と Web サーバーを実行する Erlang インスタンスの主な違いは、nginx はプログラミング環境ではないため、多くの処理を外部コードに委任する必要があることです。つまり、Apache と同じ IPC と永続的な状態の問題を共有しています。

  • ランタイムは継続的に稼働し、完全に機能するプログラミング環境であるため、LAMP タイプのスタックをまとめて使用するよりも、Erlang でシステムのより多くの部分を構築できる可能性があります。これにより、上記の利点が拡大されます。システムのさまざまな部分は、重い IPC や MySQL の代わりにメッセージ パッシングと Mnesia を介して調整できます。

  • 永続的なクライアント状態データ ストアにアクセスする 12 ほどの Apache の子は、ロックベースのヘアボールです。フレームワークはすべて、ロックなどを透過的に処理しますが、これらすべてを正しく行うのにかかる時間は隠すことができません。

    Erlang は純粋でない関数型言語であり、データの純粋性を暗示しますが、必要としません。また、マルチプロセッシングを念頭に置いて構築されており、ランタイム設計のコアまで明確になっています。これら 2 つの事実は、Erlang ベースのサーバーでは、他のフレームワークの 1 つに素朴に構築されたサーバーよりも、ロックの待機に時間を費やす可能性が低いことを意味します。他のシステムのロック遅延を最適化することは確かに可能ですが、それは本当にやりたいことですか? サービスが普及した後、Web スタックを最適化する方法を学ばなければならない 1,000 番目のチームに参加したいですか、それとも、まだ誰も行っていないことに時間を費やすことができるように、すべてをツールに任せますか? ?

于 2010-05-24T23:56:44.380 に答える
6

私もかつて、Erlang の扱いにくい構文について懸念していました。私は日常の Web プログラミングの煩わしさを軽減するためにいくつかのツールを作成しました。

  • ErlyDTLは、Django テンプレート言語の Erlang 実装です。Nitrogen では利用できませんが、Zotonic、Erlang Web、BeepBeep、Chicago Boss などの他のフレームワークでは利用できます。

  • Chicago Bossはフルスタックの Erlang フレームワークであり、多くのコード生成を行うため、Erlang のかなり冗長なレコード構文 (たとえば のPerson:name()代わりPerson#person.name)の代わりに、関数呼び出しでデータ フィールドにアクセスできます。

Nitrogen にはデータベース層が含まれていないため、Rails や Django と実際には比較できないことに注意してください。データベース駆動型フレームワークの包括的な比較については、この StackOverflow の質問に対する私の回答をご覧ください。

https://stackoverflow.com/questions/1822518/current-state-of-erlang-web-development-frameworks-template-languages/2898271#2898271

于 2010-05-25T04:08:38.767 に答える
4

私があなただったら、 Webmachineを調べます。それは非常にシンプルで高速で、インターフェースはあなた次第です。

于 2010-05-25T18:06:31.663 に答える
3

Erlang Webも成熟していると考えるべきです。これは MVC フレームワークですが、Nitrogen はよりイベントベースです。それは好みの問題です。

Webmachine は素晴らしいツールだと思いますが、他のツールのような Web フレームワークではありません。これは HTTP プロセッサであり、安らかなインターフェイスを構築するのに理想的です。

また、Erlang 構文にチャンスを与えることもお勧めします。Erlang は私のお気に入りの言語の 1 つです。

于 2010-05-27T15:27:31.580 に答える