การเปรียบเทียบกรอบเว็บ Snap และ Yesod ของ Haskell


231

กรอบงานเว็บ Haskell ทั้งสองในข่าวล่าสุดคือYesod (ที่ 0.8) และSnap (ที่ 0.4)

เห็นได้ชัดว่า Yesod ปัจจุบันรองรับคุณสมบัติมากมายกว่า Snap อย่างไรก็ตามฉันไม่สามารถใช้ไวยากรณ์ Yesod ที่ใช้กับ HTML, CSS และ Javascript ได้

ดังนั้นฉันต้องการที่จะเข้าใจสิ่งที่ฉันจะหายไปถ้าฉันไปกับ Snap แทน ตัวอย่างเช่นดูเหมือนว่าจะไม่มีการสนับสนุนฐานข้อมูล วิธีการเกี่ยวกับการประชุม? คุณสมบัติอื่น ๆ ?


138
ส่วนตัวผมไม่สามารถยืนไวยากรณ์ที่ใช้ HTML สำหรับ HTML;)
Rehno Lindeque

2
สิ่งที่คุณไม่ชอบเกี่ยวกับไวยากรณ์แม่แบบของหมู่บ้านเพื่อสร้าง html?
mxc

6
ฉันไม่ชอบที่ฉันไม่สามารถย้ายไปมาระหว่าง Dreamweaver และ Yesod เพราะไวยากรณ์แตกต่างกัน
Muchin

6
โดยทั่วไปทีม Yesod เปิดรับความคิดใหม่ ๆ ตอนนี้ฉันรู้กรณีการใช้ของคุณแล้วฉันอาจจะแนะนำวิธีแก้ปัญหาที่ดีให้กับคุณ จะเป็นการดีที่สุดถ้าคุณส่งอีเมลไปยังรายการ web-devel เนื่องจาก SO ไม่ใช่สถานที่ที่ดีที่สุดสำหรับการสนทนาร่วมกัน
Michael Snoyman

76
ผู้คนยังใช้ Dreamweaver อยู่ใช่ไหม? ;)
OJ

คำตอบ:


236

การเปิดเผยแบบเต็ม: ฉันเป็นหนึ่งในนักพัฒนาหลักของ Snap

ก่อนอื่นเรามาพูดถึง Snap กันดีกว่า ตอนนี้ทีมงาน Snap ดูแลโครงการห้าโครงการที่เกี่ยวกับการแฮ็ก: snap-core, snap-server, heist, snap และ xmlhtml snap-server เป็นเว็บเซิร์ฟเวอร์ที่เปิดเผย API ที่กำหนดโดย snap-core การปล้นเป็นระบบที่ทำให้เกิดอารมณ์ xmlhtml เป็นไลบรารีการแยกวิเคราะห์ XML และ HTML ที่ใช้โดยการปล้น snap เป็นโครงการในร่มที่ติดกาวทั้งหมดเข้าด้วยกันและจัดเตรียม snaplets API อันทรงพลังที่ทำให้เว็บแอปประกอบได้

Yesod มีโฮสต์ของโครงการเกี่ยวกับการแฮ็ก มากที่สุด (ทั้งหมด?) ของพวกเขามีการระบุไว้ในหมวดหมู่ Yesod สิ่งที่น่าสังเกตบางอย่าง ได้แก่ yesod-core, warp, persistent และ hamlet

ความเป็นจริงของการพัฒนาเว็บ Haskell คือมันมีตัวเลือกพิเศษหรือทางเลือกน้อยกว่าการรับรู้ โดยทั่วไปแล้วโครงการจะมีการเชื่อมโยงกันอย่างหลวม ๆ คุณสามารถสร้างเว็บไซต์โดยใช้ warp (เว็บเซิร์ฟเวอร์ของทีม Yesod), Heist (ระบบแม่แบบของทีม Snap) และสถานะกรด (ระบบการคงอยู่ของโครงการ Happstack) คุณสามารถใช้ snap-server กับแฮมเล็ตหรือถาวรได้

ที่กล่าวว่าทั้งสองโครงการมีความแตกต่างอย่างแน่นอน ความแตกต่างที่ใหญ่ที่สุดที่ฉันสามารถชี้ให้เห็นอย่างเป็นกลางคือโครงการ Yesod มักใช้เทมเพลต Haskell และ quasiquoting อย่างหนักเพื่อสร้าง DSL ที่รัดกุมในขณะที่โครงการ Snap ติดกับการสร้างห้องสมุดคอมบิเนเตอร์ที่ชอบการผสมผสาน ความแตกต่างอื่น ๆ ที่ฉันคิดได้จะมีอคติต่อ Snap แพคเกจร่มที่ตั้งชื่อตามโครงการทั้งสองจะเห็นได้ชัดว่าจะสร้างตัวเลือกเฉพาะสำหรับองค์ประกอบที่กล่าวถึงข้างต้นและตัวเลือกเหล่านี้จะสะท้อนให้เห็นในการพึ่งพาโครงการ แต่นั่นก็ไม่ได้หมายความว่าคุณไม่สามารถดึงสิ่งที่แตกต่างและใช้งานได้เช่นกัน

