Сравнение веб-фреймворков Haskell's Snap и Yesod

231

Недавно в новостях появились две веб-платформы Haskell: Yesod (0,8) и Snap (0,4).

Совершенно очевидно, что в настоящее время Yesod поддерживает гораздо больше функций, чем Snap. Тем не менее, я не выношу синтаксис, используемый Yesod для его HTML, CSS и Javascript.

Итак, я хотел бы понять, чего бы мне не хватало, если бы я использовал Snap. Например, не похоже, что поддержка баз данных есть. Как насчет сессий? Другие свойства?

Мухин
источник
138
Лично я не
выношу
2
что вам не нравится в синтаксисе шаблона деревушки для генерации html?
mxc
6
Мне не нравится, что я не могу перемещаться между Dreamweaver и Yesod, потому что синтаксис другой.
Мучин
6
В целом, команда Yesod очень открыта для новых идей. Теперь, когда я знаю ваш вариант использования, я, вероятно, могу порекомендовать вам хорошее решение. Было бы лучше, если бы вы отправили электронное письмо в список веб-разработчиков, так как SO не лучшее место для совместной дискуссии.
Майкл Снойман
76
Люди все еще используют Dreamweaver? ;)
О.Дж.

Ответы:

236

Полное раскрытие: я один из ведущих разработчиков Snap.

Прежде всего, давайте поговорим о том, что такое Snap. В данный момент команда Snap поддерживает пять различных проектов по взлому: snap-core, snap-server, heist, snap и xmlhtml. Snap-сервер - это веб-сервер, который предоставляет API, определенный Snap-Core. ограбление - это система шаблонов. xmlhtml - это библиотека парсинга и рендеринга XML / HTML, используемая heist. Snap - это зонтичный проект, который склеивает их все вместе и предоставляет мощный API-интерфейс Snaplets, который делает веб-приложения компонуемыми и модульными.

У Yesod есть множество проектов по взлому. Большинство (все?) Из них перечислены в категории Йесод . Некоторые из известных - это Yesod-Core, Warp, Persistent и Hamlet.

Реальность веб-разработки на Haskell заключается в том, что это гораздо менее эксклюзивный выбор, чем кажется на первый взгляд. В целом, проекты очень слабо связаны и достаточно взаимозаменяемы. Вы можете создать веб-сайт, используя warp (веб-сервер команды Yesod), heist (система шаблонов команды Snap) и acid-state (система персистентности проекта Happstack). Вы также можете использовать Snap-сервер с деревом или постоянным.

Тем не менее, два проекта определенно имеют некоторые различия. Самое большое различие, на которое я могу объективно отметить, состоит в том, что проекты Yesod обычно интенсивно используют Template Haskell и квазиквотирование для создания кратких DSL, в то время как проекты Snap придерживаются создания библиотек комбинаторов, которые способствуют компоновке. Любые другие различия, о которых я могу думать, будут субъективно смещены в сторону Snap. Пакеты зонтиков, названные в честь обоих проектов, очевидно, сделают определенный выбор для вышеупомянутых компонентов, и этот выбор будет отражен в зависимостях проекта. Но это еще не значит, что вы не можете использовать что-то другое и использовать это.

Snap имеет сессии и аутентификацию , интерфейсы к нескольким базам данных и удобную обработку форм ( здесь и здесь) ) с использованием функций пищеварительного тракта, которые включают в себя готовую поддержку произвольно вложенных динамически изменяемых размеров списков. Это лишь часть растущей экосистемы сменных защелок . Сессии и идентификаторы аутентификации написаны так, что не зависят от сервера. Таким образом, с небольшим количеством связующего кода вы сможете использовать его практически с любой системой персистентности, о которой вы только можете подумать. В будущем Snap будет придерживаться этой политики как можно чаще.

