Haskell의 Snap 및 Yesod 웹 프레임 워크 비교


231

이 뉴스의 두 Haskell 웹 프레임 워크는 최근 Yesod (0.8)와 Snap (0.4)입니다.

Yesod가 현재 Snap보다 더 많은 기능을 지원한다는 것은 분명합니다. 그러나 HTML, CSS 및 Javascript에 Yesod가 사용하는 구문을 견딜 수 없습니다.

그래서 Snap 대신에 잃어버린 것을 이해하고 싶습니다. 예를 들어 데이터베이스 지원이없는 것 같습니다. 세션은 어떻습니까? 다른 기능들?


138
개인적으로 나는 HTML이 HTML에 사용하는 구문을 참을 수 없다;)
Rehno Lindeque

2
html을 생성하기위한 햄릿 템플릿 구문에 대해 싫은 점은 무엇입니까?
mxc

6
구문이 다르기 때문에 Dreamweaver와 Yesod간에 이동할 수 없다는 점이 마음에 들지 않습니다.
Muchin

6
일반적으로 Yesod 팀은 새로운 아이디어에 매우 개방적입니다. 이제는 유스 케이스를 알고 있으므로 적절한 솔루션을 추천 할 수 있습니다. SO가 공동 토론에 최적의 장소가 아니기 때문에 웹 개발 목록에 이메일을 보내면 가장 좋습니다.
Michael Snoyman

76
사람들은 여전히 Dreamweaver를 사용 합니까? ;)
OJ.

답변:


236

전체 공개 : 저는 Snap의 주요 개발자 중 한 명입니다.

우선 Snap이 무엇인지에 대해 이야기 해 봅시다. 현재 Snap 팀은 해커 지에서 스냅 코어, 스냅 서버, 습격, 스냅 및 xmlhtml의 5 가지 프로젝트를 유지 관리합니다. snap-server는 snap-core에 의해 정의 된 API를 제공하는 웹 서버입니다. 습격은 템플릿 시스템입니다. xmlhtml은 heist에서 사용하는 XML / HTML 구문 분석 및 렌더링 라이브러리입니다. snap은 모든 것을 하나로 묶고 웹 앱을 구성 가능하고 모듈화 할 수있는 강력한 snaplet API를 제공하는 포괄적 인 프로젝트입니다.

Yesod에는 해킹에 관한 많은 프로젝트가 있습니다. 이들 중 대부분 (모두?)이 예 소드 범주에 나열됩니다 . 주목할만한 것들 중 일부는 yesod-core, warp, persistence 및 hamlet입니다.

Haskell 웹 개발의 현실은 생각보다 배타적이거나 선택의 여지가 적다는 것입니다. 일반적으로 프로젝트는 매우 느슨하게 결합되어 있으며 상호 교환이 가능합니다. warp (Yesod 팀의 웹 서버), Heist (Snap 팀의 템플릿 시스템) 및 acid-state (Happstack 프로젝트의 지속성 시스템)를 사용하여 웹 사이트를 구축 할 수 있습니다. 햄릿 또는 영구 스냅 서버를 사용할 수도 있습니다.

즉, 두 프로젝트에는 분명히 약간의 차이가 있습니다. 내가 객관적으로 지적 할 수있는 가장 큰 차이점은 Yesod 프로젝트는 일반적으로 간결한 DSL을 만들기 위해 템플릿 Haskell과 준 따옴표를 많이 사용하는 반면 Snap 프로젝트는 컴포지션을 선호하는 결합 라이브러리를 만드는 것입니다. 제가 생각할 수있는 다른 차이점은 Snap에 대해 주관적으로 편향 될 것입니다. 두 프로젝트의 이름을 딴 우산 패키지는 분명히 위에서 언급 한 구성 요소를 구체적으로 선택하게 될 것이며 이러한 선택은 프로젝트 종속성에 반영됩니다. 그러나 그렇다고해서 다른 것을 가져 와서 사용할 수는 없습니다.

Snap에는 세션인증 , 여러 데이터베이스에 대한 인터페이스 및 임의로 중첩 된 동적 크기 조정 가능 목록에 대한 사전 패키지 된 지원을 포함 하는 소화 기능을 사용 하는 멋진 양식 처리 ( 여기여기 ) 가 있습니다. 이것들은 플러그 가능한 스냅 릿의 생태계의 일부일뿐입니다 . 세션 및 인증 스냅 릿은 백엔드와 무관하게 작성됩니다. 따라서 적은 양의 글루 코드를 사용하면 생각할 수있는 거의 모든 지속성 시스템과 함께 사용할 수 있어야합니다. 앞으로 Snap은 가능한 한 자주이 정책을 고수 할 것입니다.

