Wasmtime 47에 GC·예외 처리 기본 탑재

원제: GC and Exceptions in Wasmtime

왜 중요한가

GC·예외 처리의 기본 활성화로 Java, Kotlin, Python 등 고수준 언어의 WebAssembly 대상 컴파일 효율이 크게 향상돼 Wasm 생태계 확장이 가속될 전망이다.

Bytecode Alliance는 2026년 7월 20일, WebAssembly 런타임 Wasmtime 47을 릴리스하고 Wasm GC 및 예외 처리(Exceptions) 제안을 기본 활성화했다고 발표했다. 수년간의 엔지니어링 작업의 결과물로, 더 많은 프로그래밍 언어가 WebAssembly를 효율적으로 컴파일 타깃으로 활용할 수 있게 됐다.

Bytecode Alliance의 Nick Fitzgerald는 Wasmtime 47 릴리스에서 Wasm GC와 예외 처리 제안이 기본 활성화됐다고 밝혔다.

【Wasm GC】

종래의 WebAssembly에서 객체·참조 기반 고수준 언어는 가비지 컬렉터를 .wasm 바이너리 내부에 직접 내장해야 했다. 이로 인해 바이너리 크기가 비대해지고, 네이티브 코드에서 활용 가능한 스택 맵·스택 워킹 기법을 사용할 수 없는 문제가 있었다. Wasm GC 제안은 Wasm 프로그램이 자체 struct·array 타입과 서브타이핑 관계를 정의할 수 있도록 언어를 확장한다. 객체의 수명 관리는 런타임이 담당하며, 언어 툴체인은 WebAssembly 런타임의 컬렉터를 그대로 활용할 수 있다.

【Wasm 예외 처리】

예외 처리 제안 이전에는 툴체인이 정상 반환과 예외 발생 여부를 함께 반환하는 커스텀 호출 규약을 구현해야 했고, 모든 호출 지점에서 조건 분기 코드가 필요했다. 이는 바이너리 크기 증가와 런타임 오버헤드의 원인이었다. 새 제안은 throw·try/catch 구문을 도입해 런타임이 언와인딩 방식으로 예외를 처리하도록 한다. 이로써 정상 반환 경로의 오버헤드가 제로가 되고 실행 속도 향상과 바이너리 크기 감소가 기대된다.

【Wasmtime의 GC 구현】

Wasmtime은 Cheney 방식의 세미스페이스 복사 컬렉터를 채택했다. GC 힙은 새 객체를 할당하는 '활성' 반공간과 '유휴' 반공간으로 나뉜다. 할당은 활성 반공간 내의 범프 포인터 방식으로 처리되며, 읽기·쓰기 배리어가 불필요하다. GC 힙의 구현과 샌드박스화에는 WebAssembly 선형 메모리를 재활용하며, GC 객체 참조는 네이티브 포인터가 아닌 32비트 인덱스로 표현된다.

출처

bytecodealliance.org — 원문 읽기 →