По большей части я думаю, что выбор Snap против Yesod против Happstack - это не столько вопрос возможностей, сколько вопрос личного вкуса. Всякий раз, когда кто-то говорит, что в одной из фреймворков нет чего-то, что есть у другой, большую часть времени будет довольно легко извлечь недостающую функциональность из другой фреймворк, импортировав необходимый пакет.

РЕДАКТИРОВАТЬ: Для более подробного сравнения трех основных веб-фреймворков Haskell посмотрите мой недавний пост в блоге . Более грубое (но, возможно, более полезное) сравнение с использованием более широких обобщений см. В моей сравнительной матрице Haskell Web Framework

mightybyte
источник
34
Двойственная природа дружеского соревнования и смешивания и сопоставления в веб-разработке на Haskell кажется очень многообещающей. Тем не менее, я бы порекомендовал получить Snap-Auth, чтобы взломать как можно скорее. Сессии и аутентификация имеют большое значение.
Дэн Бертон,
2
У Yesod также есть еще не выпущенный интерфейс для mongodb для постоянного доступа.
mxc
4
На меня влияет скорость развития, отсюда и этот вопрос. Похоже, что у Yesod есть новые возможности для добавления импульса, в то время как Snap остается на прежнем уровне. Я просто не знаю, каковы новые функции, так как я впервые услышал об этом 6+ месяцев назад.
Мучин
3
Snap имеет довольно хороший импульс. Прежде всего, это был самый загруженный веб-фреймворк в прошлом году, хотя проект не был запущен публично до мая. Во-вторых, с момента выхода 0.3 в декабре мы наблюдаем значительное увеличение активности. Над библиотеками для сессий, auth, mongoDB, библиотекой xmlhtml и многим другим работают люди, которые по большей части являются новыми участниками в 2011 году. Обычно вы также можете найти 30 или более человек на IRC-канале #snapframework. Это определенно активный проект.
Mightybyte
2
Из двух, которые я использовал для Snap, просто потому, что в то время он, казалось, имел больший импульс. Я был очень впечатлен качеством компонентов. Heist имеет красивый простой и чистый дизайн, который, вероятно, является лучшей системой шаблонов, которую я видел в любой веб-среде на любом языке, который я использовал. С монадами Snap легко работать, и они ведут себя почти так же, как и следовало ожидать, то есть никаких неприятных сюрпризов. Я просто хотел бы, чтобы они стандартизировали либо ByteStrings, либо Text, поскольку вы постоянно конвертируете между ними!
Андрей
223

Справедливое предупреждение: я ведущий разработчик Yesod.

Я не уверен, что вам не нравится в синтаксисе Javascript: это простой javascript с переменной интерполяцией. Что касается CSS, у Yesod теперь есть Lucius, который позволяет вам также использовать простой CSS. Для HTML вы можете легко использовать любую другую библиотеку, в том числе Heist (которую использует Snap). Тем не менее, это немного забавно пропустить Yesod из-за синтаксиса CSS / Javascript, когда у Snap даже нет синтаксиса для него. Вы, конечно, добро пожаловать в их решение только статических файлов.

Yesod поставляется с полной поддержкой аутентификации / авторизации, безопасных для типов URL-адресов, виджетов, электронной почты и множества мелких вещей повсюду (хлебные крошки, сообщения, конечный пункт назначения). Кроме того, у Yesod есть довольно богатый набор дополнительных пакетов для таких вещей, как комментарии и уценка, а также несколько больших реальных кодовых баз, которые можно выбрать для примера. Если какой-либо из них привлекателен для вас, вы можете проверить, поддерживают ли его альтернативы.

