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)