Haskell'in Snap ve Yesod web çerçevelerini karşılaştırma


231

Son zamanlarda haberlerde yer alan iki Haskell web çerçevesi Yesod (0.8'de) ve Snap (0.4'te).

Yesod'un şu anda Snap'ten çok daha fazla özelliği desteklediği oldukça açık. Ancak, Yesod'un HTML, CSS ve Javascript için kullandığı sözdizimine dayanamıyorum.

Bunun yerine Snap ile gidersem ne kaçırdığımı anlamak istiyorum. Örneğin, veritabanı desteği var gibi görünmüyor. Oturumlara ne dersiniz? Diğer özellikler?


138
Şahsen html html için kullandığı sözdizimi
duramıyorum

2
Html oluşturmak için hamlet şablon sözdizimi hakkında ne sevmiyorsunuz?
mxc

6
Sözdizimi farklı olduğu için Dreamweaver ve Yesod arasında hareket edemiyorum.
Muchin

6
Genel olarak, Yesod ekibi yeni fikirlere çok açık. Kullanım durumunuzu bildiğime göre, muhtemelen sizin için iyi bir çözüm önerebilirim. SO, ortak bir tartışma için en iyi yer olmadığı için web-geliştirici listesine bir e-posta gönderirseniz iyi olur.
Michael Snoyman

76
İnsanlar hala kullanmak Dreamweaver? ;)
OJ.

Yanıtlar:


236

Tam açıklama: Snap'in önde gelen geliştiricilerinden biriyim.

Her şeyden önce, Snap'in ne olduğu hakkında konuşalım. Şu anda Snap ekibi hackage'de beş farklı projeyi sürdürüyor: snap-core, snap-server, heist, snap ve xmlhtml. snap-server, snap-core tarafından tanımlanan API'yi ortaya çıkaran bir web sunucusudur. soygun bir şablonlama sistemidir. xmlhtml soygun tarafından kullanılan bir XML / HTML ayrıştırma ve oluşturma kütüphanesidir. snap, hepsini bir araya getiren ve web uygulamalarını kompozit ve modüler hale getiren güçlü snaplet API'sini sağlayan bir şemsiye projesidir.

Yesod'un hackage konusunda bir dizi projesi var. Bunların çoğu (tümü?) Yesod kategorisinde listelenmiştir . Göze çarpanlardan bazıları yesod-core, warp, sebat ve mezradır.

Haskell web geliştirme gerçeği algılanan göründüğünden çok daha az münhasır ya da seçimdir. Genel olarak projeler çok gevşek bir şekilde birleştirilir ve oldukça değiştirilebilir. Warp (Yesod ekibinin web sunucusu), soygun (Snap ekibinin şablon sistemi) ve asit durumunu (Happstack projesinin kalıcılık sistemi) kullanarak bir web sitesi oluşturabilirsiniz. Snap-server'ı mezra veya kalıcı olarak da kullanabilirsiniz.

Bununla birlikte, iki projenin kesinlikle bazı farklılıkları var. Nesnel olarak işaret edebileceğim en büyük fark, Yesod projelerinin genellikle özlü DSL'ler oluşturmak için Template Haskell ve quasiquoting'i yoğun bir şekilde kullanması, Snap projeleri ise kompostlanabilirliği tercih eden birleştirici kütüphaneleri oluşturmaya bağlı. Düşünebileceğim diğer tüm farklılıklar öznel olarak Snap'e karşı önyargılı olacak. Her iki projeden sonra isimlendirilen şemsiye paketleri açıkça yukarıda belirtilen bileşenler için özel seçimler yapacak ve bu seçimler proje bağımlılıklarına yansıtılacaktır. Ancak bu hala farklı bir şey çekemeyeceğiniz ve kullanamayacağınız anlamına gelmez.

Snap'in oturumları ve kimlik doğrulaması , çeşitli veritabanları için arabirimleri ve keyfi olarak iç içe yerleştirilmiş dinamik olarak boyutlandırılabilir listeler için önceden paketlenmiş destek içeren sindirim işlevlerini kullanarak güzel form işleme ( burada ve burada ) vardır . Bunlar, takılabilir eklerin büyüyen ekosisteminden sadece birkaçı . Oturumlar ve kimlik doğrulama ek bileşenleri arka uç agnostik şekilde yazılır. Yani az miktarda tutkal koduyla, aklınıza gelebilecek hemen hemen tüm kalıcılık sistemleriyle kullanabilmelisiniz. Gelecekte, Snap bu politikaya olabildiğince sık bağlı kalacaktır.

