- WebAssembly - Discussion
- WebAssembly - Useful Resources
- WebAssembly - Quick Guide
- WebAssembly - Examples
- WebAssembly - Working with Nodejs
- WebAssembly - Working with Go
- WebAssembly - Working with Rust
- WebAssembly - Working with C++
- WebAssembly - Working with C
- WebAssembly - Security
- WebAssembly - Dynamic Linking
- WebAssembly - Convert WAT to WASM
- WebAssembly - Text Format
- WebAssembly - Validation
- WebAssembly - Modules
- WebAssembly - “Hello World”
- WebAssembly - Debugging WASM in Firefox
- WebAssembly - Javascript API
- WebAssembly - Javascript
- WebAssembly - Program Structure
- WebAssembly - Tools to Compile to WASM
- WebAssembly - Installation
- WebAssembly - WASM
- WebAssembly - Introduction
- WebAssembly - Overview
- WebAssembly - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
WebAssembly - Program Structure
WebAssembly, also called WASM, is binary format low level code developed to be executed inside browsers in the most efficient way. WebAssembly code is structured with following concepts −
Values
Types
Instructions
Let us learn them in detail now.
Values
Values in WebAssembly are meant to store complex data such as text, strings and vectors. WebAssembly supports the following −
Bytes
Integers
Floating point
Names
Bytes
Bytes is the simplest form of values supported in WebAssembly. The value is in hexadecimal format.
For exampleBytes represented as b, can also take natural numbers n, where n <256.
byte ::= 0x00| .... |0xFF
Integers
In WebAssembly, integers supported are as given below −
i32: 32-bit integer
i64: 64-bit integer
Floating Point
In WebAssembly floating point numbers supported are as follows −
f32: 32-bit floating point
f64: 64-bit floating point
Names
Names are sequence of character, with scalar values defined by Unicode, which is available at the pnk
given herewith.Types
The entities in WebAssembly are classified as types. The types supported are as stated below −
Value Types
Result Types
Function Types
Limits
Memory Types
Table Types
Global Types
External Types
Let us study them one by one.
Value Types
The values type supported by WebAssembly are as mentioned below −
i32: 32-bit integer
i64: 64-bit integer
f32: 32-bit floating point
f64: 64-bit floating point
valtype ::= i32|i64|f32|f64
Result Types
The values written inside brackets are executed and stored inside result types. The result type is the output of the execution of a block of code made up of values.
resulttype::=[valtype?]
Function Types
A function type will take in vector of parameters returns a vector of results.
functype::=[vec(valtype)]--> [vec(valtype)]
Limits
Limits are the storage range pnked with memory and table types.
pmits ::= {min u32, max u32}
Memory Types
Memory types deal with pnear memories and the size range.
memtype ::= pmits
Table Types
Table Types are classified by the element type assigned to it.
tabletype ::= pmits elemtype elemtype ::= funcref
Table type is dependent on the pmit for the minimum and maximum size assigned to it.
Global Types
Global Type holds the global variables that have the value, that can change or remain the same.
globaltype ::= mut valtype mut ::= const|var
External Types
External Types deals with imports and external values.
externtype ::= func functype | table tabletype | mem memtype | global globaltype
Instructions
WebAssembly code is a sequence of instructions that follows a stack machine model. As WebAssembly follows a stack machine model, the instructions are pushed on the stack.
The argument values for a function, for example, are popped from stack and the result is pushed back on the stack. In the end, there will be only one value in the stack and that is the result.
Some of the commonly used Instructions are as follows −
Numeric Instructions
Variable Instructions
Numeric Instructions
Numeric Instructions are operations, which are performed on numeric value.
For examplenn, mm ::= 32|64 ibinop ::= add|sub|mul|span_sx|rem_sx|and|or|xor irelop ::= eq | ne | lt_sx | gt_sx | le_sx | ge_sx frelop ::= eq | ne | lt | gt | le | ge
Variable Instructions
Variable instructions are about accessing the local and global variables.
For example
To access local variables −
get_local $a get_local $b
To set local variables −
set_local $a set_local $b
To access global variables −
get_global $a get_global $b
To set global variables −
set_global $a set_global $bAdvertisements