Snap มีเซสชันและการรับรองความถูกต้องส่วนต่อประสานกับฐานข้อมูลหลายแห่งและการจัดการรูปแบบที่ดี ( ที่นี่และที่นี่ ) โดยใช้ฟังก์ชั่นย่อยที่มีการสนับสนุนการทำแพคเกจล่วงหน้าสำหรับรายการที่ปรับขนาดได้แบบไดนามิก นี่เป็นเพียงบางส่วนของระบบนิเวศที่กำลังเติบโตของสแน็ปเล็ตแบบเสียบได้ เซสชันและสแน็ปช็อตการตรวจสอบความถูกต้องเขียนด้วยวิธีที่ไม่เชื่อเรื่องพระเจ้า ดังนั้นด้วยรหัสกาวจำนวนเล็กน้อยคุณควรใช้กับระบบการคงอยู่ที่คุณคิดได้ ในอนาคต Snap จะยึดติดกับนโยบายนี้บ่อยที่สุดเท่าที่จะทำได้

ส่วนใหญ่ฉันคิดว่าทางเลือกของ Snap vs Yesod กับ Happstack นั้นน้อยกว่าปัญหาของฟีเจอร์และรสนิยมส่วนตัวมากกว่า เมื่อใดก็ตามที่ใครบางคนบอกว่าหนึ่งในเฟรมเวิร์กไม่มีอะไรที่อีกอันมีอยู่ส่วนใหญ่มันจะค่อนข้างง่ายที่จะดึงฟังก์ชั่นที่หายไปจากเฟรมเวิร์กอื่นโดยการนำเข้าแพ็คเกจที่จำเป็น

แก้ไข: สำหรับการเปรียบเทียบรายละเอียดเพิ่มเติมของใหญ่สาม Haskell กรอบเว็บตรวจสอบล่าสุดของฉันโพสต์บล็อก สำหรับการเปรียบเทียบที่หยาบกว่า (แต่อาจมีประโยชน์มากกว่า) โดยใช้การสรุปทั่วไปที่กว้างกว่าโปรดดูตารางเปรียบเทียบเมทริกซ์ Haskell Web Frameworkของฉัน


34
ลักษณะที่เป็นคู่ของการแข่งขันที่เป็นมิตรและการผสมผสานและจับคู่ในการพัฒนาเว็บ Haskell ดูเหมือนว่าจะเป็นไปได้ ที่กล่าวว่าฉันขอแนะนำให้ snap-auth ไปแฮ็คโดยเร็ว เซสชันและการรับรองความถูกต้องเป็นเรื่องใหญ่
Dan Burton

2
Yesod ยังมีอินเทอร์เฟซแบบยังไม่ได้เผยแพร่ไปยัง mongodb เพื่อคงอยู่
mxc

4
ความเร็วของการพัฒนามีอิทธิพลกับฉันดังนั้นคำถามนี้ ดูเหมือนว่า Yesod จะมีคุณสมบัติเพิ่มโมเมนตัมไปข้างหน้าในขณะที่ Snap ยังคงนิ่ง ฉันไม่ทราบเลยว่าคุณสมบัติใหม่ ๆ คืออะไรตั้งแต่ฉันได้ยินเรื่องนี้ครั้งแรกเมื่อ 6 เดือนที่แล้ว
Muchin

3
Snap มีแรงดี ก่อนอื่นมันเป็นเว็บเฟรมเวิร์กที่ถูกดาวน์โหลดมากที่สุดเมื่อปีที่แล้วแม้ว่าโครงการจะไม่เปิดตัวต่อสาธารณะจนถึงเดือนพฤษภาคม ประการที่สองนับตั้งแต่การเปิดตัว 0.3 ในเดือนธันวาคมเราได้เห็นกิจกรรมเพิ่มขึ้นอย่างมาก ไลบรารี่สำหรับเซสชัน, auth, mongoDB, ไลบรารี่ xmlhtml, และอื่น ๆ ล้วนแล้วแต่เป็นงานของคนที่มีส่วนร่วมมากที่สุดในปี 2011 คุณสามารถหาคนได้มากกว่า 30 คนใน #snapframework IRC channel มันเป็นโครงการที่ใช้งานอยู่แน่นอน
mightybyte

