WebAssembly - format tekstowy
WebAssembly ma kod w formacie binarnym o nazwie WASM. Możesz również pobrać format tekstowy w WebAssembly i nazywa się go WAT (format tekstowy WebAssembly). Jako programista nie powinieneś pisać kodu w WebAssembly, zamiast tego musisz skompilować języki wysokiego poziomu, takie jak C, C ++ i Rust, do WebAssembly.
Kod WAT
Napiszmy kod WAT krok po kroku.
Step 1 - Punktem wyjścia w WAT jest zadeklarowanie modułu.
(module)
Step 2 - Dodajmy teraz do niego jakąś funkcjonalność w postaci funkcji.
Funkcja jest zadeklarowana, jak pokazano poniżej -
(func <parameters/result> <local variables> <function body>)
Funkcja zaczyna się od słowa kluczowego func, po którym następują parametry lub wynik.
Parametry / wynik
Parametry i wartość zwracana jako wynik.
Parametry mogą mieć następujący typ obsługiwany przez wasm -
- i32: 32-bitowa liczba całkowita
- i64: 64-bitowa liczba całkowita
- f32: 32-bitowa liczba zmiennoprzecinkowa
- f64: 64-bitowa liczba zmiennoprzecinkowa
Parametry funkcji są zapisane jak podano poniżej -
- (parametr i32)
- (parametr i64)
- (parametr f32)
- (parametr f64)
Wynik zostanie zapisany w następujący sposób -
- (wynik i32)
- (wynik i64)
- (wynik f32)
- (wynik f64)
Funkcja z parametrami i wartością zwracaną zostanie zdefiniowana w następujący sposób -
(func (param i32) (param i32) (result i64) <function body>)
Zmienne lokalne
Zmienne lokalne to te, których potrzebujesz w swojej funkcji. Wartość lokalna funkcji zostanie zdefiniowana w następujący sposób -
(func (param i32) (param i32) (local i32) (result i64) <function body>)
Treść funkcji
Treść funkcji to logika do wykonania. Ostateczny program będzie wyglądał następująco -
(module (func (param i32) (param i32) (local i32) (result i64) <function body>) )
Step 3 - Aby odczytać i ustawić parametry i zmienne lokalne.
Aby odczytać parametry i zmienne lokalne, użyj get_local i set_local Komenda.
Example
(module
(func (param i32) (param i32) (local i32) (result i64) get_local 0
get_local 1
get_local 2
)
)
Zgodnie z podpisem funkcji,
get_local 0 da param i32
get_local 1 poda następny parametr param i32
get_local 2 da local value i32
Zamiast odwoływać się do parametrów i ustawień lokalnych przy użyciu wartości liczbowych, takich jak 0,1,2, można również użyć nazwy przed parametrami, poprzedzając nazwę znakiem dolara.
Poniższy przykład pokazuje, jak używać nazwy z parametrami i lokalnymi.
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 - Instrukcja dotycząca treści i wykonania funkcji.
Wykonanie w wasm jest zgodne ze strategią stosu. Wykonywane instrukcje są wysyłane jedna po drugiej na stosie. Na przykład instrukcja get_local $ a przesunie wartość, którą odczytuje na stosie.
Instrukcja jak i32.add to doda wolę zdejmowanie elementów ze stosu.
(func (param $a i32) (param $b i32)
get_local $a
get_local $b
i32.add
)
Instrukcja dla i32.add jest ($a+$b). Ostateczna wartość i32.add zostanie umieszczona na stosie i zostanie przypisana do wyniku.
Jeśli podpis funkcji ma zadeklarowany wynik, na końcu wykonania na stosie powinna znajdować się jedna wartość. Jeśli nie ma parametru wyniku, na końcu stos musi być pusty.
Tak więc ostateczny kod wraz z treścią funkcji będzie wyglądał następująco -
(module
(func (param $a i32) (param $b i32) (result i32)
get_local $a
get_local $b
i32.add
)
)
Step 5 - Nawiązywanie połączenia z funkcją.
Ostateczny kod z treścią funkcji jest pokazany w kroku 4. Teraz, aby wywołać funkcję, musimy ją wyeksportować.
Aby wyeksportować funkcję, można to zrobić z wartościami indeksu, takimi jak 0,1, ale możemy również podać nazwy. Nazwa będzie poprzedzona znakiem $ i zostanie dodana po słowie kluczowym func.
Example
(module
(func $add (param $a i32) (param $b i32) (result i32)
get_local $a
get_local $b i32.add
)
)
Funkcję $ add należy wyeksportować, używając słowa kluczowego export, jak pokazano poniżej -
(module
(func $add
(param $a i32)
(param $b i32)
(result i32)
get_local $a get_local $b i32.add
)
(export "add" (func $add))
)
Aby przetestować powyższy kod w przeglądarce, będziesz musiał przekonwertować go do postaci binarnej (.wasm). Zapoznaj się z następnym rozdziałem, w którym pokazano, jak konwertować.WAT to .WASM.