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?
Jawaban:
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
sumber
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.
sumber
Julius
tanpa kode dikompresi? Saya usigGoogle Closure
dan saya perlu menyimpan metadata dalam komentar untuk kompiler.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.
sumber
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.
sumber