Недавно в новостях появились две веб-платформы Haskell: Yesod (0,8) и Snap (0,4).
Совершенно очевидно, что в настоящее время Yesod поддерживает гораздо больше функций, чем Snap. Тем не менее, я не выношу синтаксис, используемый Yesod для его HTML, CSS и Javascript.
Итак, я хотел бы понять, чего бы мне не хватало, если бы я использовал Snap. Например, не похоже, что поддержка баз данных есть. Как насчет сессий? Другие свойства?
Ответы:
Полное раскрытие: я один из ведущих разработчиков 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
источник
Справедливое предупреждение: я ведущий разработчик Yesod.
Я не уверен, что вам не нравится в синтаксисе Javascript: это простой javascript с переменной интерполяцией. Что касается CSS, у Yesod теперь есть Lucius, который позволяет вам также использовать простой CSS. Для HTML вы можете легко использовать любую другую библиотеку, в том числе Heist (которую использует Snap). Тем не менее, это немного забавно пропустить Yesod из-за синтаксиса CSS / Javascript, когда у Snap даже нет синтаксиса для него. Вы, конечно, добро пожаловать в их решение только статических файлов.
Yesod поставляется с полной поддержкой аутентификации / авторизации, безопасных для типов URL-адресов, виджетов, электронной почты и множества мелких вещей повсюду (хлебные крошки, сообщения, конечный пункт назначения). Кроме того, у Yesod есть довольно богатый набор дополнительных пакетов для таких вещей, как комментарии и уценка, а также несколько больших реальных кодовых баз, которые можно выбрать для примера. Если какой-либо из них привлекателен для вас, вы можете проверить, поддерживают ли его альтернативы.
источник
Julius
без сжатия кода? Я используюGoogle Closure
и мне нужно хранить метаданные в комментариях для компилятора.Дают деревушка пытаясь угадать вы могли бы в конечном итоге нравиться. Негативная реакция на поверхностном уровне не редкость. Однако никто, кто на самом деле использовал деревню, не жалуется.
Кроме того, почему бы не использовать Happstack? То, что они не «в новостях», не означает, что у них нет прочной основы.
источник
Вы, вероятно, имеете в виду старую версию 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 не работает с виджетами вообще. Вы должны будете катиться самостоятельно.
источник