Porównywanie struktur sieciowych Snap i Yesod firmy Haskell

231

Dwie frameworki internetowe Haskell w wiadomościach to ostatnio Yesod (w wersji 0,8) i Snap (w wersji 0,4).

To oczywiste, że Yesod obsługuje obecnie o wiele więcej funkcji niż Snap. Jednak nie mogę znieść składni, której używa Yesod w swoich HTML, CSS i JavaScript.

Tak więc chciałbym zrozumieć, czego bym przegapił, gdybym zamiast tego poszedł z Snapem. Na przykład nie wygląda na to, że istnieje obsługa bazy danych. Co powiesz na sesje? Inne funkcje?

Muchin
źródło
138
Osobiście nie mogę znieść składni, której używa html dla html;)
Rehno Lindeque,
2
czego nie lubisz w składni szablonu Hamleta do generowania HTML?
MXC
6
Nie podoba mi się to, że nie mogę poruszać się między Dreamweaver a Yesod, ponieważ składnia jest inna.
Muchin
6
Ogólnie rzecz biorąc, zespół Yesod jest bardzo otwarty na nowe pomysły. Teraz, gdy znam Twój przypadek użycia, prawdopodobnie mogę polecić Ci dobre rozwiązanie. Byłoby najlepiej, gdybyś wysłał wiadomość e-mail na listę rozwijaną przez Internet, ponieważ SO nie jest najlepszym miejscem do wspólnej dyskusji.
Michael Snoyman
76
Ludzie nadal używają Dreamweaver? ;)
Dz.U.

Odpowiedzi:

236

Pełne ujawnienie: jestem jednym z głównych programistów Snap.

Przede wszystkim porozmawiajmy o tym, czym jest Snap. W tej chwili zespół Snap utrzymuje pięć różnych projektów dotyczących hakowania: Snap-Core, Snap-Server, Heist, Snap i xmlhtml. Snap-Server to serwer WWW, który udostępnia interfejs API zdefiniowany przez Snap-Core. Heist to system szablonów. xmlhtml to biblioteka parsująca i renderująca XML / HTML używana przez napad. snap to parasolowy projekt, który skleja je wszystkie razem i zapewnia potężny interfejs API snapletów, który sprawia, że ​​aplikacje internetowe można komponować i modułowo.

Yesod ma wiele projektów dotyczących włamań. Większość (wszystkie?) Z nich znajduje się w kategorii Yesod . Niektóre z nich to rdzeń Yesod, Warp, Trwały i Hamlet.

Rzeczywistość tworzenia stron internetowych Haskell polega na tym, że jest to w mniejszym stopniu wybór wyłączny lub wybór, niż się wydaje. Ogólnie rzecz biorąc, projekty są bardzo luźno powiązane i dość wymienne. Możesz zbudować stronę internetową przy użyciu warp (serwer sieciowy zespołu Yesod), napadu (system szablonów zespołu Snap) i stanu kwasowego (system trwałości projektu Happstack). Możesz także użyć serwera Snap z serwerem Hamlet lub stałym.

To powiedziawszy, dwa projekty zdecydowanie mają pewne różnice. Największą różnicą, na którą mogę obiektywnie wskazać, jest to, że projekty Yesod zwykle wykorzystują szablon Haskell i quasiquotowanie do tworzenia zwięzłych DSL, podczas gdy projekty Snap trzymają się budowania bibliotek kombinatorycznych, które sprzyjają kompozycyjności. Wszelkie inne różnice, o których mogę myśleć, będą subiektywnie tendencyjne w stosunku do Snap. Pakiety parasolowe nazwane po obu projektach oczywiście dokonają konkretnych wyborów dla wyżej wymienionych komponentów, a te wybory zostaną odzwierciedlone w zależnościach projektu. Ale to wciąż nie oznacza, że ​​nie możesz wciągnąć czegoś innego i również z tego skorzystać.

Snap ma sesje i uwierzytelnianie , interfejsy do kilku baz danych oraz ładną obsługę formularzy ( tu i tutaj ) przy użyciu funktorów trawiennych, które obejmują wstępnie spakowane wsparcie dla dowolnie zagnieżdżonych dynamicznie list o dużych rozmiarach. To tylko niektóre z rosnącego ekosystemu zatrzaskowych wtykowych . Snaplety sesji i uwierzytelniania są pisane w sposób niezależny od zaplecza. Tak więc przy niewielkiej ilości kodu kleju powinieneś być w stanie używać go z każdym systemem trwałości, jaki możesz wymyślić. W przyszłości Snap będzie trzymał się tej zasady tak często, jak to możliwe.

