Die beiden Haskell-Webframeworks in den letzten Nachrichten sind Yesod (bei 0,8) und Snap (bei 0,4).
Es ist ziemlich offensichtlich, dass Yesod derzeit viel mehr Funktionen als Snap unterstützt. Ich kann die Syntax, die Yesod für HTML, CSS und Javascript verwendet, jedoch nicht ausstehen.
Ich würde gerne verstehen, was mir fehlen würde, wenn ich stattdessen Snap verwenden würde. Sieht zum Beispiel nicht so aus, als ob Datenbankunterstützung vorhanden ist. Wie wäre es mit Sitzungen? Andere Eigenschaften?
Antworten:
Vollständige Offenlegung: Ich bin einer der Hauptentwickler von Snap.
Lassen Sie uns zunächst darüber sprechen, was Snap ist. Derzeit verwaltet das Snap-Team fünf verschiedene Projekte zum Thema Hackage: Snap-Core, Snap-Server, Heist, Snap und XMLTML. Snap-Server ist ein Webserver, der die von Snap-Core definierte API verfügbar macht. Überfall ist ein Schablonensystem. xmlhtml ist eine XML / HTML-Analyse- und Rendering-Bibliothek, die von heist verwendet wird. snap ist ein Dachprojekt, das sie alle zusammenklebt und die leistungsstarke snaplets-API bereitstellt, die Web-Apps zusammensetzbar und modular macht.
Jessod hat eine Vielzahl von Projekten zum Thema Hackage. Die meisten (alle?) Sind in der Kategorie Jessod aufgeführt . Einige der bemerkenswerten sind Jessod-Core, Warp, Persistent und Hamlet.
Die Realität der Haskell-Webentwicklung ist, dass es viel weniger eine exklusive Wahl ist, als wahrgenommen zu werden scheint. Im Allgemeinen sind die Projekte sehr locker gekoppelt und ziemlich austauschbar. Sie können eine Website mit Warp (dem Webserver des Yesod-Teams), Heist (dem Vorlagensystem des Snap-Teams) und Acid-State (dem Persistenzsystem des Happstack-Projekts) erstellen. Sie können auch einen Snap-Server mit Weiler oder persistent verwenden.
Das heißt, die beiden Projekte haben definitiv einige Unterschiede. Der größte Unterschied, auf den ich objektiv hinweisen kann, besteht darin, dass Yesod-Projekte in der Regel stark von Template Haskell und Quasiquoting Gebrauch machen, um präzise DSLs zu erstellen, während Snap-Projekte beim Erstellen von Kombinatorbibliotheken bleiben, die die Kompositionsfähigkeit fördern. Fast alle anderen Unterschiede, die mir einfallen, werden subjektiv auf Snap ausgerichtet sein. Die nach beiden Projekten benannten Dachpakete werden offensichtlich spezifische Entscheidungen für die oben genannten Komponenten treffen, und diese Entscheidungen werden sich in den Projektabhängigkeiten widerspiegeln. Das heißt aber immer noch nicht, dass Sie etwas anderes nicht hineinziehen und es auch verwenden können.
Snap bietet Sitzungen und Authentifizierung , Schnittstellen zu mehreren Datenbanken und eine nette Formularverarbeitung ( hier und hier ) mit Digestive-Funktoren , die vorgefertigte Unterstützung für beliebig verschachtelte, dynamisch große Listen enthält. Dies sind nur einige der wachsenden Ökosysteme steckbarer Snaplets . Die Sitzungen und Authentifizierungs-Snaplets werden auf eine Art und Weise geschrieben, die Back-End-unabhängig ist. Mit einer kleinen Menge Klebercode sollten Sie ihn also mit nahezu jedem erdenklichen Persistenzsystem verwenden können. In Zukunft wird Snap so oft wie möglich an dieser Richtlinie festhalten.
Zum größten Teil denke ich, dass die Wahl von Snap vs Yesod vs Happstack weniger eine Frage der Funktionen als vielmehr des persönlichen Geschmacks ist. Wenn jemand sagt, dass eines der Frameworks nicht über etwas verfügt, das ein anderes hat, ist es meistens ziemlich einfach, die fehlenden Funktionen aus dem anderen Framework zu übernehmen, indem das erforderliche Paket importiert wird.
BEARBEITEN: Einen detaillierteren Vergleich der drei großen Haskell-Webframeworks finden Sie in meinem letzten Blogbeitrag . Einen gröberen (aber möglicherweise nützlicheren) Vergleich mit einigen breiteren Verallgemeinerungen finden Sie in meiner Haskell Web Framework-Vergleichsmatrix
quelle
Faire Warnung: Ich bin der Hauptentwickler von Jessod.
Ich bin mir nicht sicher, was Ihnen an der Javascript-Syntax nicht gefällt: Es ist einfaches Javascript mit variabler Interpolation. Was CSS betrifft, hat Yesod jetzt Lucius, mit dem Sie auch einfaches CSS verwenden können. Für HTML können Sie problemlos jede andere gewünschte Bibliothek verwenden, einschließlich Heist (was Snap verwendet). Das heißt, es ist ein bisschen eine lustige Sache Yesod über CSS / Javascript - Syntax zu überspringen, wenn Schnapp nicht einmal haben eine Syntax für sie. Sie sind sicherlich zu ihrer Lösung nur statischer Dateien willkommen.
Yesod bietet nahtlose Unterstützung für Authentifizierung / Autorisierung, typsichere URLs, Widgets, E-Mails und eine Reihe kleiner Dinge (Brotkrumen, Nachrichten, Endziel). Außerdem verfügt Yesod über eine Reihe von Zusatzpaketen für Kommentare und Preisnachlässe sowie einige große reale Codebasen, aus denen Sie beispielsweise auswählen können. Wenn eines davon für Sie attraktiv ist, sollten Sie prüfen, ob Ihre Alternativen es unterstützen.
quelle
Julius
ohne Komprimierung des Codes verwendet werden sollen? Ich benutzeGoogle Closure
und muss Metadaten in Kommentaren für den Compiler behalten.Probieren Sie den Weiler aus - vielleicht gefällt er Ihnen am Ende . Eine negative Reaktion auf oberflächlicher Ebene ist keine Seltenheit. Doch niemand, der tatsächlich hat verwendet Weiler beklagt.
Warum nicht auch Happstack verwenden? Nur weil sie nicht "in den Nachrichten" sind, heißt das nicht, dass sie keinen soliden Rahmen haben.
quelle
Sie beziehen sich wahrscheinlich auf die alte Version von Jessod. Die neuesten Jessod-Versionen haben eine einfache Syntax für HTML, Javascript und CSS.
Die HTML-Syntax von Jessods Weiler für die Vorlagenbibliothek ist einfaches HTML mit vollständigen Tags zum Öffnen und Schließen und allen normalen HTML-Attributen. Ja, Sie können das Schließen von Tags weglassen und Verknüpfungen für ID- und Klassenattribute verwenden. Das musst du aber nicht. Sie können weiterhin einfaches HTML schreiben.
Darüber hinaus können sich HTML-Vorlagen in separaten Dateien befinden, genau wie in der Vorlagenbibliothek Heist von Snap.
Java-Skriptvorlagen (julius) sind einfache Javascript-Dateien, die sich auch in separaten Dateien befinden.
Die CSS-Vorlage hat zwar eine andere Syntax, aber die aktuelle Version von yesod bietet jetzt auch eine einfache CSS-Syntax.
Wenn Sie sich für Heist entscheiden, haben Sie keine typsicheren URLs.
In Heist werden HTML-Vorlagen jedes Mal von der Festplatte gelesen. Yesod kompiliert alle Vorlagen direkt in die ausführbare Datei. Es wird keine Datei von der Festplatte gelesen. Somit ist die Antwort viel schneller. Sie können die Benchmarks selbst sehen.
In Jessod können Sie Widgets erstellen, die gut zusammenarbeiten. Snap befasst sich überhaupt nicht mit Widgets. Sie müssen Ihre eigenen rollen.
quelle