最近のニュースでの2つのHaskell Webフレームワークは、Yesod(0.8)とSnap(0.4)です。
Yesodが現在Snapよりもはるかに多くの機能をサポートしていることは明らかです。しかし、YesodがHTML、CSS、Javascriptに使用する構文には我慢できません。
そこで、代わりにSnapを使用した場合、何が欠けているのかを理解したいと思います。たとえば、データベースのサポートがあるように見えません。セッションはどうですか?その他の機能?
最近のニュースでの2つのHaskell Webフレームワークは、Yesod(0.8)とSnap(0.4)です。
Yesodが現在Snapよりもはるかに多くの機能をサポートしていることは明らかです。しかし、YesodがHTML、CSS、Javascriptに使用する構文には我慢できません。
そこで、代わりにSnapを使用した場合、何が欠けているのかを理解したいと思います。たとえば、データベースのサポートがあるように見えません。セッションはどうですか?その他の機能?
回答:
完全な開示:私はSnapの主要開発者の1人です。
まず、スナップとは何かについて話しましょう。現在、Snapチームは、ハッキングに関する5つの異なるプロジェクト(snap-core、snap-server、heist、snap、xmlhtml)を維持しています。snap-serverは、snap-coreによって定義されたAPIを公開するWebサーバーです。強盗はテンプレートシステムです。xmlhtmlはheistが使用するXML / HTML解析およびレンダリングライブラリです。snapは、それらすべてを結び付け、Webアプリを構成可能かつモジュール化する強力なスナップレットAPIを提供する包括的なプロジェクトです。
イェソドにはハッキングに関する多くのプロジェクトがあります。それらのほとんど(すべて?)は、Yesodカテゴリにリストされています。注目すべきものには、yesod-core、warp、persistent、hamletなどがあります。
HaskellのWeb開発の現実は、認識されているように見えるほど、排他的または選択的ではないということです。一般に、プロジェクトは非常に疎結合で、かなり交換可能です。warp(YesodチームのWebサーバー)、heist(Snapチームのテンプレートシステム)、acid-state(Happstackプロジェクトの永続化システム)を使用してWebサイトを構築できます。ハムレットまたは永続的なスナップサーバーを使用することもできます。
とはいえ、2つのプロジェクトには確かにいくつかの違いがあります。私が客観的に指摘できる最大の違いは、Yesodプロジェクトは通常、テンプレートHaskellと準クォートを多用して簡潔なDSLを作成するのに対し、Snapプロジェクトは、構成可能性に有利なコンビネーターライブラリの構築に固執することです。私が考えることができる他のほとんどすべての違いは、スナップに主観的に偏ります。両方のプロジェクトにちなんで名付けられたアンブレラパッケージは、明らかに上記のコンポーネントに対して特定の選択を行い、これらの選択はプロジェクトの依存関係に反映されます。ただし、それでも、別の何かを取得して使用することができないという意味ではありません。
Snapには、セッションと認証、いくつかのデータベースへのインターフェース、および任意にネストされた動的にサイズ変更可能なリストの事前パッケージ化されたサポートを含む消化機能を使用したフォーム処理(こことここ)があります。これらは、プラグイン可能なスナップレットの成長するエコシステムのほんの一部です。セッションと認証スナップレットは、バックエンドに依存しない方法で記述されています。したがって、少量のグルーコードを使用すると、考えられるほぼすべての永続化システムでそれを使用できるはずです。将来的には、Snapはこのポリシーを可能な限り適用する予定です。
ほとんどの場合、Snap対Yesod対Happstackの選択は、機能の問題ではなく、個人的な好みの問題だと思います。フレームワークの1つに別のフレームワークにはないものがあると誰かが言うときはいつでも、ほとんどの場合、必要なパッケージをインポートすることによって、他のフレームワークから欠落している機能を取り込むのは非常に簡単です。
編集:大きな3つのHaskell Webフレームワークのより詳細な比較については、私の最近のブログ投稿をチェックしてください。いくつかのより広い一般化を使用したより大まかな(しかし、おそらくより役立つ)比較については、私のHaskell Web Framework比較マトリックスを参照してください
公正な警告:私はYesodの主要開発者です。
私はあなたがJavaScriptの構文についてあなたが嫌いなことを確信していません:それは変数補間を備えたプレーンなJavaScriptです。CSSについては、YesodにLuciusが追加され、プレーンCSSも使用できるようになりました。HTMLの場合、Heist(Snapが使用するもの)を含む、必要な他のライブラリを簡単に使用できます。これはスナップでもないとき、それは、面白いのビットは、CSS / Javascriptの構文上イェソドをスキップすることだ、と述べていそれのための構文を。静的ファイルのみのソリューションはもちろん歓迎します。
Yesodには、認証/承認、タイプセーフURL、ウィジェット、電子メール、およびいたるところにある小さなもの(パンくず、メッセージ、最終的な宛先)のシームレスなサポートが付属しています。さらに、Yesodには、コメントやマークダウンなどのかなり豊富なアドオンパッケージのセットと、例として取り上げるいくつかの実際のコードベースがあります。これらのいずれかがあなたにとって魅力的である場合、代替案がそれらをサポートしているかどうかを確認することをお勧めします。
Julius
コードを圧縮せずに使用する変更はありますか?私は使用Google Closure
しており、コンパイラのコメントにメタデータを保持する必要があります。
おそらく古いバージョンのyesodを参照しています。最新のyesodバージョンには、html、javascript、cssの単純な構文があります。
yesodのテンプレートライブラリハムレットのHTML構文は、完全な開始タグと終了タグ、およびすべての通常のHTML属性を持つプレーンHTMLです。はい、終了タグを省略して、idおよびclass属性のショートカットを使用できます。しかし、そうする必要はありません。プレーンHTMLを書き続けることができます。
それだけでなく、htmlテンプレートは、SnapのテンプレートライブラリHeistと同様に、別々のファイルに置くことができます。
Javaスクリプトテンプレート(julius)はプレーンなjavascriptファイルであり、別のファイルに存在します。
cssテンプレートは確かに異なる構文を持っていますが、yesodの最近のバージョンは今やプレーンなcss構文も提供します。
Heistを使用する場合、タイプセーフなURLはありません。
Heistでは、htmlテンプレートは毎回ハードドライブから読み込まれます。Yesodは、すべてのテンプレートを実行可能ファイルに直接コンパイルします。ハードドライブからファイルが読み込まれません。したがって、応答ははるかに高速です。ベンチマークは自分で確認できます。
Yesodでは、うまく連携するウィジェットを作成できます。Snapはウィジェットをまったく扱いません。自分でロールバックする必要があります。