2
ในสองเรื่องที่ฉันถนัดเพื่อ Snap เพียงเพราะในเวลานั้นดูเหมือนว่าจะมีแรงผลักดันมากขึ้น ฉันประทับใจมากกับคุณภาพของส่วนประกอบ Heist มีการออกแบบที่เรียบง่ายและสะอาดซึ่งน่าจะเป็นระบบ templating ที่ดีที่สุดที่ฉันเคยเห็นในกรอบเว็บใด ๆ กับภาษาที่ฉันเคยใช้ พระ Snap นั้นง่ายต่อการทำงานและมีพฤติกรรมมากตามที่คุณคาดหวังนั่นคือไม่น่าประหลาดใจ ฉันแค่หวังว่าพวกเขาจะสร้างมาตรฐานให้กับ ByteStrings หรือ Text ตามที่คุณแปลงไปมาอย่างต่อเนื่อง!
Andrew

223

คำเตือนที่เป็นธรรม: ฉันเป็นผู้พัฒนานำของ Yesod

ฉันไม่แน่ใจว่าสิ่งที่คุณไม่ชอบเกี่ยวกับไวยากรณ์ Javascript: มันเป็นจาวาสคริปต์ธรรมดาที่มีการแก้ไขตัวแปร สำหรับ CSS Yesod ตอนนี้มี Lucius ที่ให้คุณใช้ CSS ธรรมดาได้เช่นกัน สำหรับ HTML คุณสามารถใช้ไลบรารีอื่น ๆ ที่คุณต้องการได้อย่างง่ายดายรวมถึง Heist (สิ่งที่ Snap ใช้) ที่กล่าวว่ามันเป็นบิตของสิ่งที่ตลกที่จะข้าม Yesod กว่า CSS / Javascript ไวยากรณ์เมื่อ Snap ไม่ได้มีไวยากรณ์สำหรับมัน คุณจะยินดีอย่างแน่นอนที่จะแก้ปัญหาของพวกเขาเพียงไฟล์คงที่

Yesod มาพร้อมกับการสนับสนุนอย่างราบรื่นสำหรับการรับรองความถูกต้อง / การอนุญาต, URL ที่ปลอดภัยประเภท, วิดเจ็ต, อีเมลและสิ่งเล็ก ๆ น้อย ๆ ทั่วสถานที่ (breadcrumbs, ข้อความ, ปลายทางสุดท้าย) นอกจากนี้ Yesod ยังมีชุดโปรแกรมเสริมที่ค่อนข้างสมบูรณ์สำหรับสิ่งต่างๆเช่นความคิดเห็นและการทำเครื่องหมายและฐานรหัสขนาดใหญ่ที่ใช้ในการเลือกตัวอย่าง หากสิ่งเหล่านี้น่าสนใจสำหรับคุณคุณอาจต้องการตรวจสอบว่าทางเลือกของคุณรองรับหรือไม่


มันใหม่มากฉันยังไม่ได้มีโอกาสอัพเดทเอกสาร แต่โดยทั่วไปให้พิมพ์ CSS ปกติแล้วใช้ # {... } และ @ {... } เพื่อแก้ไขเช่นเดียวกับ Hamlet / Cassius / Julius รองรับการสร้างรัง แต่จะใช้พื้นที่ในการอธิบายมากกว่าความคิดเห็นนี้เล็กน้อย) หากคุณส่งอีเมลถึงผู้พัฒนาเว็บเราสามารถให้รายละเอียดเพิ่มเติมกับคุณได้ในขณะที่เอกสารอธิบายขึ้นมา
Michael Snoyman

การเปลี่ยนแปลงใด ๆ ที่จะใช้Juliusโดยไม่ต้องมีการบีบอัดรหัส? ฉัน usig Google Closureและฉันต้องเก็บข้อมูลเมตาในความคิดเห็นสำหรับคอมไพเลอร์
Andras Gyomrey

1
ฉันไม่คิดว่านี่เป็นสถานที่ที่ดีในการพูดคุยเรื่องนี้ แต่ก็ไม่จำเป็นต้องบีบอัดรหัส Julius (โดยค่าเริ่มต้นจะไม่ทำ) หากคุณต้องการความช่วยเหลือเพิ่มเติมคำถาม SO แยกต่างหากหรือเธรดรายชื่อผู้รับจดหมายจะเป็นทางออกที่ดีกว่า
Michael Snoyman

29

ลองหมู่บ้านเล็ก ๆ คุณอาจท้ายชอบมัน ปฏิกิริยาเชิงลบในระดับผิวเผินไม่ใช่เรื่องแปลก อย่างไรก็ตามไม่มีใครที่ใช้หมู่บ้านเล็ก ๆ แห่งนี้บ่นจริงๆ

นอกจากนี้ทำไมไม่ใช้ Happstack เพียงเพราะพวกเขาไม่ได้ "ในข่าว" ไม่ได้หมายความว่าพวกเขาไม่มีกรอบที่มั่นคง


