web-dev-qa-db-fra.com

Comparaison des frameworks Web Haskell Snap et Yesod

Les deux frameworks Web Haskell dans les actualités récemment sont Yesod (à 0.8) et Snap (à 0.4).

Il est assez évident que Yesod supporte actuellement beaucoup plus de fonctionnalités que Snap. Cependant, je ne supporte pas la syntaxe que Yesod utilise pour ses langages HTML, CSS et Javascript.

Donc, j'aimerais comprendre ce qui me manquerait si je choisissais plutôt Snap. Par exemple, il ne semble pas que le support de base de données existe. Qu'en est-il des sessions? Autres caractéristiques?

230
Muchin

Divulgation complète: Je suis l'un des principaux développeurs de Snap.

Tout d'abord, parlons de ce qu'est Snap. À l’heure actuelle, l’équipe de capture maintient cinq projets différents sur le piratage: composant logiciel enfichable, serveur de capture, serveur, stockage, capture et xmlhtml. snap-server est un serveur Web qui expose l'API définie par snap-core. heist est un système de templates. xmlhtml est une bibliothèque de rendu et d’analyse XML/HTML utilisée par heist. snap est un projet parapluie qui les regroupe et fournit la puissante API de snaplets qui rend les applications Web composables et modulaires.

Yesod a une foule de projets sur le piratage. La plupart (tous?) D'entre eux sont répertoriés dans le catégorie Yesod . Certains des plus notables sont Yesod-Core, Warp, Persistant et Hamlet.

La réalité du développement Web de Haskell est qu’il s’agit d’un choix beaucoup moins exclusif que ce qui semble être perçu. En général, les projets sont très faiblement couplés et assez interchangeables. Vous pouvez créer un site Web en utilisant warp (serveur Web de l'équipe Yesod), heist (système de modèles de l'équipe Snap) et acid-state (système de persistance du projet Happstack). Vous pouvez également utiliser snap-server avec hamlet ou persistant.

Cela dit, les deux projets présentent des différences. La plus grande différence que je puisse objectivement remarquer est que les projets Yesod utilisent généralement lourdement Template Haskell et le quasi-classement pour créer des DSL concis, tandis que les projets Snap s’appliquent à la construction de bibliothèques de combinateurs qui favorisent la composabilité. À peu près toutes les autres différences auxquelles je peux penser seront subjectivement subjectives envers Snap. Les packages parapluies nommés d'après les deux projets vont évidemment faire des choix spécifiques pour les composants mentionnés ci-dessus, et ces choix seront reflétés dans les dépendances du projet. Mais cela ne signifie toujours pas que vous ne pouvez pas utiliser quelque chose de différent et l'utiliser aussi.

Snap a sessions et authentification , des interfaces vers plusieurs bases de données et la gestion des formulaires Nice ( ici et ici ) en utilisant digestive-fonctctors qui inclut une prise en charge prédéfinie de listes dynamiquement dimensionnelles imbriquées de manière arbitraire. Ce ne sont là que quelques-uns des écosystème croissant de snaplets enfichables . Les snaplets de sessions et d’authentification sont écrits d’une manière agnostique. Donc, avec une petite quantité de code adhésif, vous devriez pouvoir l’utiliser avec n’importe quel système de persistance auquel vous pouvez penser. À l’avenir, Snap respectera cette politique aussi souvent que possible.

Pour la plupart, je pense que le choix de Snap vs Yesod vs Happstack est moins un problème de fonctionnalités que de goût personnel. Chaque fois que quelqu'un dit qu'un des frameworks n'a pas quelque chose d'autre, la plupart du temps il sera assez facile d'extraire les fonctionnalités manquantes de l'autre framework en important le paquet nécessaire.

EDIT: Pour une comparaison plus détaillée des trois grands frameworks Web Haskell, consultez mon récent article de blog . Pour une comparaison plus approximative (mais peut-être plus utile) à l'aide de généralisations plus larges, voir ma matrice de comparaison du cadre Web Haskell

236
mightybyte

Juste avertissement: je suis le développeur principal de Yesod.

Je ne suis pas sûr de ce que vous n’aimez pas dans la syntaxe Javascript: c’est du javascript simple avec interpolation variable. Quant à CSS, Yesod a maintenant Lucius, qui vous permet également d’utiliser du CSS simple. Pour HTML, vous pouvez facilement utiliser n’importe quelle autre bibliothèque, y compris Heist (utilisée par Snap). Cela dit, c'est un peu drôle de passer Yesod à la syntaxe CSS/Javascript, quand Snap n'a même pas avoir une syntaxe pour cela. Vous êtes certainement les bienvenus à leur solution de fichiers statiques.

Yesod est livré avec un support transparent pour l'authentification/autorisation, des URL de type sécurisé, des widgets, des e-mails et de nombreuses petites choses (chapelure, messages, destination ultime). De plus, Yesod propose un ensemble assez riche de packages add-on pour des choses telles que les commentaires et les annotations, ainsi que quelques grandes bases de code du monde réel à choisir pour des exemples. Si l'un de ces éléments vous intéresse, vous pouvez vérifier si vos alternatives les prennent en charge.

222
Michael Snoyman

Donnez à hameau un essai - vous pourriez finir par aimer . Une réaction négative à un niveau superficiel n'est pas rare. Cependant, personne ne se plaint hameau.

Aussi, pourquoi ne pas utiliser Happstack? Ce n'est pas parce qu'ils ne sont pas "dans les nouvelles" qu'ils ne disposent pas d'un cadre solide.

29
Greg Weber

Vous faites probablement référence à l'ancienne version de Yesod. Les dernières versions de yesod ont une syntaxe simple pour html, javascript et css.

La syntaxe html du hameau de la bibliothèque de modèles de yesod est plaine html avec les balises d'ouverture et de fermeture complètes et tous les attributs html normaux. Oui, vous pouvez omettre les balises de fermeture et utiliser des raccourcis pour les attributs id et class. Mais vous n'êtes pas obligé. Vous pouvez continuer à écrire du HTML simple.

Non seulement cela, mais les modèles HTML peuvent résider dans des fichiers séparés, tout comme dans la bibliothèque de modèles de Snap, Heist.

Les modèles de script Java (julius) sont des fichiers javascript simples, résidant également dans des fichiers distincts.

Le modèle css a bien une syntaxe différente, mais la version récente de yesod fournit désormais également une syntaxe css simple.

Si vous y allez avec Heist, vous n'aurez pas d'URL de sécurité.

Dans Heist, les modèles html sont lus chaque fois depuis un disque dur. Yesod compile tous les modèles directement dans l'exécutable. Aucun fichier n'est lu à partir du disque dur. Ainsi, la réponse est beaucoup plus rapide. Vous pouvez voir les repères vous-même.

Dans Yesod, vous pouvez créer des widgets qui coopèrent bien. Snap ne traite pas du tout les widgets. Vous devrez rouler le vôtre.

12
Vagif Verdi