대부분의 경우 Snap vs Yesod vs Happstack의 선택은 기능의 문제가 아니라 개인적인 취향의 하나 이상이라고 생각합니다. 누군가 프레임 워크 중 하나에 다른 프레임 워크에없는 것이 있다고 말할 때마다 대부분 필요한 패키지를 가져 와서 다른 프레임 워크에서 누락 된 기능을 가져 오는 것이 매우 쉽습니다.

편집 : 큰 3 개의 Haskell 웹 프레임 워크에 대한 자세한 비교는 최근 블로그 게시물을 확인하십시오 . 좀 더 광범위한 일반화를 사용하는 대략적인 (그러나 더 유용한) 비교는 내 Haskell Web Framework 비교 매트릭스를 참조하십시오.


34
하스켈 웹 개발에서 우호적 인 경쟁과 믹스 앤 매치의 이중 특성은 매우 유망한 것으로 보입니다. 즉, 가능한 빨리 해킹에 스냅 인증을받는 것이 좋습니다. 세션과 인증은 큰 문제입니다.
Dan Burton

2
Yesod는 또한 mongodb에 대한 아직 출시되지 않은 인터페이스를 가지고 있습니다.
mxc

4
개발 속도는 나에게 영향을 미치므로이 질문은 스냅이 정체 된 상태에서 Yesod에 기능 추가 기능이 추가 된 것처럼 보입니다. 6 개월 전에 처음 들어 본 이후로 새로운 기능이 무엇인지 잘 모릅니다.
Muchin

3
스냅의 운동량은 꽤 좋습니다. 우선, 프로젝트가 5 월까지 공개적으로 시작되지 않았음에도 불구하고 작년에 가장 많이 다운로드 된 웹 프레임 워크였습니다. 둘째, 12 월 0.3 릴리스 이후 활동이 크게 증가했습니다. 세션, auth, mongoDB, xmlhtml 라이브러리 등을위한 라이브러리는 2011 년에 대부분 새로운 공헌자들이 작업하고 있습니다. 일반적으로 #snapframework IRC 채널에서 30 명 이상을 찾을 수 있습니다. 확실히 활발한 프로젝트입니다.
mightybyte

2
당시 Snap이 더 큰 모멘텀을 보였기 때문에 Snap에 급락했습니다. 구성 요소의 품질에 깊은 인상을 받았습니다. 습격은 아름답고 간단하고 깔끔한 디자인으로, 내가 사용한 모든 언어의 웹 프레임 워크에서 본 최고의 템플릿 시스템 일 것입니다. Snap 모나드는 작업하기 쉽고, 예상치 못한 놀라움을 줄이면서 거의 작동합니다. 나는 그들이 당신이 끊임없이 그들 사이에서 변환 할 때 ByteStrings 또는 Text를 표준화하기를 희망합니다!
Andrew

223

공정한 경고 : 저는 Yesod의 수석 개발자입니다.

Javascript 구문에 대해 마음에 들지 않는 것이 확실하지 않습니다. 변수 보간을 사용하는 일반 Javascript입니다. CSS에 관해서는 이제 예스 (Yucius)를 사용하여 일반 CSS를 사용할 수 있습니다. HTML의 경우 Heist (Snap이 사용하는 것)를 포함하여 원하는 다른 라이브러리를 쉽게 사용할 수 있습니다. 즉 스냅조차하지 않는 경우는, 재미있는 것은 약간은 CSS / 자바 스크립트 구문을 통해 Yesod을 건너입니다 말했다 가지고 그것을 위해 구문을. 정적 파일 솔루션에 오신 것을 환영합니다.

Yesod는 인증 / 권한 부여, 형식 안전 URL, 위젯, 이메일 및 사방에 작은 것들 (빵 부스러기, 메시지, 최종 목적지)을 완벽하게 지원합니다. 또한 Yesod에는 주석 및 마크 다운과 같은 다양한 부가 기능 패키지 세트와 예제를 위해 선택할 수있는 실제 코드베이스가 있습니다. 이들 중 하나가 당신에게 매력적이라면, 당신의 대안이 그들을 지원하는지 확인하고 싶을 것입니다.


매우 새롭고 아직 문서를 업데이트 할 기회가 없었습니다. 그러나 기본적으로 일반 CSS를 입력하고 Hamlet / Cassius / Julius와 같이 보간에 # {...} 및 @ {...}을 사용하십시오. 중첩도 지원되지만이 주석보다 설명하기에는 약간의 공간이 필요합니다.). web-devel으로 이메일을 보내면 문서가 따라 오는 동안 자세한 내용을 알려줄 수 있습니다.
Michael Snoyman

