Порівняння веб-рамок Snake та Yesod Haskell


231

Останніми новинами двох веб-рамок Haskell є Yesod (у 0,8) та Snap (у 0,4).

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

Отже, я хотів би зрозуміти, чого мені не вистачає, якби я пішов із Snap замість цього. Наприклад, не схожа на підтримку бази даних. Як щодо сеансів? Інші особливості?


138
Особисто я не витримую синтаксису, який html використовує для html;)
Rehno Lindeque

2
що вам не подобається в синтаксисі шаблону для обшивки для генерації html?
mxc

6
Мені не подобається, що я не можу переміщатися між Dreamweaver та Yesod, оскільки синтаксис інший.
Мучин

6
Загалом, команда Yesod дуже відкрита до нових ідей. Тепер, коли я знаю ваш випадок використання, я, напевно, можу порекомендувати гарне рішення для вас. Було б найкраще, якщо ви надішлете електронний лист до списку веб-розробників, оскільки ТАК не найкраще місце для спільної дискусії.
Майкл Снайман

76
Люди все ще використовують Dreamweaver? ;)
ОВ.

Відповіді:


236

Повне розкриття: Я один з провідних розробників Snap.

Перш за все, поговоримо про те, що таке Snap. Зараз команда Snap підтримує п'ять різних проектів щодо злому: snap-core, snap-сервер, heist, snap та xmlhtml. snap-сервер - це веб-сервер, який відкриває API, визначений snap-core. heist - це шаблонна система. xmlhtml - це бібліотека для аналізу та рендерингу XML / HTML, що використовується heist. snap - це парасольковий проект, який склеює їх усі разом і надає потужний API Snapsts, який робить веб-додатки зручними та модульними.

У Йесода є безліч проектів щодо злому. Більшість із них (усі?) Занесені до категорії Йесода . Деякі з найзначніших з них - це дайд-енд, варп, стійкий і хутір.

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

Однак, два проекти безумовно мають певні відмінності. Найбільша відмінність, яку я можу відмітити об’єктивно, полягає в тому, що проекти Yesod зазвичай широко використовують шаблон Haskell Template і квазіцитування для створення стислих DSL, в той час як Snap-проекти дотримуються побудови бібліотек-комбінаторів, що сприяють композиційності. Щодо будь-яких інших розбіжностей, на які я можу подумати, вони будуть суб'єктивно упередженими щодо Snap. Пакети парасольок, названі за обома проектами, очевидно, будуть робити конкретний вибір для вищезгаданих компонентів, і ці варіанти будуть відображені в залежності від проекту. Але це все ще не означає, що ви не можете втягнути щось інше і використовувати його також.

У Snap є сеанси та автентифікація , інтерфейси до декількох баз даних та приємна обробка форми ( тут і тут ) з використанням тракторних функторів, що включає попередньо підготовлену підтримку для довільно вкладених динамічно перебірних списків. Це лише деякі з зростаючої екосистеми підключуваних пластівців . Знімки сеансів та аутентифікації записуються таким чином, що є зворотним агностиком. Таким чином, з невеликою кількістю коду клею, ви повинні мати можливість використовувати його майже з будь-якою системою стійкості, яку ви можете придумати. Надалі Snap буде дотримуватися цієї політики якомога частіше.

Здебільшого я вважаю, що вибір Snap vs Yesod проти Happstack - це не менша проблема, а більше особистий смак. Кожен раз, коли хтось скаже, що в одній з фреймворків немає чогось іншого, в більшості випадків буде досить легко витягнути недолік функціональності з іншого фреймворку, імпортуючи необхідний пакет.

EDIT: Для більш детального порівняння великих трьох веб-рамок Haskell ознайомтеся з моєю недавньою публікацією в блозі . Для більш чіткого (але, можливо, більш корисного) порівняння з використанням більш широких узагальнень див. Мою матрицю порівняння веб-рамок Haskell


34
Подвійний характер доброзичливої ​​конкуренції та поєднання матчів у веб-розробці Haskell здається дуже перспективним. Однак, я б рекомендував одразу перейти на автоматичний перелом. Сеанси та автентифікація - велика справа.
Ден Бертон