Çoğunlukla Snap vs Yesod vs Happstack'ın seçiminin daha az özellik sorunu ve daha çok kişisel lezzet olduğunu düşünüyorum. Birisi çerçevelerden birinin başka bir şeye sahip olmadığını söylediğinde, çoğu zaman gerekli paketi içe aktararak eksik işlevselliği diğer çerçeveden çekmek oldukça kolay olacaktır.

DÜZENLEME: Büyük üç Haskell web çerçevelerinin daha ayrıntılı bir karşılaştırması için son blog gönderime göz atın . Bazı daha geniş genellemeler kullanarak daha kaba (ancak muhtemelen daha yararlı) bir karşılaştırma için Haskell Web Framework Karşılaştırma Matrisime bakın


34
Haskell web geliştirmesinde dostane rekabetin ve mix-and-match'ın ikili doğası çok umut verici görünüyor. Yani, en kısa sürede hackage kesmek için snap-auth almak tavsiye ederim dedi. Oturumlar ve kimlik doğrulama çok önemlidir.
Dan Burton

2
Yesod ayrıca, mongodb için kalıcı olarak henüz yayınlanmamış bir arayüze sahiptir.
mxc

4
Gelişimin hızı beni etkiledi, bu yüzden bu soru. Snap durgun kalırken Yesod'un ileri momentum ekleme özellikleri var gibi görünüyor. 6+ ay önce ilk duyduğumdan beri yeni özelliklerin neler olduğunu bilmiyorum.
Muchin

3
Snap oldukça iyi bir momentuma sahip. Her şeyden önce, proje Mayıs ayına kadar halka açılmasa da, geçen yıl hackage'de en çok indirilen web çerçevesi oldu. İkincisi, Aralık'taki 0.3 sürümünden bu yana, faaliyette büyük bir artış gördük. Oturumlar, auth, mongoDB, xmlhtml kütüphanesi ve daha fazlası için kütüphanelerin tümü 2011'de çoğunlukla yeni katkıda bulunanlar tarafından çalışılmaktadır. Ayrıca #snapframework IRC kanalında genellikle 30 veya daha fazla kişi bulabilirsiniz. Kesinlikle aktif bir proje.
mightybyte

2
Snap için tokatladığım ikisinden sadece, o zamanlar, daha büyük bir ivme kazanmış gibiydi. Bileşenlerin kalitesinden çok etkilendim. Heist, kullandığım herhangi bir dilde herhangi bir web çerçevesinde gördüğüm en iyi şablonlama sistemi olan güzel ve basit bir tasarıma sahiptir. Snap monad'larla çalışmak kolaydır ve beklediğiniz gibi davranırlar, yani kötü sürprizler yoktur. Ben sadece onlar arasında sürekli dönüşüm gibi ByteStrings veya Metin üzerinde standartlaştırmak isterdim!
Andrew

223

Adil uyarı: Yesod'un baş geliştiricisiyim.

