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

Две веб-платформы Haskell, о которых недавно говорилось в новостях, - это Yesod (на 0.8) и Snap (на уровне 0,4).

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

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


person Muchin    schedule 13.04.2011    source источник
comment
Лично я терпеть не могу синтаксис, который html использует для html;)   -  person Rehno Lindeque    schedule 13.04.2011
comment
что вам не нравится в синтаксисе шаблона hamlet для генерации html?   -  person mxc    schedule 13.04.2011
comment
Мне не нравится, что я не могу переключаться между Dreamweaver и Yesod, потому что синтаксис отличается.   -  person Muchin    schedule 14.04.2011
comment
В целом команда Yesod очень открыта для новых идей. Теперь, когда я знаю ваш вариант использования, я, вероятно, могу порекомендовать вам хорошее решение. Было бы лучше, если бы вы отправили электронное письмо в список веб-разработчиков, поскольку SO - не лучшее место для совместного обсуждения.   -  person Michael Snoyman    schedule 14.04.2011
comment
Люди все еще используют Dreamweaver? ;)   -  person OJ.    schedule 18.04.2011
comment
Почему этот вопрос был помечен как веб-сервисы?   -  person gawi    schedule 10.10.2011
comment
Хороший вопрос, который можно было бы закрыть в мгновение ока, если бы его задали сегодня. К сожалению, больше нет места для наводящих на размышления вопросов по SO.   -  person Abhijit Sarkar    schedule 18.12.2017
comment
Я изучил Python через Django и пытаюсь сделать то же самое с Haskell, не уверен, возможно ли это :(   -  person varnothing    schedule 14.05.2021


Ответы (4)


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

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

У Yesod есть множество проектов по взлому. Большинство (все?) Из них перечислены в категории Yesod. Некоторые из наиболее заметных - это yesod-core, warp, persistent и hamlet.

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

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

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

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

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

person Community    schedule 13.04.2011
comment
Двойная природа дружеского соревнования и сочетания и совпадения в веб-разработке на Haskell кажется очень многообещающей. Тем не менее, я бы порекомендовал как можно скорее получить оснастку для взлома. Сеансы и аутентификация - это большое дело. - person Dan Burton; 13.04.2011
comment
Yesod также имеет еще не выпущенный интерфейс к mongodb для постоянного использования. - person mxc; 14.04.2011
comment
На меня влияет скорость развития, отсюда и вопрос. Похоже, что у Yesod есть прогресс в добавлении функций, в то время как Snap остался на прежнем уровне. Я просто не знаю, каковы новые функции, с тех пор, как впервые услышал об этом 6+ месяцев назад. - person Muchin; 14.04.2011
comment
Snap имеет неплохую динамику. Во-первых, это был самый загружаемый веб-фреймворк в прошлом году, хотя публично проект не запускался до мая. Во-вторых, после выпуска версии 0.3 в декабре мы наблюдаем большой рост активности. Библиотеки для сессий, auth, mongoDB, библиотека xmlhtml и многое другое разрабатываются людьми, которые по большей части являются новыми участниками в 2011 году. Обычно вы также можете найти 30 или более человек на IRC-канале #snapframework. Это определенно активный проект. - person mightybyte; 14.04.2011
comment
О, в феврале у нас также было 6 человек на Snap Summit в Нью-Йорке. Один даже прилетел из другого штата за очень короткий срок с единственной целью - взломать Snap. - person mightybyte; 14.04.2011
comment
@Muchin - Я подозреваю, что множество обсуждений yesod происходит в списке веб-разработчиков, а не в списке для конкретного проекта, так что это создает определенное впечатление. Кстати, может быть, у yesod нужен собственный список? - person sclv; 16.04.2011
comment
Из двух я выбрал Snap просто потому, что в то время он, казалось, имел больший импульс. Я был очень впечатлен качеством компонентов. Heist имеет красивый простой и чистый дизайн, который, вероятно, является лучшей системой шаблонов, которую я видел в любом веб-фреймворке на любом языке, который я использовал. С монадами Snap легко работать, и они ведут себя примерно так, как и следовало ожидать, то есть никаких неприятных сюрпризов. Я просто хочу, чтобы они стандартизировали либо ByteStrings, либо Text, поскольку вы постоянно конвертируете между ними! - person Andrew; 26.01.2012

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

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

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

person Michael Snoyman    schedule 13.04.2011
comment
Он очень новый, у меня еще не было возможности обновить документацию. Но в основном просто введите обычный CSS и используйте # {...} и @ {...} для интерполяции, как Hamlet / Cassius / Julius. Вложенность также поддерживается, но для объяснения этого потребуется немного больше места, чем в этом комментарии;). Если вы отправите электронное письмо веб-разработчику, мы сможем предоставить вам более подробную информацию, пока документация будет догонять. - person Michael Snoyman; 14.04.2011
comment
Есть ли какие-либо изменения в использовании Julius без сжатия кода? Я использую Google Closure, и мне нужно сохранить метаданные в комментариях для компилятора. - person Andras Gyomrey; 21.11.2014
comment
Я не думаю, что это хорошее место для обсуждения таких вещей, но нет необходимости в сжатии кода Julius (по умолчанию он этого не делает). Если вам нужна дополнительная помощь, лучше выбрать отдельный вопрос SO или ветку списка рассылки. - person Michael Snoyman; 22.11.2014

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

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

person Greg Weber    schedule 13.04.2011
comment
Сопровождающий yesod предлагает попробовать конкурирующий фреймворк. какое у нас отличное сообщество. - person mxc; 06.09.2013

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

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

Не только это, но и шаблоны html могут находиться в отдельных файлах, как в библиотеке шаблонов Snap Heist.

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

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

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

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

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

person Vagif Verdi    schedule 13.04.2011
comment
Как я описал выше, ваш комментарий о типобезопасных URL-адресах неверен и помогает закрепить заблуждение, о котором я упоминал. Было бы точнее, если бы вы сказали «Ограбление» вместо «Snap». - person mightybyte; 13.04.2011
comment
Типобезопасные URL-адреса возможны благодаря комбинации механизма шаблонов И механизма маршрутизации. Так что это не только ограбление. Вы не получите безопасные URL-адреса в Snap, просто используя hamlet. - person Vagif Verdi; 13.04.2011
comment
Я не говорю о Гамлете. Пакет веб-маршрутов изначально был написан для Happstack, который имеет, по сути, тот же интерфейс маршрутизации, что и Snap. Вам, вероятно, понадобится немного связующего кода, но так будет всегда. - person mightybyte; 13.04.2011
comment
Я согласен с тем, что веб-фреймворки haskell больше похожи на компиляции библиотек, которые можно легко рекомбинировать новыми способами. - person Vagif Verdi; 14.04.2011
comment
Я бы не стал придавать значения этому клеящему коду. Шаблон Haskell, на который вы ссылаетесь ниже, делает этот связующий код безопасным и кратким. Я написал небольшое сообщение в блоге, посвященное этому: yesodweb.com/blog/yesod-template- haskell - person Michael Snoyman; 14.04.2011
comment
Для тех, кто хочет использовать другой (более слабый, но более гибкий) подход к созданию шаблонов, HStringTemplate также хорошо работает со всеми фреймворками, насколько мне известно, и позволяет читать шаблоны на лету для разработки, кэшировать их для производства, а также компилировать при желании можно ввести их через квазиквотирование. Поддержка qq составляет примерно 13 строк, и я не сомневаюсь, что ограбление могло бы добавить ее тривиально, если бы был спрос. - person sclv; 14.04.2011