W przeważającej części uważam, że wybór Snap vs Yesod vs Happstack jest w mniejszym stopniu kwestią funkcji, a bardziej osobistym gustem. Ilekroć ktoś mówi, że jeden z frameworków nie ma czegoś, co ma inny, przez większość czasu bardzo łatwo będzie pobrać brakującą funkcjonalność z drugiego frameworka, importując niezbędny pakiet.

EDYCJA: Aby uzyskać bardziej szczegółowe porównanie dużych trzech frameworków Haskell, zajrzyj do mojego ostatniego posta na blogu . Aby uzyskać bardziej surowe (ale być może bardziej użyteczne) porównanie przy użyciu szerszych uogólnień, zobacz moją matrycę porównawczą Web Framework Haskell

sekundę
źródło
34
Podwójna natura przyjaznej rywalizacji i mieszania elementów w tworzeniu stron internetowych Haskell wydaje się bardzo obiecująca. To powiedziawszy, polecam przełączyć się na authapowanie, aby jak najszybciej zhakować. Sesje i uwierzytelnianie to wielka sprawa.
Dan Burton,
2
Yesod ma również jeszcze nieopublikowany interfejs do mongodb dla trwałego.
mxc
4
Szybkość rozwoju ma na mnie wpływ, stąd to pytanie. Wygląda to tak, jakby Yesod miał funkcje dodawania pędu do przodu, podczas gdy Snap pozostał w zastoju. Po prostu nie wiem od razu, jakie są nowe funkcje, odkąd po raz pierwszy usłyszałem o tym ponad 6 miesięcy temu.
Muchin
3
Snap ma całkiem niezły rozpęd. Przede wszystkim była to najczęściej pobierana platforma internetowa poświęcona hakowaniu w zeszłym roku, mimo że projekt nie został publicznie uruchomiony do maja. Po drugie, od wydania wersji 0.3 w grudniu zaobserwowaliśmy duży wzrost aktywności. Biblioteki do sesji, auth, mongoDB, biblioteka xmlhtml i inne są opracowywane przez ludzi, którzy w większości są nowymi autorami w 2011 roku. Zwykle można znaleźć 30 lub więcej osób na kanale IRC #snapframework. To zdecydowanie aktywny projekt.
mightybyte
2
Z dwóch, które wybrałem dla Snapa, po prostu dlatego, że wtedy wydawało się, że ma ono większy impet. Jestem pod ogromnym wrażeniem jakości komponentów. Heist ma pięknie prosty i przejrzysty wygląd, który jest prawdopodobnie najlepszym systemem szablonów, jaki widziałem w dowolnym frameworku internetowym w dowolnym języku, którego użyłem. Monady Snap są łatwe w obsłudze i zachowują się tak, jak można się było spodziewać, tj. Żadnych nieprzyjemnych niespodzianek. Chciałbym tylko, aby ustandaryzowały się albo na ByteStrings, albo na Text, ponieważ ciągle się między nimi zmieniasz!
Andrew
223

Uczciwe ostrzeżenie: Jestem głównym programistą Yesod.

Nie jestem pewien, co ci się nie podoba w składni Javascript: jest to zwykły javascript ze zmienną interpolacją. Jeśli chodzi o CSS, Yesod ma teraz Luciusa, który pozwala również używać zwykłego CSS. W przypadku HTML możesz łatwo użyć dowolnej innej biblioteki, w tym napadu (tego, czego używa Snap). To powiedziawszy, trochę zabawne jest pominięcie składni Yesod nad składnią CSS / JavaScript, kiedy Snap nawet nie ma takiej składni. Z pewnością mile widziane jest ich rozwiązanie tylko plików statycznych.

Yesod zapewnia bezproblemową obsługę uwierzytelniania / autoryzacji, bezpieczne adresy URL, widżety, e-mail i kilka drobiazgów w całym miejscu (bułka tarta, wiadomości, ostateczne miejsce docelowe). Ponadto Yesod ma dość bogaty zestaw dodatków do komentowania i wyprzedaży, a także kilka dużych baz kodów w świecie rzeczywistym, na przykład do wyboru. Jeśli którykolwiek z nich jest dla Ciebie atrakcyjny, możesz sprawdzić, czy alternatywy je obsługują.

