WebAssembly - Cấu trúc chương trình
WebAssembly, còn được gọi là WASM, là mã cấp thấp định dạng nhị phân được phát triển để thực thi bên trong các trình duyệt theo cách hiệu quả nhất. Mã WebAssembly được cấu trúc với các khái niệm sau:
- Values
- Types
- Instructions
Hãy cùng chúng tôi tìm hiểu chi tiết chúng ngay bây giờ.
Giá trị
Giá trị trong WebAssembly có nghĩa là để lưu trữ dữ liệu phức tạp như văn bản, chuỗi và vectơ. WebAssembly hỗ trợ những điều sau:
- Bytes
- Integers
- Dấu chấm động
- Names
Byte
Byte là dạng giá trị đơn giản nhất được hỗ trợ trong WebAssembly. Giá trị ở định dạng thập lục phân.
For exampleCác byte được biểu diễn dưới dạng b , cũng có thể nhận số tự nhiên n, trong đó n <256.
byte ::= 0x00| .... |0xFF
Số nguyên
Trong WebAssembly, các số nguyên được hỗ trợ như dưới đây:
- i32: số nguyên 32 bit
- i64: số nguyên 64 bit
Dấu chấm động
Trong WebAssembly, số dấu phẩy động được hỗ trợ như sau:
- f32: 32-bit dấu chấm động
- f64: 64-bit dấu phẩy động
Tên
Tên là một chuỗi ký tự, với các giá trị vô hướng được xác định bởi Unicode, có sẵn tại liên kết http://www.unicode.org/versions/Unicode12.1.0/ đưa ra kèm theo đây.
Các loại
Các thực thể trong WebAssembly được phân loại thành các loại. Các loại được hỗ trợ như được nêu bên dưới -
- Các loại giá trị
- Các loại kết quả
- Các loại chức năng
- Limits
- Các loại bộ nhớ
- Các loại bảng
- Các loại toàn cầu
- Các loại bên ngoài
Hãy để chúng tôi nghiên cứu chúng từng cái một.
Các loại giá trị
Loại giá trị được hỗ trợ bởi WebAssembly như được đề cập bên dưới:
- i32: số nguyên 32 bit
- i64: số nguyên 64 bit
- f32: 32-bit dấu chấm động
- f64: 64-bit dấu phẩy động
valtype ::= i32|i64|f32|f64
Các loại kết quả
Các giá trị ghi bên trong dấu ngoặc được thực thi và lưu trữ bên trong các kiểu kết quả. Kiểu kết quả là đầu ra của việc thực thi một khối mã được tạo thành từ các giá trị.
resulttype::=[valtype?]
Các loại chức năng
Một kiểu hàm sẽ nhận vectơ tham số trả về một vectơ kết quả.
functype::=[vec(valtype)]--> [vec(valtype)]
Hạn mức
Giới hạn là phạm vi lưu trữ được liên kết với bộ nhớ và loại bảng.
limits ::= {min u32, max u32}
Các loại bộ nhớ
Các loại bộ nhớ xử lý các bộ nhớ tuyến tính và phạm vi kích thước.
memtype ::= limits
Các loại bảng
Các loại bảng được phân loại theo loại phần tử được gán cho nó.
tabletype ::= limits elemtype
elemtype ::= funcref
Loại bảng phụ thuộc vào giới hạn cho kích thước tối thiểu và tối đa được gán cho nó.
Các loại toàn cầu
Global Type giữ các biến toàn cục có giá trị, có thể thay đổi hoặc giữ nguyên.
globaltype ::= mut valtype
mut ::= const|var
Các loại bên ngoài
Loại bên ngoài liên quan đến nhập khẩu và giá trị bên ngoài.
externtype ::= func functype | table tabletype | mem memtype | global globaltype
Hướng dẫn
Mã WebAssembly là một chuỗi hướng dẫn tuân theo mô hình máy xếp. Vì WebAssembly theo mô hình máy ngăn xếp nên các hướng dẫn được đẩy lên ngăn xếp.
Ví dụ, các giá trị đối số cho một hàm được bật ra từ ngăn xếp và kết quả được đẩy trở lại ngăn xếp. Cuối cùng, sẽ chỉ có một giá trị trong ngăn xếp và đó là kết quả.
Một số Hướng dẫn thường được sử dụng như sau:
- Hướng dẫn số
- Hướng dẫn biến
Hướng dẫn số
Hướng dẫn số là các hoạt động được thực hiện trên giá trị số.
For examplenn, mm ::= 32|64
ibinop ::= add|sub|mul|div_sx|rem_sx|and|or|xor
irelop ::= eq | ne | lt_sx | gt_sx | le_sx | ge_sx
frelop ::= eq | ne | lt | gt | le | ge
Hướng dẫn biến
Các hướng dẫn về biến là cách truy cập các biến cục bộ và toàn cục.
For example
Để truy cập các biến cục bộ -
get_local $a
get_local $b
Đến set biến cục bộ -
set_local $a
set_local $b
Đến access biến toàn cục -
get_global $a
get_global $b
Đến set biến toàn cục -
set_global $a
set_global $b