Membandingkan kerangka kerja Snap dan Yesod di web Haskell


231

Dua kerangka kerja Haskell dalam berita baru-baru ini adalah Yesod (pada 0,8) dan Snap (pada 0,4).

Jelas sekali bahwa Yesod saat ini mendukung lebih banyak fitur daripada Snap. Namun, saya tidak tahan menggunakan sintaks Yesod untuk HTML, CSS dan Javascript.

Jadi, saya ingin memahami apa yang akan hilang jika saya pergi dengan Snap sebagai gantinya. Misalnya, sepertinya tidak ada dukungan basis data. Bagaimana dengan sesi? Fitur lainnya?


138
Secara pribadi saya tidak tahan dengan sintaks yang digunakan html untuk html;)
Rehno Lindeque

2
apa yang tidak Anda sukai tentang sintaks templat dusun untuk menghasilkan html?
mxc

6
Saya tidak suka bahwa saya tidak bisa berpindah antara Dreamweaver dan Yesod karena sintaksnya berbeda.
Muchin

6
Secara umum, tim Yesod sangat terbuka terhadap ide-ide baru. Sekarang saya tahu kasus penggunaan Anda, saya mungkin bisa merekomendasikan solusi yang baik untuk Anda. Akan lebih baik jika Anda mengirim email ke daftar web-devel, karena SO bukan tempat terbaik untuk diskusi kolaboratif.
Michael Snoyman

76
Orang masih menggunakan Dreamweaver? ;)
OJ.

Jawaban:


236

Pengungkapan penuh: Saya salah satu pengembang utama Snap.

Pertama-tama, mari kita bicara tentang apa itu Snap. Saat ini tim Snap mengelola lima proyek berbeda pada peretasan: snap-core, snap-server, heist, snap, dan xmlhtml. snap-server adalah server web yang mengekspos API yang didefinisikan oleh snap-core. pencurian adalah sistem templating. xmlhtml adalah parsing dan rendering library XML / HTML yang digunakan oleh heist. snap adalah proyek payung yang merekatkan semuanya dan menyediakan API snaplets yang kuat yang membuat aplikasi web komposable dan modular.

Yesod memiliki sejumlah proyek tentang peretasan. Sebagian besar (semua?) Dari mereka terdaftar dalam kategori Yesod . Beberapa yang terkenal adalah yesod-core, warp, persistent, dan hamlet.

Kenyataan dari pengembangan web Haskell adalah bahwa itu jauh lebih sedikit dari pilihan eksklusif atau dari yang dirasakan. Secara umum, proyek-proyek tersebut sangat longgar dan cukup dapat dipertukarkan. Anda bisa membangun situs web menggunakan warp (server web tim Yesod), pencurian (sistem template tim Snap), dan kondisi asam (sistem kegigihan proyek Happstack). Anda juga bisa menggunakan snap-server dengan dusun atau persisten.

Yang mengatakan, kedua proyek pasti memiliki beberapa perbedaan. Perbedaan terbesar yang bisa saya tunjukkan secara objektif adalah bahwa proyek-proyek Yesod biasanya menggunakan Template Haskell dan quasiquoting untuk membuat DSL ringkas, sementara proyek Snap tetap membangun pustaka kombinator yang mendukung kompabilitas. Hampir semua perbedaan lain yang dapat saya pikirkan akan bias secara subjektif terhadap Snap. Paket payung yang dinamai setelah kedua proyek jelas akan membuat pilihan spesifik untuk komponen yang disebutkan di atas, dan pilihan ini akan tercermin dalam dependensi proyek. Tetapi itu masih tidak berarti bahwa Anda tidak dapat menarik sesuatu yang berbeda dan menggunakannya juga.

Snap memang memiliki sesi dan otentikasi , antarmuka ke beberapa basis data, dan penanganan formulir yang bagus (di sini dan di sini ) menggunakan fungsi pencernaan yang mencakup dukungan yang sudah dikemas untuk daftar yang secara acak disarang secara dinamis. Ini hanya beberapa ekosistem yang tumbuh dari snaplets yang dapat dicolokkan . Sesi dan autentikasi snaplets ditulis dengan cara agnostik back-end. Jadi dengan sejumlah kecil kode lem Anda harus dapat menggunakannya dengan sistem ketekunan apa pun yang dapat Anda pikirkan. Di masa depan, Snap akan tetap dengan kebijakan ini sesering mungkin.

