HaskellのSnapとYesod Webフレームワークの比較


231

最近のニュースでの2つのHaskell Webフレームワークは、Yesod(0.8)とSnap(0.4)です。

Yesodが現在Snapよりもはるかに多くの機能をサポートしていることは明らかです。しかし、YesodがHTML、CSS、Javascriptに使用する構文には我慢できません。

そこで、代わりにSnapを使用した場合、何が欠けているのかを理解したいと思います。たとえば、データベースのサポートがあるように見えません。セッションはどうですか?その他の機能?


138
個人的には、htmlがhtmlに使用する構文に耐えられません;)
Rehno Lindeque '13

2
HTMLを生成するためのハムレットテンプレート構文について、何が嫌いですか?
mxc 2011

6
構文が異なるため、DreamweaverとYesodの間を移動できないのが好きではありません。
Muchin

6
一般に、Yesodチームは新しいアイデアを非常に受け入れています。私はあなたのユースケースを知ったので、おそらくあなたに良い解決策をお勧めします。SOは共同ディスカッションに最適な場所ではないため、web-develリストにメールを送信するのが最適です。
マイケル・スノイマン、2011

76
人々はまだDreamweaverを使用していますか?;)
OJ。

回答:


236

完全な開示:私は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比較マトリックスを参照してください


34
Haskell Web開発における友好的な競争とミックスアンドマッチの二重の性質は、非常に有望であるように思われます。とはいえ、私はできるだけ早くSnap-authをハッキングすることをお勧めします。セッションと認証は重要です。
Dan Burton、

2
Yesodには、永続化するためのmongodbへのまだリリースされていないインターフェイスもあります。
mxc '14

4
開発の速度が私に影響を与えているので、この質問です。Snapが停滞したまま、Yesodが機能を追加する前向きの勢いを持っているように見えます。6か月以上前に初めて聞いたので、新しい機能が何であるかをすぐに知りません。
Muchin

3
スナップにはかなりの勢いがあります。まず第一に、プロジェクトは5月まで公開されなかったにもかかわらず、これは昨年ハッキングで最もダウンロードされたWebフレームワークでした。2つ目は、12月の0.3リリース以降、アクティビティが大幅に増加したことです。セッション、auth、mongoDB、xmlhtmlライブラリーなどのライブラリーはすべて、2011年に大部分が新規の寄稿者である人々によって作業されています。通常、#snapframework IRCチャネルには30人以上の人もいます。間違いなくアクティブなプロジェクトです。
mightybyte

2
その2つのうち、私がSnapに急増したのは、当時、それがより大きな勢いを持っているように思われたからです。コンポーネントの品質には非常に感銘を受けました。Heistには美しくシンプルでクリーンなデザインがあり、これはおそらく私が使用した言語のWebフレームワークで見た中で最高のテンプレートシステムです。Snapモナドは操作が簡単で、期待どおりに動作します。つまり、不快な驚きはありません。あなたは常にそれらの間で変換しているので、私はそれらがByteStringsまたはTextのどちらかで標準化されることを望みます!
Andrew

223

公正な警告:私はYesodの主要開発者です。

私はあなたがJavaScriptの構文についてあなたが嫌い​​なことを確信していません:それは変数補間を備えたプレーンなJavaScriptです。CSSについては、YesodにLuciusが追加され、プレーンCSSも使用できるようになりました。HTMLの場合、Heist(Snapが使用するもの)を含む、必要な他のライブラリを簡単に使用できます。これはスナップでもないとき、それは、面白いのビットは、CSS / Javascriptの構文上イェソドをスキップすることだ、と述べていそれのための構文を。静的ファイルのみのソリューションはもちろん歓迎します。

Yesodには、認証/承認、タイプセーフURL、ウィジェット、電子メール、およびいたるところにある小さなもの(パンくず、メッセージ、最終的な宛先)のシームレスなサポートが付属しています。さらに、Yesodには、コメントやマークダウンなどのかなり豊富なアドオンパッケージのセットと、例として取り上げるいくつかの実際のコードベースがあります。これらのいずれかがあなたにとって魅力的である場合、代替案がそれらをサポートしているかどうかを確認することをお勧めします。


それは非常に新しいです、私はまだドキュメントを更新する機会がありませんでした。ただし、基本的には、通常のCSSを入力し、ハムレット/カッシアス/ジュリアスのように#{...}と@ {...}を補間に使用します。ネストもサポートされていますが、このコメントよりも説明に少しスペースがかかります;)。web-develに電子メールを送信すると、ドキュメントが追いつくまで、さらに詳しい情報を提供できます。
マイケル・スノイマン、2011

Juliusコードを圧縮せずに使用する変更はありますか?私は使用Google Closureしており、コンパイラのコメントにメタデータを保持する必要があります。
Andras Gyomrey 2014年

1
ここはそのようなことを議論するのに適した場所ではないと思いますが、Juliusコードを圧縮する必要はありません(デフォルトでは圧縮しません)。さらに支援が必要な場合は、別のSOの質問またはメーリングリストのスレッドをお勧めします。
Michael Snoyman、2014年

29

GIVE集落A try-あなたがかもしれない結局それを好き。表面的なレベルでの否定的な反応は珍しいことではありません。しかし、実際にハムレットを使用したことのある人は誰も不満を述べません。

また、Happstackを使用しないのはなぜですか?それらが「ニュース」にないからといって、しっかりしたフレームワークがないわけではありません。


21
競合するフレームワークを試してみるよう提案するyesodのメンテナー。なんて素晴らしいコミュニティなんだ。
mxc 2013

12

おそらく古いバージョンの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はウィジェットをまったく扱いません。自分でロールバックする必要があります。


1
上記で説明したように、タイプセーフなURLに関するコメントは正しくありません。「スナップ」ではなく「強盗」と言った方が正確です。
マイティバイト

3
テンプレートエンジンとルーティングメカニズムの組み合わせにより、タイプセーフなURLが可能になります。つまり、強盗だけではありません。ハムレットを使用するだけでは、SnapでタイプセーフなURLを取得できません。
Vagif Verdi

1
私は村について話しているのではありません。web-routesパッケージは、もともとSnapと同じルーティングインターフェイスを持つHappstack用に作成されました。おそらく小さなグルーコードが必要になりますが、ほとんどの場合そうなります。
マイティバイト

4
私はその「接着剤コード」のような小さなポイントを作らないでしょう。以下で参照するテンプレートHaskellは、その「グルーコード」を安全で簡潔な方法で可能にするものです。私はそれに対処するために小さなブログ投稿を書きました:yesodweb.com/blog/yesod-template-haskell
Michael Snoyman '14

3
別の(より弱いがより柔軟な)テンプレート化アプローチを使用したい人のために、HStringTemplateは、私が知る限り、すべてのフレームワークでもうまく機能し、開発のためにテンプレートをその場で読み取り、本番用にキャッシュし、コンパイルすることもできます必要に応じて、それらを準引用符で囲みます。qqのサポートはおそらく13行ですが、需要があれば、強盗がそれを簡単に追加できることは間違いありません。
sclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.