TL;DR
- Wizard는 교육과 연구를 위해 설계된 완전한 기능의 WebAssembly(Wasm) 엔진으로, 대부분의 Wasm 표준 기능과 Wasm 3.0을 지원함.
- Virgil로 구현되어 유연하고 이해하기 쉬우며, 계측·실험·수정에 적합함.
- x86-64-linux에서는 손으로 작성한 인터프리터가 단순 인터프리터보다 거의 40배 빠르고, 다른 엔진의 인터프리터 계층만큼 빠름.
- x86-darwin, x86-linux, x86-64-linux, JVM용 JAR, Wasm을 대상으로 하며, Wasm으로 컴파일한 Wizard를 실행하는 자체 호스팅도 지원함.
- Wizard는 현재 두 인터프리터와 연구 프로젝트들을 제공하며, 베이스라인 컴파일러와 최적화 컴파일러는 이후 추가 예정임.
Wizard 연구 엔진
- Wizard 연구 엔진은 교육과 연구를 위해 설계된 완전한 기능의 WebAssembly 엔진(가상 머신)임.
- 구현은 유연하고 이해하기 쉽게 구성되어 계측, 실험, 수정에 적합함.
- 빠르고 가벼우며 안전하고 가비지 컬렉션을 지원하는 프로그래밍 언어 Virgil로 작성됨.
기능 지원
- Wizard는 Wasm 3.0의 모든 기능을 포함해 Wasm 표준 기능 대부분을 지원함.
- 최신 기능은 개발 중이며, 실행 계층에 따라 지원 수준이 다름. 실행 계층은 V3 인터프리터(
v3-int), 고속 인터프리터(fast-int), 단일 패스 컴파일러(spc)로 구성됨. - 기능별 지원 현황은 다음과 같음.
- Wasm MVP,
multi-value,reference-types,bulk-memory, SIMD,tail-call,multi-memory,gc,function-references,extended-const,exception-handling,relaxed-simd,memory64,stack-switching:load,v3-int,fast-int,spc모두 지원. custom-page-sizes: 표에 표시된 두 실행 계층에서 지원.wide-arithmetic: 표에 표시된 네 실행 계층 모두 지원.legacy EH:load,v3-int에서 지원되고fast-int,spc에서는 부분 지원으로 표시됨.threads:load에서 지원되고 나머지 두 실행 계층에서는 부분 지원으로 표시됨.- Wizard는 Wasm 명세 저장소와 제안 저장소의 명세 테스트처럼
.bin.wast형식으로 지정된 테스트 케이스를 실행할 수 있음. - 간단한 프로그램 실행에 적합한 소규모 임베딩 환경을 지원함.
- Wizard의 WASI 지원은 개발 중임.
지원 대상
- Wizard는 Virgil로 작성되어 Virgil이 현재 지원하는 모든 대상으로 실행되며, 다음을 포함함.
x86-darwin: 32비트 Darwin 커널(macOS)x86-linux: 32비트 Linux 커널x86-64-linux: 64비트 Linux 커널jar: Java 가상 머신용 JAR 파일wasm: 모든 Wasm 엔진에서 실행되는 WebAssembly 모듈- Wizard 자체를 Wasm으로 컴파일할 수 있어 완전한 자체 호스팅이 가능하며, Wasm으로 컴파일한 Wizard가 Wizard 사본을 실행할 수 있음.
x86-64-linux대상에는 특수 지원이 있으며, 손으로 작성한 고속 인터프리터가 단순 인터프리터보다 거의 40배 빠르고 다른 엔진의 인터프리터 계층만큼 빠름.
설계 및 구현
- 기능 집합에 비해 아키텍처가 매우 단순함.
- 아키텍처는 궁극적인 성능보다 유연성과 가독성에 중점을 두며, 언어 및 가상 머신 연구와 실험에 더 적합함.
- 빠르고 가벼운 프로그래밍 언어 Virgil로 구현됨.
- Virgil은 배우기 쉬우며, Wizard를 약 1메가바이트 크기의 단일 네이티브 바이너리로 컴파일할 수 있음.
- 전체 프로덕션 빌드가 1초 미만으로 완료되어 개발 피드백 주기가 빠름.
- Virgil은 가비지 컬렉션을 지원하므로 GC 같은 Wasm 제안은 기반 언어의 가비지 컬렉터를 재사용하며, 그 결과 Wizard가 작고 이해하기 쉬운 상태를 유지함.
- Wizard는 Wasm 바이트코드를 빠르게 제자리에서 해석하는 최초의 Wasm 엔진임.
- 현재 두 인터프리터를 제공함.
- 모든 지원 대상에서 실행되는 읽기 쉽고 직관적인 인터프리터
- 손으로 작성한
x86-64어셈블리로 구현되어x86-64-linux에서만 실행되는 고속 인터프리터 - 두 인터프리터 모두 코드 재작성 없이 바이트코드를 제자리에서 실행해 단순성과 낮은 메모리 오버헤드를 유지함.
- 향후 베이스라인 컴파일러와 최적화 컴파일러를 갖춰 프로덕션 엔진의 성능에 맞출 예정임.
문서
- 최신 문서는 저장소의 구현 내용임.
- Wizard 내부 구조는 Design 문서에서 확인할 수 있음.
- Wizard의 빌드 및 테스트 방법을 안내함.
- Wizard의 추적 옵션 사용법을 안내함.
- 분석을 위한 내장 모니터 사용법을 안내함.
- 계측용 사용자 정의 모니터 제작 방법을 안내함.
연구 프로젝트
- 현재 여러 연구 프로젝트를 지원함.
- Fast-int: Wasm용 고속 제자리 인터프리터
- Wasm-R3: Wasm용 기록·축소·재생(record-reduce-replay) 프레임워크
- Whamm!: Wasm용 계측 도메인 특화 언어(DSL)
- Stack-switching: Wizard용 WasmFX 고속 구현
라이선스
- Apache License, Version 2.0으로 배포됨. (
rt/LICENSE)
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요