Untuk sebagian besar saya pikir pilihan Snap vs Yesod vs Happstack kurang masalah fitur dan lebih banyak selera pribadi. Setiap kali seseorang mengatakan bahwa salah satu framework tidak memiliki sesuatu yang dimiliki oleh yang lain, sebagian besar waktu akan sangat mudah untuk menarik fungsionalitas yang hilang dari framework lain dengan mengimpor paket yang diperlukan.

EDIT: Untuk perbandingan yang lebih terperinci dari tiga kerangka kerja besar Haskell, lihat posting blog saya yang terbaru . Untuk perbandingan yang lebih kasar (tapi mungkin lebih bermanfaat) menggunakan beberapa generalisasi yang lebih luas, lihat Matriks Perbandingan Kerangka Kerja Web Haskell saya


34
Sifat ganda dari persaingan yang bersahabat dan perpaduan dalam pengembangan web Haskell tampaknya sangat menjanjikan. Yang mengatakan, saya akan merekomendasikan mendapatkan snap-auth ke hackage secepatnya. Sesi dan otentikasi adalah masalah besar.
Dan Burton

2
Yesod juga memiliki antarmuka yang belum dirilis untuk mongodb untuk persisten.
mxc

4
Kecepatan perkembangan memiliki pengaruh pada saya, maka pertanyaan ini. Sepertinya Yesod memiliki fitur tambahan momentum sementara Snap tetap stagnan. Saya tidak tahu apa saja fitur baru sejak saya pertama kali mendengarnya 6+ bulan yang lalu.
Muchin

3
Snap memiliki momentum yang cukup bagus. Pertama-tama, itu adalah kerangka kerja web yang paling banyak diunduh tentang peretasan tahun lalu meskipun proyek itu tidak diluncurkan secara publik hingga Mei. Kedua, sejak rilis 0,3 pada bulan Desember, kami telah melihat peningkatan besar dalam aktivitas. Perpustakaan untuk sesi, auth, mongoDB, perpustakaan xmlhtml, dan banyak lagi sedang dikerjakan oleh orang-orang yang sebagian besar kontributor baru pada tahun 2011. Anda juga biasanya dapat menemukan 30 orang atau lebih di saluran IRC #snapframework. Ini jelas merupakan proyek aktif.
mightybyte

2
Dari dua yang saya pilih untuk Snap hanya karena, pada saat itu, tampaknya memiliki momentum yang lebih besar. Saya sangat terkesan dengan kualitas komponennya. Heist memiliki desain yang sangat sederhana dan bersih yang mungkin merupakan sistem templating terbaik yang pernah saya lihat di kerangka web apa pun pada bahasa apa pun yang saya gunakan. Snap monads mudah digunakan dan berperilaku cukup seperti yang Anda harapkan yaitu tidak ada kejutan buruk. Saya hanya berharap bahwa mereka akan terstandarisasi pada ByteStrings atau Teks saat Anda terus-menerus mengubah di antara mereka!
Andrew

223

Peringatan yang adil: Saya adalah pengembang utama Yesod.

Saya tidak yakin apa yang tidak Anda sukai tentang sintaksis Javascript: ini adalah javascript biasa dengan interpolasi variabel. Adapun CSS Yesod sekarang memiliki Lucius yang memungkinkan Anda untuk juga menggunakan CSS biasa. Untuk HTML, Anda dapat dengan mudah menggunakan perpustakaan lain yang Anda inginkan, termasuk Heist (apa yang digunakan Snap). Yang mengatakan, itu agak lucu untuk melewatkan Yesod atas sintaks CSS / Javascript, ketika Snap bahkan tidak memiliki sintaks untuk itu. Anda tentu dipersilakan untuk solusi mereka hanya file statis.

Yesod hadir dengan dukungan tanpa batas untuk otentikasi / otorisasi, jenis URL yang aman, widget, email, dan banyak hal kecil di semua tempat (remah roti, pesan, tujuan akhir). Plus, Yesod memiliki paket add-on yang cukup kaya untuk hal-hal seperti komentar dan penurunan harga, dan beberapa basis kode dunia nyata besar untuk memilih contoh. Jika ada yang menarik bagi Anda, Anda mungkin ingin memeriksa apakah alternatif Anda mendukungnya.


Ini sangat baru, saya belum punya kesempatan untuk memperbarui dokumentasi. Tetapi pada dasarnya, cukup ketik CSS normal, dan gunakan # {...} dan @ {...} untuk interpolasi seperti Hamlet / Cassius / Julius. Nesting juga didukung, tetapi itu akan membutuhkan sedikit lebih banyak ruang untuk menjelaskan daripada komentar ini;). Jika Anda mengirim email ke web-devel, kami dapat memberi Anda lebih banyak detail di sana saat dokumentasi menyusul.
Michael Snoyman

