WebAssembly-텍스트 형식
WebAssembly에는 WASM이라는 바이너리 형식의 코드가 있습니다. WebAssembly에서 텍스트 형식을 가져올 수도 있으며 WAT (WebAssembly Text 형식)라고합니다. 개발자는 WebAssembly에서 코드를 작성해서는 안되며, 대신 C, C ++ 및 Rust와 같은 고급 언어를 WebAssembly로 컴파일해야합니다.
WAT 코드
WAT 코드를 단계적으로 작성해 보겠습니다.
Step 1 − WAT의 시작점은 모듈을 선언하는 것입니다.
(module)
Step 2 − 이제 함수 형태로 몇 가지 기능을 추가해 보겠습니다.
함수는 아래와 같이 선언됩니다.
(func <parameters/result> <local variables> <function body>)
함수는 매개 변수 또는 결과가 뒤에 오는 func 키워드로 시작합니다.
매개 변수 / 결과
결과로서의 매개 변수 및 반환 값.
매개 변수는 wasm에 의해 지원되는 다음 유형을 가질 수 있습니다-
- i32 : 32 비트 정수
- i64 : 64 비트 정수
- f32 : 32 비트 부동 소수점
- f64 : 64 비트 부동 소수점
함수에 대한 매개 변수는 다음과 같이 작성됩니다.
- (매개 변수 i32)
- (매개 변수 i64)
- (매개 변수 f32)
- (매개 변수 f64)
결과는 다음과 같이 작성됩니다.
- (결과 i32)
- (결과 i64)
- (결과 f32)
- (결과 f64)
매개 변수와 반환 값이있는 함수는 다음과 같이 정의됩니다.
(func (param i32) (param i32) (result i64) <function body>)
지역 변수
지역 변수는 함수에 필요한 변수입니다. 함수에 대한 로컬 값은 다음과 같이 정의됩니다.
(func (param i32) (param i32) (local i32) (result i64) <function body>)
기능 본체
함수 본문은 수행 할 논리입니다. 최종 프로그램은 다음과 같습니다.
(module (func (param i32) (param i32) (local i32) (result i64) <function body>) )
Step 3 − 매개 변수 및 지역 변수를 읽고 설정합니다.
매개 변수와 지역 변수를 읽으려면 다음을 사용하십시오. get_local 과 set_local 명령.
Example
(module
(func (param i32) (param i32) (local i32) (result i64) get_local 0
get_local 1
get_local 2
)
)
함수 서명에 따라
get_local 0 줄 것이다 param i32
get_local 1 다음 매개 변수를 제공합니다 param i32
get_local 2 줄게 local value i32
0,1,2와 같은 숫자 값을 사용하여 매개 변수 및 지역을 참조하는 대신, 이름 앞에 달러 기호를 붙여 매개 변수 앞에 이름을 사용할 수도 있습니다.
다음 예제는 매개 변수 및 지역과 함께 이름을 사용하는 방법을 보여줍니다.
Example
(module
(func
(param $a i32)
(param $b i32)
(local $c i32)
(result i64) get_local $a get_local $b get_local $c
)
)
Step 4 − 함수 본문 및 실행 명령.
wasm에서의 실행은 스택 전략을 따릅니다. 실행 된 명령어는 스택에서 하나씩 전송됩니다. 예를 들어, get_local $ a 명령어는 값을 푸시하고 스택에서 읽습니다.
같은 지시 i32.add 그러면 스택에서 요소가 팝업됩니다.
(func (param $a i32) (param $b i32)
get_local $a
get_local $b
i32.add
)
에 대한 지침 i32.add 이다 ($a+$b). i32.add의 최종 값이 스택에 푸시되고 결과에 할당됩니다.
함수 시그니처에 선언 된 결과가있는 경우 실행이 끝날 때 스택에 하나의 값이 있어야합니다. 결과 매개 변수가없는 경우 스택은 끝에 비어 있어야합니다.
따라서 함수 본문과 함께 최종 코드는 다음과 같습니다.
(module
(func (param $a i32) (param $b i32) (result i32)
get_local $a
get_local $b
i32.add
)
)
Step 5 − 함수를 호출합니다.
함수 본문이있는 최종 코드는 4 단계에 나와 있습니다. 이제 함수를 호출하려면 함수를 내 보내야합니다.
함수를 내보내려면 0,1과 같은 색인 값으로 수행 할 수 있지만 이름을 지정할 수도 있습니다. 이름 앞에 $가 붙고 func 키워드 뒤에 추가됩니다.
Example
(module
(func $add (param $a i32) (param $b i32) (result i32)
get_local $a
get_local $b i32.add
)
)
$ add 함수는 아래와 같이 export 키워드를 사용하여 내 보내야합니다.
(module
(func $add
(param $a i32)
(param $b i32)
(result i32)
get_local $a get_local $b i32.add
)
(export "add" (func $add))
)
브라우저에서 위의 코드를 테스트하려면 바이너리 형식 (.wasm)으로 변환해야합니다. 변환 방법을 보여주는 다음 장을 참조하십시오..WAT to .WASM.