Los dos marcos web de Haskell en las noticias recientemente son Yesod (en 0.8) y Snap (en 0.4).
Es bastante obvio que Yesod actualmente admite muchas más funciones que Snap. Sin embargo, no soporto la sintaxis que Yesod usa para su HTML, CSS y Javascript.
Entonces, me gustaría entender lo que me estaría perdiendo si fuera con Snap en su lugar. Por ejemplo, no parece que haya soporte para bases de datos. ¿Qué hay de las sesiones? ¿Otras características?
Respuestas:
Divulgación completa: soy uno de los principales desarrolladores de Snap.
En primer lugar, hablemos sobre qué es Snap. En este momento, el equipo de Snap mantiene cinco proyectos diferentes sobre piratería: snap-core, snap-server, heist, snap y xmlhtml. snap-server es un servidor web que expone la API definida por snap-core. El atraco es un sistema de plantillas. xmlhtml es una biblioteca de análisis y representación XML / HTML utilizada por heist. snap es un proyecto general que los une a todos y proporciona la potente API de snaplets que hace que las aplicaciones web sean componibles y modulares.
Yesod tiene una serie de proyectos sobre piratería. La mayoría (¿todos?) De ellos figuran en la categoría Yesod . Algunos de los más notables son yesod-core, warp, persistent y hamlet.
La realidad del desarrollo web de Haskell es que es mucho menos una opción exclusiva que la que parece percibirse. En general, los proyectos están muy poco acoplados y son bastante intercambiables. Puede crear un sitio web utilizando warp (el servidor web del equipo Yesod), atraco (el sistema de plantillas del equipo Snap) y estado ácido (el sistema de persistencia del proyecto Happstack). También puede usar snap-server con hamlet o persistente.
Dicho esto, los dos proyectos definitivamente tienen algunas diferencias. La mayor diferencia que puedo señalar objetivamente es que los proyectos de Yesod suelen hacer un uso intensivo de Template Haskell y cuasiquoting para crear DSL concisos, mientras que los proyectos de Snap se adhieren a la construcción de bibliotecas de combinador que favorecen la componibilidad. Casi cualquier otra diferencia que se me ocurra estará sesgada subjetivamente hacia Snap. Los paquetes paraguas nombrados después de ambos proyectos obviamente tomarán decisiones específicas para los componentes mencionados anteriormente, y estas opciones se reflejarán en las dependencias del proyecto. Pero eso todavía no significa que no pueda sacar algo diferente y usarlo también.
Snap tiene sesiones y autenticación , interfaces para varias bases de datos y un buen manejo de formularios ( aquí y aquí ) que utiliza funciones digestivas que incluyen soporte preempacado para listas dinámicamente anidadas arbitrariamente. Estos son solo algunos de los ecosistemas en crecimiento de snaplets conectables . Las sesiones y los snaplets de autenticación se escriben de una manera que es independiente del back-end. Entonces, con una pequeña cantidad de código de pegamento, debería poder usarlo con casi cualquier sistema de persistencia que se le ocurra. En el futuro, Snap se mantendrá con esta política tan a menudo como sea posible.
En su mayor parte, creo que la elección de Snap vs Yesod vs Happstack es menos una cuestión de características y más de gusto personal. Cada vez que alguien dice que uno de los marcos no tiene algo que otro tenga, la mayoría de las veces será bastante fácil extraer la funcionalidad faltante del otro marco importando el paquete necesario.
EDITAR: Para una comparación más detallada de los tres grandes marcos web de Haskell, consulte mi reciente publicación de blog . Para una comparación más áspera (pero posiblemente más útil) usando algunas generalizaciones más amplias, consulte mi Matriz de comparación de marcos web de Haskell
fuente
Advertencia justa: soy el desarrollador principal de Yesod.
No estoy seguro de lo que no le gusta de la sintaxis de Javascript: es JavaScript simple con interpolación variable. En cuanto a CSS, Yesod ahora tiene Lucius, que le permite usar también CSS simple. Para HTML, puede usar fácilmente cualquier otra biblioteca que desee, incluido Heist (que utiliza Snap). Dicho esto, es un poco divertido omitir Yesod sobre la sintaxis CSS / Javascript, cuando Snap ni siquiera tiene una sintaxis para ello. Sin duda, eres bienvenido a su solución de solo archivos estáticos.
Yesod viene con soporte transparente para autenticación / autorización, URL de tipo seguro, widgets, correo electrónico y un montón de pequeñas cosas por todas partes (migas de pan, mensajes, destino final). Además, Yesod tiene un conjunto bastante rico de paquetes complementarios para cosas como comentarios y rebajas, y algunas bases de código grandes del mundo real para elegir por ejemplo. Si alguno de estos es atractivo para usted, es posible que desee verificar si sus alternativas los respaldan.
fuente
Julius
sin comprimir el código? Estoy usigGoogle Closure
y necesito mantener metadatos en los comentarios para el compilador.Dar una aldea prueba- es posible que terminan gustando. Una reacción negativa a nivel superficial no es infrecuente. Sin embargo, nadie que haya usado la aldea se queja.
Además, ¿por qué no usar Happstack? El hecho de que no estén "en las noticias" no significa que no tengan un marco sólido.
fuente
Probablemente se refiera a la versión anterior de yesod. Las últimas versiones de yesod tienen una sintaxis simple para html, javascript y css.
La sintaxis html de la aldea de la biblioteca de plantillas de yesod es html simple con etiquetas completas de apertura y cierre y todos los atributos html normales. Sí, puede omitir las etiquetas de cierre y usar accesos directos para los atributos de identificación y clase. Pero no tienes que hacerlo. Puede continuar escribiendo html simple.
No solo eso, sino que las plantillas html pueden residir en archivos separados, al igual que en la biblioteca de plantillas Heist de Snap.
Las plantillas de script Java (julius) son archivos javascript simples, que también residen en archivos separados.
La plantilla css tiene una sintaxis diferente, pero la versión reciente de yesod ahora también proporciona una sintaxis css simple.
Si vas con Heist, no tendrás urls de tipo seguro.
En Heist, las plantillas html se leen desde el disco duro cada vez. Yesod compila todas las plantillas directamente en el ejecutable. No se lee ningún archivo desde el disco duro. Por lo tanto, la respuesta es mucho más rápida. Puedes ver los puntos de referencia tú mismo.
En Yesod puedes crear widgets que cooperen muy bien. Snap no trata con widgets en absoluto. Tendrás que rodar el tuyo.
fuente