Adakah perubahan untuk digunakan Juliustanpa kode dikompresi? Saya usig Google Closuredan saya perlu menyimpan metadata dalam komentar untuk kompiler.
Andras Gyomrey

1
Saya tidak berpikir ini adalah tempat yang baik untuk membahas hal seperti itu, tetapi tidak ada persyaratan untuk memiliki kode Julius dikompresi (tidak melakukannya secara default). Jika Anda membutuhkan bantuan lebih lanjut, pertanyaan SO terpisah atau utas milis akan menjadi taruhan yang lebih baik.
Michael Snoyman

29

Cobalah dusun - Anda mungkin akan menyukainya. Reaksi negatif pada tingkat permukaan bukan tidak biasa. Namun, tidak ada yang benar-benar menggunakan dusun mengeluh.

Juga, mengapa tidak menggunakan Happstack? Hanya karena mereka tidak "dalam berita" tidak berarti mereka tidak memiliki kerangka kerja yang solid.


21
pengelola yesod menyarankan untuk mencoba kerangka kerja yang bersaing. komunitas yang luar biasa.
mxc

12

Anda mungkin merujuk ke versi yesod lama. Versi yesod terbaru memiliki sintaks untuk html, javascript dan css.

Sintaks html dari dusun perpustakaan template yesod adalah html biasa dengan tag pembuka dan penutup lengkap dan semua atribut html normal. Ya, Anda dapat menghilangkan tag penutup dan menggunakan pintasan untuk atribut id dan kelas. Tapi kamu tidak harus. Anda dapat terus menulis html biasa.

Tidak hanya itu tetapi templat html dapat berada di file yang terpisah, seperti di Heist perpustakaan templat Snap.

Templat skrip Java (julius) adalah file javascript biasa, juga berada di file terpisah.

Template css memang memiliki sintaks yang berbeda, tetapi versi terbaru dari yesod sekarang juga menyediakan sintaks css biasa.

Jika Anda menggunakan Heist, Anda tidak akan memiliki jenis url yang aman.

Dalam Heist templat html dibaca dari harddisk setiap kali. Yesod mengkompilasi semua template langsung ke executable. Tidak ada file yang dibaca dari harddisk. Dengan demikian responsnya jauh lebih cepat. Anda bisa melihat sendiri tolok ukurnya.

Di Yesod Anda dapat membuat widget yang bekerja sama dengan baik. Snap sama sekali tidak berurusan dengan widget. Anda harus menggulung sendiri.


1
Seperti yang saya jelaskan di atas, komentar Anda tentang jenis URL aman tidak benar, dan membantu melanggengkan kesalahpahaman yang saya sebutkan. Akan lebih akurat jika Anda mengatakan "Heist" daripada "Snap".
mightybyte

3
Jenis url aman dimungkinkan karena kombinasi engine templat DAN mekanisme perutean. Jadi bukan hanya Heist. Anda tidak akan mendapatkan ketik url aman di Snap hanya dengan menggunakan dusun.
Vagif Verdi

1
Saya tidak berbicara tentang dusun. Paket web-rute awalnya ditulis untuk Happstack yang pada dasarnya memiliki antarmuka perutean yang sama dengan yang dimiliki Snap. Anda mungkin memerlukan sedikit kode lem, tetapi itu akan selalu menjadi masalahnya.
mightybyte

4
Saya tidak akan membuat titik kecil dari "kode lem" itu. Haskell Templat yang Anda rujuk di bawah adalah yang membuat "kode lem" itu mungkin dengan cara yang aman dan ringkas. Saya menulis posting blog kecil untuk mengatasinya: yesodweb.com/blog/yesod-template-haskell
Michael Snoyman

3
Bagi mereka yang ingin pergi dengan pendekatan templating lain (lebih lemah, tetapi lebih fleksibel), HStringTemplate juga bermain baik dengan semua kerangka kerja, sejauh yang saya tahu, dan memungkinkan membaca template dengan cepat untuk pengembangan, menyimpannya untuk produksi, dan juga menyusun mereka melalui quasiquotation jika diinginkan. Dukungan qq mungkin 13 baris, dan saya yakin heist bisa menambahkannya dengan sepele, apakah ada permintaan.
sclv
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.