Michael Snoyman
źródło
Jest bardzo nowy, nie miałem jeszcze okazji zaktualizować dokumentacji. Ale w zasadzie wystarczy wpisać normalny CSS i użyć # {...} i @ {...} do interpolacji, podobnie jak Hamlet / Cassius / Julius. Obsługiwane jest również zagnieżdżanie, ale wyjaśnienie zajmie nieco więcej miejsca niż ten komentarz;). Jeśli prześlesz wiadomość e-mail na temat tworzenia stron internetowych, możemy podać ci więcej szczegółów, podczas gdy dokumentacja zostanie nadrobiona.
Michael Snoyman
Wszelkie zmiany w użyciu Juliusbez kompresji kodu? Jestem usig Google Closurei muszę zachować metadane w komentarzach do kompilatora.
Andras Gyomrey
1
Nie sądzę, że jest to dobre miejsce do omawiania takich rzeczy, ale nie ma wymogu kompresji kodu Juliusa (domyślnie tak nie jest). Jeśli potrzebujesz dodatkowej pomocy, lepszym rozwiązaniem byłoby osobne pytanie SO lub wątek listy adresowej.
Michael Snoyman
29

Spróbuj Hamleta - może ci się to spodobać. Negatywna reakcja na poziomie powierzchownym nie jest rzadka. Jednak nikt, kto faktycznie używał wioski, nie narzeka.

A dlaczego nie użyć Happstacka? To, że nie ma ich w wiadomościach, nie oznacza, że ​​nie mają solidnych ram.

Greg Weber
źródło
21
opiekun Yesod sugeruje wypróbowanie konkurencyjnych ram. jaką wspaniałą społeczność mamy.
mxc
12

Prawdopodobnie odwołujesz się do starej wersji yesod. Najnowsze wersje yesod mają prostą składnię dla html, javascript i css.

Składnia HTML Hamlet biblioteki szablonów Yesod to zwykły HTML z kompletnymi tagami otwierającymi i zamykającymi oraz wszystkimi normalnymi atrybutami HTML. Tak, możesz pominąć tagi zamykające i użyć skrótów dla atrybutów id i class. Ale nie musisz. Możesz kontynuować pisać zwykły HTML.

Ponadto szablony HTML mogą znajdować się w osobnych plikach, tak jak w bibliotece szablonów Snap w Heist.

Szablony skryptów Java (julius) to zwykłe pliki javascript, które również znajdują się w osobnych plikach.

Szablon css rzeczywiście ma inną składnię, ale najnowsza wersja yesod zapewnia teraz również zwykłą składnię css.

Jeśli wybierzesz Heist, nie będziesz mieć bezpiecznych adresów URL.

W Heist szablony HTML są odczytywane z dysku twardego za każdym razem. Yesod kompiluje wszystkie szablony bezpośrednio w pliku wykonywalnym. Żaden plik nie jest odczytywany z dysku twardego. Tak więc odpowiedź jest znacznie szybsza. Możesz sam zobaczyć testy porównawcze.

W Yesod możesz tworzyć widżety, które ładnie współpracują. Snap w ogóle nie obsługuje widżetów. Będziesz musiał rzucić własne.

Vagif Verdi
źródło
1
Jak opisałem powyżej, twój komentarz na temat bezpiecznych adresów URL jest niepoprawny i pomaga utrwalić wspomniane przeze mnie nieporozumienie. Byłoby bardziej dokładne, gdybyś powiedział „Napad” zamiast „Snap”.
mightybyte
3
Typ bezpiecznych adresów URL jest możliwy dzięki kombinacji silnika szablonu i mechanizmu routingu. Więc to nie tylko napad. Nie będziesz uzyskiwać bezpiecznych adresów URL w Snap tylko za pomocą Hamleta.
Vagif Verdi
1
Nie mówię o wiosce. Pakiet tras internetowych został pierwotnie napisany dla Happstacka, który ma zasadniczo ten sam interfejs routingu, co Snap. Prawdopodobnie będziesz potrzebować trochę kodu kleju, ale prawie zawsze tak będzie.
mightybyte
4
Nie zrobiłbym tak małego znaczenia tego „kodu kleju”. Szablon Haskell, o którym wspominasz poniżej, umożliwia ten „kod kleju” w bezpieczny, zwięzły sposób. Napisałem mały post na blogu, aby rozwiązać ten problem
Michael Snoyman
3
Dla tych, którzy chcą zastosować inne (słabsze, ale bardziej elastyczne) szablony, HStringTemplate również dobrze współpracuje ze wszystkimi frameworkami, o ile mi wiadomo, i pozwala na czytanie szablonów w locie do programowania, buforowanie ich do produkcji, a także kompilowanie w razie potrzeby quasi-cytowanie. Wsparcie dla qq ma może 13 linii i nie mam wątpliwości, że napad mógłby dodać go trywialnie, gdyby było zapotrzebowanie.
sclv