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

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

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

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



답변

전체 공개 : 저는 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 비교 매트릭스를 참조하십시오.


답변

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

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

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


답변

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

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


답변

이전 버전의 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은 위젯을 전혀 다루지 않습니다. 당신은 자신의 롤을해야합니다.


답변