# Wasm 2.0 공식 릴리즈

> Clean Markdown view of GeekNews topic #20812. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20812](https://news.hada.io/topic?id=20812)
- GeekNews Markdown: [https://news.hada.io/topic/20812.md](https://news.hada.io/topic/20812.md)
- Type: news
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-05-10T12:26:29+09:00
- Updated: 2025-05-10T12:26:29+09:00
- Original source: [w3.org](https://www.w3.org/TR/wasm-core-2/)
- Points: 11
- Comments: 2

## Summary

**Wasm 2.0**의 공식 사양이 발표되었으며, 이미 많은 주요 구현체에서 해당 버전을 지원하고 있습니다. 새로운 **에버그린 모델**이 도입되어, 스펙의 권고안이 지속적으로 최신상태로 유지됩니다. 주요 추가 기능으로는 **벡터 명령어(SIMD)**, **벌크 메모리 명령어**, **멀티-밸류 반환**, **레퍼런스 타입** 등이 있습니다. 기존 1.0과 완벽하게 **호환**되며, 차기 버전 준비도 진행 중입니다.

## Topic Body

- **Wasm 2.0 스펙**이 공식적으로 발표됨  
- Wasm Community와 Working Groups가 2022년부터 스펙을 완성했고, 주요 구현체는 이미 2.0을 지원하고 있었음  
- 2.0부터는 **에버그린 모델**이 도입되어, Candidate Recommendation 문서가 지속적으로 최신 상태로 갱신됨  
- 새 버전이 발표될 때마다 최종 권고안으로 이동시키지 않고, 현재의 권고안 초안이 표준으로 간주됨  
  
  
### Wasm 2.0의 주요 기능 및 추가 사항  
  
- **벡터 명령어(SIMD)**: 236개의 새로운 명령어 추가로 현대 CPU의 128비트 SIMD 기능 활용 가능, 고성능 오디오/비디오 코덱, 머신러닝, 암호화 등에 효율적임  
- **벌크 메모리 명령어**: 메모리와 테이블의 빠른 복사 및 초기화가 가능한 명령어 세트 추가됨  
- **멀티-밸류 반환**: 함수와 블록에서 여러 값을 반환할 수 있어 호출 규약이 개선되고, 추가적인 프로그램 변환이 가능해짐  
- **레퍼런스 타입**: 함수에 대한 참조나 외부 객체(예: JavaScript 값) 포인터를 불투명한 1급 값으로 지원, 테이블이 이 레퍼런스 값의 저장소로 활용될 수 있음, 테이블을 다루는 명령어 및 다중 테이블 정의가 가능해짐  
- **논트래핑 변환**: 부동소수점에서 정수로의 변환 시 예기치 않은 트랩이 발생하지 않는 변환 명령어 도입됨  
- **서명 확장 명령어**: 부호 있는 정수의 폭을 직접 확장하는 명령어가 추가되어 이전보다 메모리 접근 없이 확장이 가능해짐  
  
### 하위 호환성 및 향후 전망  
  
- Wasm 2.0은 **1.0과 완벽하게 호환**되어 기존 프로그램이 그대로 동작함  
- Wasm 3.0 출시도 곧 예정되어 있음

## Comments



### Comment 38439

- Author: caniel
- Created: 2025-05-10T20:57:50+09:00
- Points: 1

WA!(SM)

### Comment 38424

- Author: neo
- Created: 2025-05-10T12:27:38+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43934711)   
* 2025년 3월 WASM 2.0 발표 소식을 요약해보면, **128비트 SIMD** 등 236개의 신규 벡터 명령어로 영상/음성 코덱, **머신러닝**과 암호화 응용의 성능을 크게 높였음, **버크 메모리** 명령어로 빠른 메모리 복사/초기화 지원, 함수가 이제 다중 결과를 반환할 수 있어 빠른 호출 규약과 간접참조 감소 지원, **참조 타입**으로 외부 객체(JavaScript 값 등)에 대한 포인터를 첫급 값으로 취급, 여러 타입의 테이블 선언 가능, 비트폭 확장 명령어 및 예기치 않은 트랩 없는 부동소수점 변환 추가 등으로 대폭적 업그레이드임  
  * Rust+LLVM은 **ABI 호환성** 문제로서 다중 결과 반환 지원을 실제론 아직 활용하지 못하고 있음, Clang 쪽 상황은 잘 모르겠음  
  * 벡터 명령어(SIMD) 부분은 너무 일찍 최적화를 추구해 복잡해진 것 같음, 그냥 **유연 사이즈 벡터** 제안을 썼으면 더 우아했을 것임  
  * 다중 결과 반환 기능은 Common Lisp 런타임 개발에도 매우 **유익**할 것임  
  * 공식 포스트 마지막에 “곧 Wasm 3.0 소개 예정”이라 쓰여있으니, 정말로 **Wasm 3.0**이 머지않아 등장할 듯함  
  * 아키텍처에 독립적이고 범용적인 ISA와, 특정 CPU SIMD를 최대한 활용하는 ISA는 양립이 불가함, 어느 한쪽을 골라야 함, 현재 Wasm2 SIMD 명령어가 충분히 범용적인지 GitHub의 **rate limit** 탓에 확인을 못 해봄  
* WebAssembly 사양은 꽤 읽기 쉬움, 하지만 사양 전문을 보고 싶지 않은 입문자에겐 **WebAssembly from the Ground Up**라는 온라인 책을 추천함, JavaScript로 컴파일러를 직접 만들며 단계별로 배우는 구성이 실습에 적합함, 무료 샘플도 있음, 참고로 내가 저자 중 한 명임  
  * 개인적으로 Ada를 좋아하는 이유는, JavaScript처럼 번거로운 U32 체크 함수 코드를 Ada에선 **서브타입**(subtype)이나 모듈로 아주 깔끔하게 처리가 가능하기 때문임  
  * WASM 코드를 인스트루먼트해서 **인프로세스 디버깅**이 가능한지 궁금함, 즉 커스텀 언어를 실시간으로 WASM으로 변환해, 웹에서 break point 및 메모리 인스펙션까지 한 번에 구현할 수 있을까 하는 궁금증임  
* 최근 1년간 WebAssembly 런타임 개발 작업을 하면서 **스펙(사양)의 엄밀함**과 잘 제공되는 테스트에 감명 받았음, 익숙해지는 데 시간이 좀 필요하지만 한 번 익히면 참 똑똑한 언어 사양임, 애매한 상황에선 사양에서 직접 생성된 레퍼런스 인터프리터가 큰 도움이 되고, 일관성 검증을 위한 스펙 테스트도 굉장히 유익함  
* 최근 Wasm Constant Time 제안이 **비활성화**(inactive)로 이동함, 실제 작업의 대부분은 2018년에 이루어졌으나, SIMD 연동과 공식 확장 통합이 미뤄진 상태임, 누군가 이 아주 중요한 작업을 이어받지 않는 한 모든 Wasm 암호화는 **타임 어택(타이밍 공격)** 에 매우 취약한 상황임  
* Wasm은 **WebAssembly**의 축약이며 약어가 아니므로 대문자 WASM으로 쓰지 않는다는 점이 인상적임  
  * 그런 논리면 WAsm이 맞는 것 아닌지 궁금함  
  * 실제로 약어더라도 다 소문자(예: scuba, radar, laser)로 쓰는 사례도 많음  
  * 잘 되기를 바람 ㅋㅋ  
* 실제로 **작동하는 WASM 앱** 목록이 궁금함, 아이디어는 좋은데 마치 DAPPs처럼 “재미로만 있는 것” 같다는 느낌이 있음, 실제 예가 있으면 좋겠음  
  * madewithwebassembly.com과 Awesome-WebAssembly-Applications 깃허브 추천함. 실제 WASM 앱이 잘 정리된 자료임  
* 이번 WASM2 릴리즈는 훌륭하지만, **고정크기 SIMD**(128비트) 도입은 아쉬움이 남음, ARM SVE처럼 컴파일러가 기기별 성능에 따라 SIMD 폭을 조절하는 유연한 방식이 더 나았을 것임  
  * 그러나 나는 오히려 고정크기 SIMD가 더 많은 활용처를 열어준다고 생각함, 벡터 명령어는 고정크기 SIMD로도 비교적 쉽게 대체할 수 있음, SIMD가 무조건 필요한 것은 아니지만 레지스터 크기 덕에 벡터화 되는 **기회적(opportunistic)** 용도도 많음, 이런 경우 상당히 유용하게 쓸 수 있음  
  * 너무 일찍 최적화를 하는 것이 문제의 근원임, 이 SIMD 이슈도 차라리 **가변크기 벡터 제안**만 따랐다면 훨씬 우아했을 것임  
* C 함수가 값을 struct로 반환할 때 **WASM**으로 컴파일이 되는지 궁금함  
  * 가능은 하지만, 현재로서는 JS로 “내보내기(export)”는 안 되는 것으로 알고 있음  
* WASM2 기능을 이미 구현한 런타임이 있는지 궁금함  
  * 대부분 이미 오래 전부터 구현해오고 있음, Wasm 커뮤니티와 워킹그룹이 2022년 초에 스펙을 확정했고, 주요 구현체들은 그 전부터 2.0을 제공해왔음, 3.0도 곧 공식화될 예정이고, 기능 중 일부는 이미 **feature flag**를 통한 상태임  
* 웹용 바이트코드는 오래된 꿈이란 생각임, C# 개발자로서 Blazor가 초창기부터 WASM을 과감하게 **선도**한 점이 인상 깊음, .NET은 WASM에서 상당히 앞서나가고 있고, 이번 2.0 변화를 기대 중임
