Сравнение веб-фреймворков Haskell's Snap и Yesod - PullRequest
229 голосов
/ 13 апреля 2011

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

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

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

Ответы [ 4 ]

236 голосов
/ 13 апреля 2011

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

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

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

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

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

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

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

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

222 голосов
/ 13 апреля 2011

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

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

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

29 голосов
/ 13 апреля 2011

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

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

12 голосов
/ 13 апреля 2011

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

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

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

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

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

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

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

В Yesod вы можете создавать удобные виджеты.Snap не работает с виджетами вообще.Вам придется бросить свой собственный.

...