Zig의 타입 안전한 HTML 템플릿

1 hour ago 3

zt는 HTML과 Zig 코드를 섞어 작성한 템플릿을 zig build 중 Zig 코드로 변환하며, 입력 타입과 렌더링 오류를 컴파일 시점에 검사함 생성 코드는 std.Io.Writer 에 직접 출력하며, 메모리 할당이나 중간 상태 없이 소켓에 쓰거나 버퍼에 결과를 모을 수 있음 동적 값은 텍스트와 속성에서 기본적으로 HTML 이스케이프되며, URL 속성의 위험한 스킴도 검사하지만 모든 XSS를 막는 것은 아님 재사용 가능한 컴포넌트와 @children 기반 레이아웃을 지원하며, Zig의 if, for, switch와 페이로드 캡처를 그대로 사용할 수 있음 여러 사람이 사용 중이지만 아직 성숙한 프로젝트는 아니며, 일반 텍스트와 제어문 사이의 구문 모호성을 없애기 위한 문법 변경도 검토 중임 Zig로 웹 개발을 다시 시도한 이유 개발 경험은 2000년 무렵 PHP 3.0 출시 직후부터 시작됐으며, 순수 PHP, Python 문자열 연결, PHP의 Smarty, Perl의 Template Toolkit, Python의 Jinja/Django 템플릿을 거쳤음 SPA와 JavaScript 프레임워크 중심으로 흐름이 바뀐 뒤에는 프런트엔드 작업을 중단했음 Zig를 시작한 지 2년이 지난 시점에, JSON이나 MessagePack을 출력하는 API 백엔드용으로 만든 zio 와 Dusty 를 통해 웹 개발도 가능하다고 판단함 아레나 할당자를 적절히 쓰면 웹 개발에서 다루는 수많은 문자열을 개별적으로 해제할 필요가 없음 Zig의 comptime을 활용하면 성능상 이점을 유지하면서 고수준 인터페이스를 만들 수 있음 htmx나 Datastar를 이용하면 JavaScript/TypeScript를 직접 작성하지 않고도 SPA를 만들 수 있음 템플릿 라이브러리의 네 가지 요구사항 문자열 연결로 과거 CGI 방식에 돌아가는 대신, 다음 네 가지 조건을 충족하는 템플릿 라이브러리가 필요했음 타입 안전성: 모든 입력에 타입을 지정하고 컴파일 시점에 검사해 런타임 템플릿 오류를 피함 성능: 메모리 할당과 중간 상태 없이 std.Io.Writer에 직접 출력함 안전한 기본값: XSS를 줄이기 위해 모든 입력을 기본적으로 이스케이프함 HTML에 가까운 작성 경험: 작성하기 까다로운 Zig 기반 DSL을 피함 기존 해결책 중 모든 조건을 충족하는 것은 찾지 못했지만, Ziex 에서 JavaScript 밖에서도 JSX 방식을 구현할 수 있다는 가...

Read Entire Article