So sánh các khung web Snap và Yesod của Haskell


231

Hai khung web Haskell trong tin tức gần đây là Yesod (ở mức 0,8) và Snap (ở mức 0,4).

Rõ ràng là Yesod hiện hỗ trợ nhiều tính năng hơn Snap. Tuy nhiên, tôi không thể chịu được cú pháp Yesod sử dụng cho HTML, CSS và Javascript của nó.

Vì vậy, tôi muốn hiểu những gì tôi sẽ thiếu nếu tôi đi với Snap thay thế. Ví dụ, không giống như hỗ trợ cơ sở dữ liệu ở đó. Làm thế nào về phiên? Các tính năng khác?


138
Cá nhân tôi không thể chịu được cú pháp mà html sử dụng cho html;)
Rehno Lindeque

2
Bạn không thích gì về cú pháp mẫu ấp để tạo html?
mxc

6
Tôi không thích rằng tôi không thể di chuyển giữa Dreamweaver và Yesod vì cú pháp khác nhau.
Phần lớn

6
Nhìn chung, nhóm Yesod rất cởi mở với những ý tưởng mới. Bây giờ tôi biết trường hợp sử dụng của bạn, tôi có thể đề xuất một giải pháp tốt cho bạn. Sẽ là tốt nhất nếu bạn gửi email đến danh sách phát trên web, vì SO không phải là nơi tốt nhất để thảo luận hợp tác.
Michael Snoyman

76
Mọi người vẫn dùng Dreamweaver? ;)
OJ.

Câu trả lời:


236

Tiết lộ đầy đủ: Tôi là một trong những nhà phát triển hàng đầu của Snap.

Trước hết, hãy nói về Snap là gì. Hiện tại, nhóm Snap duy trì năm dự án khác nhau về hackage: snap-core, snap-server, heist, snap và xmlhtml. snap-server là một máy chủ web hiển thị API được xác định bởi snap-core. trộm là một hệ thống templating. xmlhtml là một thư viện phân tích cú pháp và kết xuất XML / HTML được sử dụng bởi heist. snap là một dự án ô kết hợp tất cả chúng lại với nhau và cung cấp API snaplets mạnh mẽ giúp các ứng dụng web có thể kết hợp và mô đun hóa.

Yesod có một loạt các dự án về hackage. Hầu hết (tất cả?) Trong số chúng được liệt kê trong danh mục Yesod . Một số trong những cái đáng chú ý là yesod - lõi, cong vênh, dai dẳng và ấp.

Thực tế của sự phát triển web Haskell là nó ít độc quyền hơn hoặc dường như được nhận thấy. Nhìn chung, các dự án được kết nối rất lỏng lẻo và khá hoán đổi cho nhau. Bạn có thể xây dựng một trang web bằng cách sử dụng warp (máy chủ web của nhóm Yesod), trộm (hệ thống mẫu của nhóm Snap) và trạng thái axit (hệ thống kiên trì của dự án Happstack). Bạn cũng có thể sử dụng snap-server với ấp hoặc liên tục.

Điều đó nói rằng, hai dự án chắc chắn có một số khác biệt. Sự khác biệt lớn nhất mà tôi có thể chỉ ra một cách khách quan là các dự án Yesod thường sử dụng rất nhiều Mẫu Haskell và chuẩn bị để tạo DSL ngắn gọn, trong khi các dự án của Snap gắn bó với việc xây dựng các thư viện kết hợp thiên về khả năng kết hợp. Chỉ có bất kỳ sự khác biệt nào khác mà tôi có thể nghĩ đến sẽ thiên về chủ quan đối với Snap. Các gói ô được đặt tên theo cả hai dự án rõ ràng sẽ đưa ra các lựa chọn cụ thể cho các thành phần được đề cập ở trên và những lựa chọn này sẽ được phản ánh trong các phụ thuộc của dự án. Nhưng điều đó vẫn không có nghĩa là bạn không thể sử dụng thứ gì đó khác biệt và sử dụng nó.

Snap có các phiênxác thực , giao diện với một số cơ sở dữ liệu và xử lý biểu mẫu đẹp ( ở đâyở đây ) bằng cách sử dụng chức năng tiêu hóa bao gồm hỗ trợ đóng gói sẵn cho các danh sách có thể tự động lồng vào nhau. Đây chỉ là một số trong hệ sinh thái đang phát triển của snaplets có thể cắm được . Các phiên và snaplets xác thực được viết theo cách bất khả tri. Vì vậy, với một lượng nhỏ mã keo, bạn sẽ có thể sử dụng nó với bất kỳ hệ thống kiên trì nào bạn có thể nghĩ đến. Trong tương lai, Snap sẽ gắn bó với chính sách này thường xuyên nhất có thể.