Майкл Снойман
источник
Это очень новое, у меня еще не было возможности обновить документацию. Но в основном просто введите обычный CSS и используйте # {...} и @ {...} для интерполяции, как Гамлет / Кассий / Юлий. Также поддерживается вложение, но это займет немного больше места для объяснения, чем этот комментарий;). Если вы отправите электронное письмо по адресу web-devel, мы можем предоставить вам более подробную информацию, пока документация уточняется.
Майкл Снойман
Любое изменение, чтобы использовать Juliusбез сжатия кода? Я использую Google Closureи мне нужно хранить метаданные в комментариях для компилятора.
Андрас Гомрей
1
Я не думаю, что это хорошее место для обсуждения подобных вещей, но нет необходимости в сжатии кода Julius (он не делает это по умолчанию). Если вам нужна дополнительная помощь, лучше подойдет отдельный вопрос SO или ветка списка рассылки.
Майкл Снойман
29

Дают деревушка пытаясь угадать вы могли бы в конечном итоге нравиться. Негативная реакция на поверхностном уровне не редкость. Однако никто, кто на самом деле использовал деревню, не жалуется.

Кроме того, почему бы не использовать Happstack? То, что они не «в новостях», не означает, что у них нет прочной основы.

Грег Вебер
источник
21
Сопровождающий Йесода предлагает попробовать конкурирующую систему. какое замечательное сообщество у нас есть.
mxc
12

Вы, вероятно, имеете в виду старую версию yesod. Последние версии yesod имеют простой синтаксис html, javascript и css.

Синтаксис html селектора библиотеки шаблонов yesod представляет собой простой html с полными открывающими и закрывающими тегами и всеми обычными HTML-атрибутами. Да, вы можете опустить закрывающие теги и использовать ярлыки для атрибутов id и class. Но вы не должны. Вы можете продолжать писать простой HTML.

Мало того, что HTML-шаблоны могут находиться в отдельных файлах, как в библиотеке шаблонов Snap в Heist.

Шаблоны сценариев Java (julius) представляют собой простые файлы javascript, также находящиеся в отдельных файлах.

Шаблон CSS действительно имеет другой синтаксис, но недавняя версия yesod теперь предоставляет также простой синтаксис CSS.

Если вы пойдете с Heist, у вас не будет типовых безопасных URL.

В Heist HTML-шаблоны читаются с жесткого диска каждый раз. Yesod компилирует все шаблоны непосредственно в исполняемый файл. Файл не читается с жесткого диска. Таким образом, ответ намного быстрее. Вы можете увидеть тесты самостоятельно.

В Yesod вы можете создавать виджеты, которые хорошо взаимодействуют. Snap не работает с виджетами вообще. Вы должны будете катиться самостоятельно.

Вагиф Верди
источник
1
Как я описал выше, ваш комментарий о безопасных URL-адресах типа неправильный и помогает увековечить заблуждение, о котором я упоминаю. Было бы точнее, если бы вы сказали «Heist» вместо «Snap».
mightybyte
3
Тип безопасных URL-адресов возможен благодаря комбинации механизма шаблонов и механизма маршрутизации. Так что это не только ограбление. Вы не сможете получить безопасные URL-адреса в Snap только при использовании деревушки.
Вагиф Верди
1
Я не говорю о деревне. Пакет веб-маршрутов изначально был написан для Happstack, который по сути имеет тот же интерфейс маршрутизации, что и Snap. Вам, вероятно, понадобится немного связующего кода, но так будет всегда.
могучий байт
4
Я бы не стал так мелочиться в этом «клеевом коде». Шаблон Haskell, на который вы ссылаетесь ниже, делает этот «клейкий код» возможным безопасным и лаконичным способом. Я написал небольшое сообщение в блоге по этому адресу: yesodweb.com/blog/yesod-template-haskell
Майкл Снойман,
3
Для тех, кто хочет использовать другой (более слабый, но более гибкий) шаблонный подход, насколько я знаю, HStringTemplate также хорошо работает со всеми фреймворками и позволяет на лету читать шаблоны для разработки, кэшировать их для производства, а также компилировать их через квазиквотацию, если хотите. Поддержка qq - это, возможно, 13 строк, и я не сомневаюсь, что ограбление можно было бы добавить тривиально, если бы был спрос.
sclv