21
ผู้ดูแล Yesod แนะนำให้ลองกรอบการแข่งขัน ชุมชนที่ยอดเยี่ยมมี
mxc

12

คุณอาจอ้างถึง yesod รุ่นเก่า เวอร์ชัน yes ล่าสุดล่าสุดมีไวยากรณ์ธรรมดาสำหรับ html, javascript และ css

ไวยากรณ์ html ของเทมเพลตไลบรารีหมู่บ้านของ yesod คือ html ธรรมดาที่มีแท็กเปิดและปิดที่สมบูรณ์และแอตทริบิวต์ html ปกติทั้งหมด ใช่คุณสามารถละเว้นแท็กปิดและใช้ทางลัดสำหรับแอตทริบิวต์ id และคลาส แต่คุณไม่ต้อง คุณสามารถเขียน HTML ธรรมดาต่อไป

ไม่เพียงแค่นั้น แต่เทมเพลต html สามารถอยู่ในไฟล์แยกเช่นเดียวกับใน Heist เทมเพลตไลบรารีของ Snap

เทมเพลตสคริปต์ Java (จูเลียส) เป็นไฟล์จาวาสคริปต์ธรรมดาและอยู่ในไฟล์แยกต่างหาก

เทมเพลต css นั้นมีรูปแบบที่แตกต่างกันออกไป แต่ตอนนี้ yesod เวอร์ชันล่าสุดจะให้รูปแบบของ css ธรรมดา

หากคุณไปกับ Heist คุณจะไม่ได้พิมพ์ URL ที่ปลอดภัย

ใน Heist html แม่แบบจะอ่านจากฮาร์ดไดรฟ์ทุกครั้ง Yesod จะรวบรวมแม่แบบทั้งหมดลงในไฟล์เรียกทำงานโดยตรง ไม่มีไฟล์ถูกอ่านจากฮาร์ดไดรฟ์ ดังนั้นการตอบสนองจะเร็วขึ้นมาก คุณสามารถดูมาตรฐานได้ด้วยตนเอง

ใน Yesod คุณสามารถสร้างวิดเจ็ตที่ให้ความร่วมมือได้เป็นอย่างดี Snap ไม่ได้จัดการกับวิดเจ็ตเลย คุณจะต้องม้วนตัวเอง


1
ตามที่ฉันอธิบายไว้ข้างต้นความคิดเห็นของคุณเกี่ยวกับ URL ที่ปลอดภัยประเภทไม่ถูกต้องและช่วยยืดอายุความเข้าใจผิดที่ฉันพูดถึง มันจะแม่นยำกว่านี้ถ้าคุณพูดว่า "Heist" แทนที่จะเป็น "Snap"
mightybyte

3
URL ที่ปลอดภัยประเภทเป็นไปได้เนื่องจากการรวมกันของแม่แบบเครื่องยนต์และกลไกการกำหนดเส้นทาง ดังนั้นมันจึงไม่ใช่แค่ Heist คุณจะไม่ได้รับ URL ที่ปลอดภัยใน Snap เพียงแค่ใช้แฮมเล็ต
Vagif Verdi

1
ฉันไม่ได้พูดถึงหมู่บ้านเล็ก ๆ แพ็คเกจเว็บเส้นทางถูกเขียนขึ้นสำหรับ Happstack ซึ่งมีอินเทอร์เฟซการเราต์เหมือนกับ Snap คุณอาจต้องใช้รหัสกาวเล็ก ๆ น้อย ๆ แต่นั่นก็เป็นเรื่องที่เกิดขึ้นเสมอ
mightybyte

4
ฉันจะไม่ทำจุดเล็ก ๆ ของ "รหัสกาว" Template Haskell ที่คุณอ้างถึงด้านล่างนี้เป็นสิ่งที่ทำให้ "รหัสกาว" เป็นไปได้ในลักษณะที่ปลอดภัยและรัดกุม ฉันเขียนโพสต์บล็อกขนาดเล็กตามที่อยู่ที่: yesodweb.com/blog/yesod-template-haskell
Michael Snoyman

3
สำหรับผู้ที่ต้องการใช้วิธีการสร้างเทมเพลตแบบอื่น (อ่อนแอ แต่ยืดหยุ่นได้มากกว่า) HStringTemplate ยังทำงานได้ดีกับทุกเฟรมเวิร์กเท่าที่ฉันรู้และอนุญาตให้อ่านเทมเพลตได้ทันทีเพื่อการพัฒนา พวกเขาในผ่าน quasiquotation หากต้องการ การสนับสนุน qq อาจจะเป็น 13 บรรทัดและฉันไม่สงสัยเลยว่าการปล้นสามารถเพิ่มได้เล็กน้อยมีความต้องการ
sclv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.