Đối với hầu hết các phần tôi nghĩ rằng sự lựa chọn của Snap vs Yesod vs Happstack không phải là vấn đề về tính năng và nhiều hơn một sở thích cá nhân. Bất cứ khi nào ai đó nói rằng một trong các khung không có thứ gì đó mà khung khác có, thì hầu hết thời gian sẽ rất dễ dàng để lấy chức năng còn thiếu từ khung khác bằng cách nhập gói cần thiết.

EDIT: Để so sánh chi tiết hơn về ba khung web Haskell lớn, hãy xem bài đăng trên blog gần đây của tôi . Để so sánh khó khăn hơn (nhưng có thể hữu ích hơn) bằng cách sử dụng một số khái quát rộng hơn, hãy xem Ma trận so sánh khung web Haskell của tôi


34
Bản chất kép của cạnh tranh thân thiện và kết hợp giữa phát triển web Haskell có vẻ rất hứa hẹn. Điều đó nói rằng, tôi khuyên bạn nên lấy snap-auth để hack asap. Phiên và xác thực là một vấn đề lớn.
Dan Burton

2
Yesod cũng có một giao diện chưa được phát hành cho mongodb cho liên tục.
mxc

4
Vận tốc phát triển có ảnh hưởng đến tôi, do đó câu hỏi này. Có vẻ như Yesod có các tính năng thêm động lực trong khi Snap vẫn bị trì trệ. Tôi chỉ không biết các tính năng mới là gì kể từ lần đầu tiên tôi nghe về nó hơn 6 tháng trước.
Manyin

3
Snap có động lực khá tốt. Trước hết, đó là khung web được tải xuống nhiều nhất về vụ hack năm ngoái mặc dù dự án không ra mắt công khai cho đến tháng Năm. Thứ hai, kể từ phiên bản 0.3 vào tháng 12, chúng tôi đã thấy sự gia tăng lớn trong hoạt động. Các thư viện cho phiên, auth, mongoDB, thư viện xmlhtml, v.v. Nó chắc chắn là một dự án hoạt động.
mightybyte

2
Trong số hai tôi đã làm cho Snap đơn giản vì vào thời điểm đó, nó dường như có động lực lớn hơn. Tôi đã rất ấn tượng với chất lượng của các thành phần. Heist có thiết kế đẹp và đơn giản, có lẽ là hệ thống tạo khuôn tốt nhất tôi từng thấy trên bất kỳ khung web nào trên bất kỳ ngôn ngữ nào tôi đã sử dụng. Các đơn vị Snap rất dễ làm việc và hoạt động khá nhiều như bạn mong đợi, tức là không có những bất ngờ khó chịu. Tôi chỉ muốn họ chuẩn hóa trên cả ByteStrings hoặc Text khi bạn liên tục chuyển đổi giữa chúng!
Andrew

223

Cảnh báo công bằng: Tôi là nhà phát triển chính của Yesod.

Tôi không chắc chắn những gì bạn không thích về cú pháp Javascript: đó là javascript đơn giản với nội suy biến. Đối với CSS Yesod hiện có Lucius cho phép bạn cũng sử dụng CSS đơn giản. Đối với HTML, bạn có thể dễ dàng sử dụng bất kỳ thư viện nào khác mà bạn muốn, kể cả Heist (những gì Snap sử dụng). Điều đó nói rằng, có một chút buồn cười khi bỏ qua Yesod qua cú pháp CSS / Javascript, khi Snap thậm chí không cú pháp cho nó. Bạn chắc chắn hoan nghênh giải pháp của họ chỉ là các tệp tĩnh.

Yesod đi kèm với sự hỗ trợ liền mạch cho xác thực / ủy quyền, URL an toàn loại, widget, email và một loạt các thứ nhỏ ở khắp mọi nơi (mẩu bánh mì, tin nhắn, đích đến cuối cùng). Thêm vào đó, Yesod có một bộ gói bổ trợ khá phong phú cho những thứ như bình luận và đánh dấu, và một vài cơ sở mã thế giới thực lớn để chọn làm ví dụ. Nếu bất kỳ thứ nào trong số này hấp dẫn bạn, bạn có thể muốn kiểm tra xem các lựa chọn thay thế của bạn có hỗ trợ chúng không.


Nó rất mới, tôi chưa có cơ hội cập nhật tài liệu này. Nhưng về cơ bản, chỉ cần nhập CSS bình thường và sử dụng # {...} và @ {...} để nội suy giống như Hamlet / Cassius / Julius. Nesting cũng được hỗ trợ, nhưng điều đó sẽ tốn nhiều không gian hơn để giải thích hơn bình luận này;). Nếu bạn gửi email cho web-devel, chúng tôi có thể cung cấp cho bạn thêm một số chi tiết ở đó trong khi tài liệu bắt kịp.
Michael Snoyman