2
У Yesod також є інтерфейс до mongodb для постійних.
mxc

4
Швидкість розвитку впливає на мене, звідси і це питання. Це дуже схоже на те, що Йесод має функції додавання імпульсу вперед, поки 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 і використовуйте # {...} і @ {...} для інтерполяції так само, як Гамлет / Кассій / Юлій. Гніздування також підтримується, але це потребує трохи більше місця для пояснення, ніж цей коментар;). Якщо ви надсилаєте електронний лист із веб-розробки, ми можемо надати вам детальніше там, поки документація наздожене.
Майкл Снайман

Будь-яка зміна для використання Juliusбез стискання коду? Я usig, Google Closureі мені потрібно зберігати метадані в коментарях до компілятора.
Андрас Дьомрей

1
Я не думаю, що це вдале місце для обговорення подібного, але немає необхідності стискати код Юліуса (він не робить це за замовчуванням). Якщо вам потрібна додаткова допомога, кращим варіантом буде окреме запитання щодо запитань SO або посилання списку розсилки.
Майкл Снайман

29

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

Крім того, чому б не використовувати Happstack? Просто те, що вони не "в новинах", не означає, що вони не мають міцних рамок.


21
утримувач Yesod пропонує спробувати конкуруючі рамки спробувати. яка у нас велика громада.
mxc

12

Ви, мабуть, посилаєтесь на стару версію yesod. Останні версії yesod мають звичайний синтаксис для html, javascript та css.

Синтаксис html хутора бібліотеки шаблонів Yesod - це звичайний html із повним тегом відкриття та закриття та всіма нормальними атрибутами html. Так, ви можете опускати теги закриття та використовувати ярлики для атрибутів id та класу. Але не треба. Ви можете продовжувати писати звичайний html.

Мало того, що шаблони HTML можуть розміщуватися в окремих файлах, як і в бібліотеці Snap's Heist Heist.

Шаблони сценаріїв Java (julius) - це звичайні файли javascript, які також містяться в окремих файлах.

Шаблон css дійсно має інший синтаксис, але останній варіант yesod тепер також пропонує звичайний синтаксис css.

Якщо ви їдете з Heist, у вас не буде безпечних URL-адрес.

У Heist шаблони HTML щоразу читаються з жорсткого диска. Yesod збирає всі шаблони безпосередньо у виконуваний файл. Жоден файл не читається з жорсткого диска. Таким чином, реакція набагато швидша. Ви можете самі бачити орієнтири.

У Yesod ви можете створювати віджети, які добре співпрацюють. Snap взагалі не займається віджетами. Вам доведеться закатати своє.


1
Як я описав вище, ваш коментар щодо безпечних URL-адрес типу є невірним і допомагає увічнити помилку, про яку я згадую. Було б точніше, якби ви сказали "Heist" замість "Snap".
mightybyte

3
Безпечні URL-адреси типу можливі завдяки комбінації механізму шаблону І механізму маршрутизації. Тож це не тільки Хейст. Ви не отримаєте безпечні URL-адреси типу Snap просто за допомогою Hamlet.
Вагіф Верді

1
Я не кажу про хутір. Пакет веб-маршрутів спочатку був написаний для Happstack, який по суті має той же інтерфейс маршрутизації, що і Snap. Можливо, вам знадобиться невеликий код клею, але це, як правило, завжди так.
mightybyte

4
Я б не робив такого маленького сенсу, що "клей-код". Шаблон Haskell, про який ви посилаєтесь нижче, робить те, що цей "клей-код" можливий у безпечному, стислій формі. Я написав невеличку публікацію в блозі на адресу: yesodweb.com/blog/yesod-template-haskell
Michael Snoyman

3
Для тих, хто хоче піти з іншим (більш слабким, але гнучкішим) шаблоновим підходом, HStringTemplate також добре грає з усіма рамками, наскільки я знаю, і дозволяє читати шаблони на льоту для розробки, кешуючи їх для виробництва, а також компілюючи за бажанням за допомогою квазіцитації. Підтримка qq, можливо, 13 рядків, і я не сумніваюся, heist міг би її додати тривіально, якби був попит.
sclv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.