Kiesel Devlog #15: Release 0.4.0
Kiesel 개발 기록 #15: 0.4.0 출시
Zig로 작성한 JavaScript 엔진 Kiesel이 Zig 0.17로 업데이트되고 0.4.0을 출시했습니다. 명령행 인자·환경 변수 API, Iterator 헬퍼, SerenityOS 포트와 인라인 캐시 개선을 담았으며, 인라인 캐시 변경은 마이크로벤치마크에서 20~30% 속도 향상을 보였습니다.
- 주제
AI 요약
Kiesel이 Zig 0.17 지원을 마치고 0.4.0을 출시했습니다. 이번 릴리스에는 2개월 반 동안 쌓인 커밋 64개가 들어갔습니다. 개발자는 실제 프로그램에서 필요한 기능이 부족하다는 점을 보완하려고 명령행 인자와 환경 변수를 읽는 API를 추가했습니다.
프로그램 작성에 필요한 API
새 API Kiesel.args와 Kiesel.env를 제공하고, 파일 입출력 기능도 갖췄습니다. 이에 따라 표준 입력을 읽거나 파일을 출력하는 간단한 cat(1) 복제 프로그램을 Kiesel로 작성할 수 있습니다. 예제는 인자를 받아 파일 이름 목록을 구성하고, 파일이 없으면 표준 입력을 읽습니다. 파일 이름이 있으면 각 파일의 내용을 읽어 출력합니다.
Iterator 헬퍼와 제안 기능
JavaScript는 기본 Iterator 프로토콜에서 출발해 Iterator.prototype 메서드를 늘려 왔습니다. 글에서는 2024년 Iterator Helpers, 2025년 Iterator Sequencing에 이어 올해 Joint Iteration, Iterator Join, Iterator Includes, Iterator Chunking 제안이 나왔다고 설명합니다. Kiesel은 이 가운데 join, includes, chunks를 새로 구현했습니다. 예제에서는 무한 카운터에서 앞의 세 값을 더하는 문자열을 만들고, 5가 포함되는지 확인하며, 값을 3개씩 묶습니다. 아직 Stage 3인 Await Dictionary 제안도 구현했습니다.
SerenityOS 포트와 플랫폼 지원
Kiesel을 SerenityOS로 포팅했습니다. 이를 위해 Zig에 SerenityOS 타깃 지원을 여러 차례 반영했고, SerenityOS의 LibC와 커널도 일부 수정했습니다. Kiesel 패키지는 최소한의 수정만 거친 Zig 표준 라이브러리와 함께 교차 컴파일됩니다. 남은 변경 사항도 Zig 0.18 출시 전까지 upstream에 반영하길 바란다고 밝혔습니다. dos.zig의 부활로 DOS 포트도 가능해졌고, OpenBSD와 NetBSD 바이너리는 이제 CI에서 빌드합니다.
인라인 캐시 개선
인라인 캐시(Inline Cache)는 JavaScript 엔진을 비롯한 동적 언어 구현체에서 널리 쓰는 최적화입니다. Kiesel에는 기존에도 인라인 캐시가 있었지만, 올해 바이트코드 인터프리터를 다시 작성하면서 단형(monomorphic) 속성 캐시만 기본적으로 남아 있었습니다. 이번에는 다형(polymorphic) 속성 접근을 최대 네 종류까지 처리하고, 그 이상은 메가모픽(megamorphic)으로 전환하도록 보완했습니다. 계산된 속성 접근과 프로토타입 조회도 지원합니다. 캐시 구현은 모두 합쳐 수백 줄이며, 마이크로벤치마크에서 일관되게 20~30% 속도 향상을 보였습니다. 개발자는 다음 0.5.0 릴리스에서 파서 속도 개선을 예고했습니다.
Lobsters 반응
- @bitshift — 블로그 글에는 나오지 않았는데, Kiesel(/ˈkiːzəl/)은 작성자가 Zig를 배우려고 처음부터 만든 JavaScript 엔진이며, 궁극적으로 최신 ECMAScript 표준을 완전히 지원하는 것이 목표입니다. 작성자가 이 글을 읽는다면 릴리스 글에 프로젝트 소개를 짧게 넣어주면 좋겠습니다. 독자 중에는 Kiesel을 모르는 사람도 있을 수 있습니다.
원문: Linus.dev / 번역·요약: Trawling