Les deux frameworks web Haskell récemment publiés sont Yesod (à 0,8) et Snap (à 0,4).
Il est assez évident que Yesod prend actuellement en charge beaucoup plus de fonctionnalités que Snap. Cependant, je ne supporte pas la syntaxe utilisée par Yesod pour son HTML, CSS et Javascript.
Donc, j'aimerais comprendre ce qui me manquerait si j'allais avec Snap à la place. Par exemple, il ne semble pas que le support de base de données existe. Et les séances? Autres caractéristiques?
Réponses:
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 Snap gère cinq projets différents sur le piratage: snap-core, snap-server, heist, snap et xmlhtml. snap-server est un serveur Web qui expose l'API définie par snap-core. le braquage est un système de modèles. xmlhtml est une bibliothèque d'analyse et de rendu XML / HTML utilisée par heist. snap est un projet parapluie qui les colle tous ensemble et fournit la puissante API snaplets qui rend les applications Web composables et modulaires.
Yesod a une multitude de projets sur le piratage. La plupart (tous?) D'entre eux sont répertoriés dans la catégorie Yesod . Certains des plus notables sont yesod-core, warp, persistent et hamlet.
La réalité du développement Web Haskell est que c'est beaucoup moins un choix ou une exclusivité qu'il n'y paraît. En général, les projets sont très peu couplés et assez interchangeables. Vous pouvez créer un site Web en utilisant warp (le serveur Web de l'équipe Yesod), heist (le système de modèles de l'équipe Snap) et acid-state (le système de persistance du projet Happstack). Vous pouvez également utiliser snap-server avec hamlet ou persistant.
Cela dit, les deux projets présentent certainement des différences. La plus grande différence que je peux souligner objectivement est que les projets Yesod font généralement un usage intensif du modèle Haskell et des quasiquotes pour créer des DSL concis, tandis que les projets Snap s'en tiennent à la création de bibliothèques de combinateurs qui favorisent la composabilité. À peu près toutes les autres différences auxquelles je peux penser seront subjectivement biaisées vers Snap. Les packages parapluie 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 tirer quelque chose de différent et l'utiliser également.
Snap a des sessions et une authentification , des interfaces vers plusieurs bases de données et une gestion agréable des formulaires ( ici et ici ) à l'aide de foncteurs digestifs qui incluent une prise en charge préemballée pour des listes de taille dynamique imbriquées arbitrairement. Ce ne sont là que quelques-uns de l' écosystème croissant des agrafes enfichables . Les sessions et les snaplets d'authentification sont écrits d'une manière indépendante du back-end. Donc, avec une petite quantité de code de colle, vous devriez pouvoir l'utiliser avec à peu près 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 une question de fonctionnalités et plus de goût personnel. Chaque fois que quelqu'un dit que l'un des cadres n'a pas quelque chose qu'un autre possède, la plupart du temps, il sera assez facile d'extraire les fonctionnalités manquantes de l'autre cadre en important le package 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 grossière (mais peut-être plus utile) à l'aide de généralisations plus larges, voir ma matrice de comparaison du cadre Web Haskell
la source
Juste avertissement: je suis le développeur principal de Yesod.
Je ne sais pas ce que vous n'aimez pas dans la syntaxe Javascript: c'est du javascript simple avec une interpolation variable. Quant au 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 de votre choix, y compris Heist (ce que Snap utilise). Cela dit, il est un peu une drôle de chose à sauter sur Yesod CSS / Javascript syntaxe, lorsque le Calage ne même pas avoir une syntaxe pour elle. Vous êtes certainement les bienvenus dans leur solution de fichiers statiques.
Yesod est livré avec une prise en charge transparente de l'authentification / autorisation, des URL de type sécurisé, des widgets, des e-mails et un tas de petites choses partout (fil d'Ariane, messages, destination finale). De plus, Yesod a un ensemble assez riche de modules complémentaires pour des choses comme les commentaires et la démarque, et 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.
la source
Julius
sans que le code soit compressé? Je suis en train d'utiliserGoogle Closure
et je dois conserver les métadonnées dans les commentaires pour le compilateur.Essayez le hameau - vous pourriez finir par l' aimer. Une réaction négative à un niveau superficiel n'est pas rare. Cependant, personne qui a réellement utilisé le hameau ne se plaint.
Aussi, pourquoi ne pas utiliser Happstack? Ce n'est pas parce qu'ils ne font pas partie de l'actualité qu'ils n'ont pas de cadre solide.
la source
Vous vous référez probablement à 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 du html ordinaire avec des balises d'ouverture et de fermeture complètes et tous les attributs html normaux. Oui, vous pouvez omettre la fermeture des balises et utiliser des raccourcis pour les attributs id et class. Mais ce n'est pas obligatoire. Vous pouvez continuer à écrire du html ordinaire.
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 séparés.
Le modèle css a en effet une syntaxe différente, mais la version récente de yesod fournit désormais également une syntaxe css simple.
Si vous allez avec Heist, vous n'aurez pas d'URL sécurisées.
Dans Heist, les modèles html sont lus à chaque fois depuis le 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 avec les widgets. Vous devrez lancer le vôtre.
la source