Julius코드를 압축하지 않고 사용할 변경이 있습니까? 나는 usig Google Closure이고 컴파일러에 대한 주석에 메타 데이터를 보관해야합니다.
Andras Gyomrey

1
나는 이것이 그런 것을 논의하기에 좋은 장소라고 생각하지 않지만 Julius 코드를 압축 할 필요는 없습니다 (기본적으로 수행하지는 않습니다). 더 많은 도움이 필요하면 별도의 SO 질문이나 메일 링리스트 스레드가 더 좋습니다.
Michael Snoyman

29

주고 마을 try- 당신은 수도 결국 그것을 좋아. 피상적 인 수준에서 부정적인 반응은 드물지 않습니다. 그러나 실제로 햄릿을 사용한 사람은 불평하지 않습니다.

또한 Happstack을 사용하지 않는 이유는 무엇입니까? 그들이 "뉴스 속"이 아니었다 고해서 그들이 확실한 틀이 없다는 것을 의미하지는 않습니다.


21
경쟁 프레임 워크를 시험해볼 것을 제안하는 yesod의 관리자. 우리가 가진 위대한 공동체.
mxc

12

이전 버전의 yesod를 참조했을 것입니다. 최신 yesod 버전에는 html, javascript 및 css에 대한 일반 구문이 있습니다.

yesod의 템플릿 라이브러리 햄릿의 html 구문은 완전한 열기 및 닫기 태그와 모든 일반 html 속성이있는 일반 html입니다. 예. 닫기 태그를 생략하고 id 및 클래스 속성에 대한 바로 가기를 사용할 수 있습니다. 그러나 당신은 할 필요가 없습니다. 평범한 html을 계속 쓸 수 있습니다.

Snap의 템플릿 라이브러리 Heist와 마찬가지로 html 템플릿은 별도의 파일에있을 수 있습니다.

Java 스크립트 템플릿 (julius)은 일반 Javascript 파일이며 별도의 파일에도 있습니다.

CSS 템플릿은 실제로 다른 구문을 사용하지만 최신 버전의 yesod는 이제 일반 CSS 구문도 제공합니다.

Heist를 사용하면 안전한 유형의 URL이 없습니다.

습격에서 html 템플릿은 매번 하드 드라이브에서 읽습니다. Yesod는 모든 템플릿을 실행 파일로 직접 컴파일합니다. 하드 드라이브에서 파일을 읽지 못했습니다. 따라서 응답 속도가 훨씬 빠릅니다. 벤치 마크를 직접 볼 수 있습니다.

Yesod에서 잘 작동하는 위젯을 만들 수 있습니다. Snap은 위젯을 전혀 다루지 않습니다. 당신은 자신의 롤을해야합니다.


1
위에서 설명했듯이 유형 안전 URL에 대한 귀하의 의견은 정확하지 않으며 내가 언급 한 오해를 지속시키는 데 도움이됩니다. "Snap"대신 "Heist"라고 말하면 더 정확합니다.
mightybyte

3
템플릿 엔진과 라우팅 메커니즘의 조합으로 타입 안전 URL이 가능합니다. 그래서 그것은 단지 습격 만이 아닙니다. 햄릿을 사용하는 것만으로는 Snap에서 유형 안전 URL을 얻을 수 없습니다.
Vagif Verdi

1
나는 햄릿에 대해 이야기하고 있지 않습니다. 웹 라우팅 패키지는 원래 Snap과 동일한 라우팅 인터페이스를 가진 Happstack 용으로 작성되었습니다. 아마도 작은 접착제 코드가 필요할 것입니다. 그러나 그것은 거의 항상 그럴 것입니다.
mightybyte

4
나는 그 "접착제 코드"의 작은 점을 만들지 않을 것입니다. 아래에서 언급하는 Template Haskell은 안전하고 간결한 방식으로 "접착제 코드"를 가능하게합니다. 나는 그것을 다루기 위해 작은 블로그 글을 썼다 : yesodweb.com/blog/yesod-template-haskell
Michael Snoyman

3
HStringTemplate은 다른 (약하지만 유연하지만) 템플릿 접근 방식으로 가고 싶은 사람들을 위해 모든 프레임 워크에서 잘 작동하며 개발을 위해 템플릿을 즉시 읽고, 제작을 위해 캐싱하고, 컴파일 할 수 있습니다 원한다면 준 따옴표로 묶습니다. QQ 지원은 아마도 13 줄일 것입니다.
sclv
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.