Os dois frameworks web Haskell nas notícias recentemente são Yesod (em 0,8) e Snap (em 0,4).
É bastante óbvio que o Yesod atualmente suporta muito mais recursos do que o Snap. No entanto, não suporto a sintaxe que o Yesod usa para HTML, CSS e Javascript.
Então, eu gostaria de entender o que estaria perdendo se eu fosse com o Snap. Por exemplo, não parece que o suporte ao banco de dados esteja lá. E as sessões? Outras características?
Respostas:
Divulgação completa: sou um dos principais desenvolvedores do Snap.
Primeiro de tudo, vamos falar sobre o que é o Snap. No momento, a equipe do Snap mantém cinco projetos diferentes no hackage: snap-core, snap-server, heist, snap e xmlhtml. snap-server é um servidor web que expõe a API definida pelo snap-core. O assalto é um sistema de modelos. xmlhtml é uma biblioteca de análise e renderização XML / HTML usada pelo heist. snap é um projeto abrangente que os une e fornece a poderosa API de snaplets que torna os aplicativos da Web composíveis e modulares.
Yesod tem uma série de projetos sobre hackage. A maioria (todos?) Deles estão listados na categoria Yesod . Alguns dos mais notáveis são yesod-core, warp, persistent e hamlet.
A realidade do desenvolvimento da Web Haskell é que é muito menos uma opção ou exclusividade do que parece ser percebido. Em geral, os projetos são muito pouco acoplados e bastante intercambiáveis. Você pode criar um site usando warp (o servidor da web da equipe Yesod), heist (o sistema de modelos da equipe Snap) e acid-state (o sistema de persistência do projeto Happstack). Você também pode usar o snap-server com hamlet ou persistente.
Dito isto, os dois projetos definitivamente têm algumas diferenças. A maior diferença que posso apontar objetivamente é que os projetos Yesod geralmente fazem uso pesado de Template Haskell e quase quitação para criar DSLs concisas, enquanto os projetos Snap se concentram na construção de bibliotecas combinadoras que favorecem a composição. Praticamente qualquer outra diferença que eu possa pensar será subjetivamente influenciada pelo Snap. Os pacotes guarda-chuva nomeados após os dois projetos obviamente farão escolhas específicas para os componentes mencionados acima, e essas escolhas serão refletidas nas dependências do projeto. Mas isso ainda não significa que você não pode extrair algo diferente e usá-lo também.
O Snap tem sessões e autenticação , interfaces para vários bancos de dados e bom processamento de formulários ( aqui e aqui ) usando digestores-functores que incluem suporte pré -empacotado para listas dinamicamente dimensionáveis aninhadas arbitrariamente. Estes são apenas alguns dos crescentes ecossistemas de cobras conectáveis . As sessões e os snaplets de autenticação são gravados de forma independente do back-end. Portanto, com uma pequena quantidade de código de cola, você poderá usá-lo com praticamente qualquer sistema de persistência em que possa pensar. No futuro, o Snap seguirá essa política o mais rápido possível.
Na maioria das vezes, acho que a escolha do Snap vs Yesod vs Happstack é menos uma questão de recursos e mais uma questão de gosto pessoal. Sempre que alguém disser que um dos frameworks não possui algo que outro possui, na maioria das vezes será muito fácil extrair a funcionalidade ausente do outro framework importando o pacote necessário.
EDIT: Para uma comparação mais detalhada dos três grandes frameworks da Haskell, confira meu post recente no blog . Para uma comparação mais dura (mas possivelmente mais útil) usando algumas generalizações mais amplas, consulte minha Matriz de comparação da estrutura da Web Haskell
fonte
Aviso justo: eu sou o principal desenvolvedor do Yesod.
Não tenho certeza do que você não gosta na sintaxe do Javascript: é um javascript simples com interpolação variável. Quanto ao CSS, o Yesod agora possui o Lucius, que também permite o uso de CSS simples. Para HTML, você pode usar facilmente qualquer outra biblioteca que desejar, incluindo Heist (o que o Snap usa). Dito isso, é um pouco engraçado pular o Yesod sobre a sintaxe CSS / Javascript, quando o Snap nem sequer tem uma sintaxe para isso. Você é certamente bem-vindo à solução deles apenas de arquivos estáticos.
O Yesod vem com suporte contínuo para autenticação / autorização, URLs com segurança de tipo, widgets, email e um monte de pequenas coisas por todo o lugar (trilhas de navegação, mensagens, destino final). Além disso, o Yesod possui um conjunto bastante rico de pacotes de complementos para itens como comentários e descontos, e algumas grandes bases de códigos do mundo real para escolher, como exemplos. Se alguma dessas opções lhe atrai, você pode verificar se suas alternativas as suportam.
fonte
Julius
sem o código ser compactado? Eu sou usigGoogle Closure
e preciso manter os metadados nos comentários para o compilador.Experimente o hamlet - você pode acabar gostando. Uma reação negativa em um nível superficial não é incomum. No entanto, ninguém que realmente usou hamlet reclama.
Além disso, por que não usar o Happstack? Só porque eles não estão "nas notícias" não significa que eles não têm uma estrutura sólida.
fonte
Você provavelmente está se referindo à versão antiga do yesod. As versões mais recentes do yesod têm uma sintaxe simples para html, javascript e css.
A sintaxe html do hamlet da biblioteca de modelos do yesod é html simples com tags completas de abertura e fechamento e todos os atributos normais de html. Sim, você pode omitir as tags de fechamento e usar atalhos para atributos de identificação e classe. Mas você não precisa. Você pode continuar escrevendo html simples.
Não apenas isso, mas os modelos html, podem residir em arquivos separados, assim como na biblioteca de modelos do Snap, Heist.
Modelos de script Java (julius) são arquivos javascript simples, também residindo em arquivos separados.
O modelo css realmente tem uma sintaxe diferente, mas a versão recente do yesod agora também fornece uma sintaxe css simples.
Se você optar pelo Heist, não terá URLs de tipo seguro.
No Heist, os modelos html são sempre lidos no disco rígido. O Yesod compila todos os modelos diretamente no executável. Nenhum arquivo é lido do disco rígido. Assim, a resposta é muito mais rápida. Você pode ver os benchmarks você mesmo.
No Yesod, você pode criar widgets que cooperem bem. O Snap não lida com widgets. Você terá que rolar o seu próprio.
fonte