Wasm, 스택 머신이라고? 사실은 레지스터 머신에 가깝다!

by DD
1개월 전
조회수 6

Wasm(WebAssembly)은 스택 머신으로 알려져 있지만, 실제로는 레지스터 머신에 가까운 구조를 가짐

기존 스택 머신과 달리 스택 조작 명령어(Stack Manipulation Instructions)가 부족하여 최적화에 제약이 존재함

공통 부분식 제거(Common Subexpression Elimination)와 같은 최적화 기법 적용이 어려움

레지스터 머신(Register Machine) 관점에서 Wasm을 이해하는 것이 더 적합하다는 분석

Wasm의 스택 머신 vs 레지스터 머신

일반적으로 Wasm(WebAssembly)은 스택 머신으로 간주되지만, 저자는 Wasm의 스택 조작 명령어(Stack Manipulation Instructions) 부족을 지적하며 레지스터 머신에 가깝다고 주장한다. 기존 스택 머신은 `dup`, `swap`과 같은 명령어를 통해 스택 내 값의 재사용을 용이하게 하지만, Wasm은 이러한 기능이 제한적이다. 이러한 차이점은 Wasm 컴파일러가 공통 부분식 제거(Common Subexpression Elimination)와 같은 최적화를 수행하는 데 어려움을 야기한다.

Wasm의 최적화 제약

Wasm의 스택 조작 명령어 부재는 컴파일러가 최적화(Optimization)를 수행하는 데 제약을 가한다. 예를 들어, `x = 1 + 2 + 3 + 4`와 `y = x * x * x`와 같은 코드를 최적화하기 위해, 레지스터 머신은 `x` 값을 재사용할 수 있지만, Wasm은 변수를 도입해야 한다. 이는 Wasm이 레지스터 머신(Register Machine)처럼 동작하게 되며, 스택 머신의 장점을 활용하기 어렵게 만든다. 결과적으로 Wasm은 단순한 표현식 외에는 최적화에 취약하다.

Wasm의 아키텍처적 특징

Wasm은 역 폴란드 표기법(Reverse Polish Notation)을 사용하여 표현식을 인코딩하지만, 이는 단지 인코딩 방식일 뿐이다. 텍스트 Wasm에서는 LISP와 유사한 표기법을 사용할 수도 있다. 저자는 Wasm의 이러한 특징을 바탕으로, Wasm을 레지스터 머신(Register Machine)으로 간주하는 것이 더 적절하다고 주장한다. 이는 Wasm의 설계가 스택 머신의 경험을 완전히 반영하지 않음을 시사한다.

Wasm의 제약과 미래

Wasm의 제한적인 스택 조작(Stack Manipulation)은 컴파일러 최적화에 영향을 미치며, 기존 스택 머신과는 다른 접근 방식을 요구한다. 저자는 Wasm이 SSA(Static Single Assignment)로 변환될 수 있으며, 입력 형식은 중요하지 않다고 언급한다. 하지만, Wasm의 단순한 스택 기반 구현은 채택에 긍정적인 영향을 미쳤을 수 있다. 결론적으로, Wasm은 스택 머신과 다른 특성을 가지며, 개발자는 이를 인지해야 한다.

Wasm is not quite a stack machine

댓글 0

첫 번째 댓글을 남겨보세요!