Zig용 타입 세이프 HTML 템플릿 라이브러리 zt, 컴파일 타임에 템플릿 검사하고 기본 이스케이프 적용
- zt는 Templ을 Zig로 옮긴 라이브러리로, 템플릿을
zig build때 Zig 코드로 변환함 - 템플릿이 앱 코드를 import할 수 있어서 모든 매개변수가 타입 검사를 받고, 렌더링할 수 없는 값은 Zig 컴파일러가 잡아냄
- 모든 동적 값은 기본으로 HTML 이스케이프되고, href나 src 같은 URL 속성은 위험한 스킴이 있는지 검사함
- 원본 HTML 출력은 {!value} 문법으로 명시적으로 요청해야 해서 템플릿에서 쉽게 눈에 띔
- 생성된 코드는 std.Io.Writer에 쓰기만 하므로 소켓에 바로 쓰거나 버퍼에 모을 수 있음
Hacker News opinions
러스트 매크로로 별도 파일이나 새 문법 없이 이걸 할 수 있다는 게 진짜 좋더라
이건 HTML이 아니잖아. 러스트 파서 규칙을 따르는 새 DSL을 배워야 하니까 같은 게 아님
그럼 결국 새 문법을 발명한 거임
tsx랑 Elixir EEx 사이쯤 되는 느낌임. Kotlin 타입 세이프 빌더도 비슷한 방향임
Django 템플릿은 텍스트 포맷팅 수준이라 잘못된 HTML이나 틀린 템플릿도 조용히 통과해서 문제임
예전에 Mustache가 잠깐 유행했는데 언어 간 템플릿 재사용은 실제로 별로 필요 없어서 금방 죽었음
브라우저 HTML imports는 2014년 Chrome 36에 나와서 2018년에 deprecated, 2019년에 퇴출됐음
문자열 리터럴로 HTML 만드는 방식은 이스케이프 실수 한 번이면 인젝션이 나는데, 템플릿 엔진은 이스케이프를 체계적으로 챙겨줘서 나는 엔진을 씀
Zig 표준 라이브러리 버그가 꽤 많은 것 같고, IO 인터페이스가 cancellation 때문에 고생하는 것 같음