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?
Odpowiedzi:
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
źródło
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ą.
źródło
Julius
bez kompresji kodu? Jestem usigGoogle Closure
i muszę zachować metadane w komentarzach do kompilatora.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.
źródło
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.
źródło