Javascript sözdizimi hakkında sevmediğinizden emin değilim: değişken enterpolasyonlu düz javascript. CSS'ye gelince Yesod artık düz CSS kullanmanıza izin veren Lucius'a sahip. HTML için, Heist (Snap'in kullandığı) dahil olmak üzere istediğiniz diğer kitaplıkları kolayca kullanabilirsiniz. Yani çekin bile gelmez zaman, komik şey biraz CSS / JavaScript sözdizimi üzerinde Yesod atlamak olduğunu söyledi olması bunun için bir sözdizimi. Kesinlikle sadece statik dosyaları çözüm hoş geldiniz.

Yesod, kimlik doğrulama / yetkilendirme, tür güvenli URL'ler, widget'lar, e-posta ve her yerde bir sürü küçük şey (ekmek kırıntıları, mesajlar, nihai hedef) için kesintisiz destek ile birlikte gelir. Ayrıca, Yesod, yorumlar ve işaretleme gibi şeyler için oldukça zengin bir eklenti paketleri setine ve örnek olarak seçebileceğiniz birkaç büyük gerçek kod tabanına sahiptir. Bunlardan herhangi biri sizin için çekici ise, alternatiflerinizin bunları destekleyip desteklemediğini kontrol etmek isteyebilirsiniz.


Çok yeni, henüz belgeleri güncelleme şansım olmadı. Ama temel olarak, normal CSS yazın ve Hamlet / Cassius / Julius gibi enterpolasyon için # {...} ve @ {...} kullanın. Yuvalama da desteklenir, ancak bu açıklamadan biraz daha fazla alan gerekir;). Web-devel'e e-posta gönderirseniz, belge yakalanırken size daha fazla ayrıntı verebiliriz.
Michael Snoyman

JuliusKod sıkıştırılmadan kullanılacak herhangi bir değişiklik var mı? Ben usig Google Closureve derleyici için yorumlarda meta veriler tutmak gerekiyor.
Andras Gyomrey

1
Bunun böyle bir şeyi tartışmak için iyi bir yer olduğunu düşünmüyorum, ancak Julius kodunun sıkıştırılmasına gerek yok (varsayılan olarak yapmıyor). Daha fazla yardıma ihtiyacınız varsa, ayrı bir SO sorusu veya posta listesi iş parçacığı daha iyi bir bahis olacaktır.
Michael Snoyman

29

Mezraya bir şans verin - sonunda hoşunuza gidebilir . Yüzeysel düzeyde negatif bir reaksiyon nadir değildir. Ancak, gerçekte mezra kullanan kimse şikayet etmiyor.

Ayrıca, neden Happstack kullanmıyorsunuz? Sadece "haberde" olmadıkları için sağlam bir çerçeveye sahip olmadıkları anlamına gelmez.


21
rakip bir çerçeveyi denemeyi öneren bir yesod bakıcısı. ne kadar büyük bir topluluğumuz var.
mxc

12

Muhtemelen yesod'un eski versiyonuna atıfta bulunuyorsunuz. En son yesod sürümleri html, javascript ve css için düz sözdizimine sahiptir.

Yesod'un şablon kitaplığı mezrasının html sözdizimi, tam açılış ve kapanış etiketleri ve tüm normal html özniteliklerine sahip düz html'dir. Evet, kapatma etiketlerini atlayabilir ve kimlik ve sınıf özellikleri için kısayollar kullanabilirsiniz. Ama buna gerek yok. Düz html yazmaya devam edebilirsiniz.

Sadece bu değil, html şablonları da Snap'in şablon kütüphanesi Heist'te olduğu gibi ayrı dosyalarda bulunabilir.

Java komut dosyası şablonları (julius) ayrı dosyalarda da bulunan düz javascript dosyalarıdır.

Css şablonu gerçekten farklı bir sözdizimine sahiptir, ancak yesod'un son sürümü artık düz css sözdizimi de sağlamaktadır.

Heist ile giderseniz tip güvenli URL'leriniz olmayacak.

Heist'te html şablonları her zaman sabit diskten okunur. Yesod tüm şablonları doğrudan yürütülebilir dosyaya derler. Sabit sürücüden hiçbir dosya okunmuyor. Böylece yanıt çok daha hızlıdır. Kriterleri kendiniz görebilirsiniz.

Yesod'da güzel işbirliği yapan widget'lar oluşturabilirsiniz. Snap, widget'larla hiç ilgilenmiyor. Kendinizi yuvarlamanız gerekecek.


1
Yukarıda açıkladığım gibi, güvenli URL'lerin türü hakkındaki yorumunuz yanlış ve bahsettiğim yanlış anlamaların devam etmesine yardımcı oluyor. "Snap" yerine "Heist" derseniz daha doğru olur.
mightybyte

3
Tip güvenli URL'ler, şablon motoru VE yönlendirme mekanizmasının bir kombinasyonu nedeniyle mümkündür. Yani sadece soygun değil. Snap'te yalnızca mezra kullanarak güvenli tür URL'leri almayacaksınız.
Vagif Verdi

1
Mezradan bahsetmiyorum. Web-yolları paketi aslında Snap'in sahip olduğu yönlendirme arayüzüne sahip Happstack için yazılmıştır. Muhtemelen küçük bir tutkal koduna ihtiyacınız olacak, ancak hemen hemen her zaman böyle olacak.
mightybyte

4
"Tutkal kodunun" bu kadar küçük bir noktasını ifade etmem. Aşağıda bahsettiğiniz Şablon Haskell, bu "yapıştırıcı kodunu" güvenli ve özlü bir şekilde mümkün kılan şeydir. Bunu ele almak için küçük bir blog yazısı yazdım: yesodweb.com/blog/yesod-template-haskell
Michael Snoyman

3
HStringTemplate, başka bir (daha zayıf, ancak daha esnek) şablonlama yaklaşımı ile gitmek isteyenler için, bildiğim kadarıyla, tüm çerçevelerle iyi oynar ve geliştirme için anında şablon okuma, bunları üretim için önbelleğe alma ve derleme istenirse quasiquotation yoluyla onları. Qq desteği belki 13 satır ve hiç şüphesiz soygunun önemsiz bir şekilde ekleyebileceğinden şüphem yoktu.
sclv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.