Bất kỳ thay đổi để sử dụng Juliusmà không cần mã được nén? Tôi là usig Google Closurevà tôi cần giữ siêu dữ liệu trong các bình luận cho trình biên dịch.
Andras Gyomrey

1
Tôi không nghĩ rằng đây là một nơi tốt để thảo luận về một điều như vậy, nhưng không có yêu cầu phải nén mã Julius (mặc định nó không làm điều đó). Nếu bạn cần thêm trợ giúp, một câu hỏi SO riêng biệt hoặc chuỗi danh sách gửi thư sẽ là lựa chọn tốt hơn.
Michael Snoyman

29

Hãy cho ấp một try- bạn có thể kết thúc thích nó. Một phản ứng tiêu cực ở mức độ hời hợt không phải là hiếm. Tuy nhiên, không ai thực sự sử dụng ấp phàn nàn.

Ngoài ra, tại sao không sử dụng Happstack? Chỉ vì họ không "trong tin tức" không có nghĩa là họ không có khuôn khổ vững chắc.


21
một người duy trì yesod đề nghị thử một khuôn khổ cạnh tranh. thật là một cộng đồng tuyệt vời
mxc

12

Bạn có thể đề cập đến phiên bản cũ của yesod. Các phiên bản yesod mới nhất có cú pháp đơn giản cho html, javascript và css.

Cú pháp html của ấp thư viện mẫu của yesod là html đơn giản với các thẻ mở và đóng hoàn chỉnh và tất cả các thuộc tính html thông thường. Có, bạn có thể bỏ qua các thẻ đóng và sử dụng các phím tắt cho các thuộc tính id và class. Nhưng bạn không cần phải làm vậy. Bạn có thể tiếp tục viết html đơn giản.

Không chỉ vậy mà các mẫu html có thể nằm trong các tệp riêng biệt, giống như trong thư viện mẫu của Snap là Heist.

Các mẫu tập lệnh Java (julius) là các tệp javascript đơn giản, cũng nằm trong các tệp riêng biệt.

Mẫu css thực sự có một cú pháp khác, nhưng phiên bản gần đây của yesod hiện cung cấp cú pháp css đơn giản.

Nếu bạn đi với Heist, bạn sẽ không có loại url an toàn.

Trong các mẫu html Heist được đọc từ ổ cứng mọi lúc. Yesod biên dịch tất cả các mẫu trực tiếp vào tệp thực thi. Không có tập tin nào được đọc từ ổ cứng. Do đó, phản ứng nhanh hơn nhiều. Bạn có thể xem điểm chuẩn chính mình.

Trong Yesod, bạn có thể tạo các widget hợp tác độc đáo. Snap hoàn toàn không đối phó với các vật dụng. Bạn sẽ phải tự lăn.


1
Như tôi mô tả ở trên, nhận xét của bạn về loại URL an toàn là không chính xác và giúp duy trì quan niệm sai lầm mà tôi đề cập. Sẽ chính xác hơn nếu bạn nói "Trộm cướp" thay vì "Chụp".
mightybyte

3
Loại url an toàn là có thể do sự kết hợp của cơ chế định tuyến VÀ cơ chế định tuyến. Vì vậy, nó không chỉ Heist. Bạn sẽ không nhận được các url an toàn trong Snap chỉ bằng cách sử dụng ấp.
Vagif Verdi

1
Tôi không nói về ấp. Gói các tuyến web ban đầu được viết cho Happstack, về cơ bản có giao diện định tuyến giống như Snap có. Bạn có thể sẽ cần một ít mã keo, nhưng điều đó sẽ luôn luôn như vậy.
mightybyte

4
Tôi sẽ không tạo ra một điểm nhỏ như vậy của "mã keo". Mẫu Haskell mà bạn đề cập dưới đây là những gì làm cho "mã keo" đó có thể được thực hiện một cách an toàn, ngắn gọn. Tôi đã viết một bài đăng blog nhỏ để giải quyết rằng: yesodweb.com/blog/yesod-template-haskell
Michael Snoyman

3
Đối với những người muốn thực hiện theo cách tiếp cận khuôn mẫu khác (yếu hơn, nhưng linh hoạt hơn), HStringTemplate cũng chơi tốt với tất cả các khung, theo như tôi biết và cho phép đọc các mẫu đang phát triển, lưu trữ chúng để sản xuất và cũng biên dịch chúng trong thông qua quasiquotation nếu muốn. Hỗ trợ qq có thể là 13 dòng, và tôi không nghi ngờ rằng vụ cướp có thể thêm nó một cách tầm thường, có nhu cầu.
sclv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.