WebAssembly (wasm) рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдмрд╛рдЗрдирд░реА рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рд╛рд░реВрдк рд╣реИред рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб wasm рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдХрдерди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдпрдерд╛рд╕рдВрднрд╡ рддреЗрдЬрд╝ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХреЗред
рд╡рд╛рд╕рдорд░ рд░рд╕реНрдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдореАрд╕рдо рд░рдирдЯрд╛рдЗрдо рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрд┐рд╕реА рднреА рд░рд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡реЙрд╢рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдФрд░ рд╡рд╛рд╕рдорд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреНрдп рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдиреЗ рдЗрд╕ wasm- рдХреЛрдб рд░рдирдЯрд╛рдЗрдо рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛:
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ -
рдЧреЛ-рдПрдХреНрд╕-рдПрдХреНрд╕-рдПрдордПрдо , рдЬреЛ рдЧреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдЗрдирд░реА рдПрдордПрдо-рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЧреЛ-рдПрдХреНрд╕-рдПрдПрд╕рдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреНрдп рд╕рдорд╛рди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЦреБрдж рд╕реЗ рдЖрдЧреЗ рдирд╣реАрдВред рдЖрдЗрдП рдПрдХ рдХрд╣рд╛рдиреА рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдХрд┐ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЧреЛ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ wasm рдлрд╝рдВрдХреНрд╢рдВрд╕
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ (cgo рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде) рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
export CGO_ENABLED=1; export CC=gcc; go install github.com/wasmerio/go-ext-wasm/wasmer
Go
-ext-wasm рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдирд┐рдпрдорд┐рдд рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп,
import "github.com/wasmerio/go-ext-wasm/wasmer"
рдирд┐рд░реНрдорд╛рдг
import "github.com/wasmerio/go-ext-wasm/wasmer"
ред
рдЕрдм рдЪрд▓рд┐рдП рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ wasm рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдВрдЧ:
#[no_mangle] pub extern fn sum(x: i32, y: i32) -> i32 { x + y }
рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо
simple.rs
рд╕рд╛рде
simple.rs
, рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓
simple.wasm рдорд┐рд▓рддреА рд╣реИред
рдирд┐рдореНрди рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ
sum
рдлрд╝рдВрдХреНрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ 5 рдФрд░ 37 рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:
package main import ( "fmt" wasm "github.com/wasmerio/go-ext-wasm/wasmer" ) func main() {
рдпрд╣рд╛рдВ, рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рд╡реЙрд╢ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рддреЛ, рдкреНрд░рдпреЛрдЧ рд╕рдлрд▓ рд░рд╣рд╛, рд╣рдордиреЗ рдЧреЛ рдореЗрдВ WebAssembly рдХреЛрдб рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИред рд╡реЗ рдорд╛рди рдЬреЛ рд╡реЙрд╢ рдХреЛрдб рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рд╡реЗ WebAssembly рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред Wasm рдлрдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ рдЧреЛ рдЯрд╛рдЗрдкреНрд╕ рдХреЛред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, Go рдореЗрдВ wasm рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдирд┐рдпрдорд┐рдд Go рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИред
WebAssembly рдХреЛрдб рд╕реЗ рдХреЙрд▓ рдлрдВрдХреНрд╢рдВрд╕
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛, WebAssembly рдореЙрдбреНрдпреВрд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ wasm рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрд╕реА рд╕рдордп, WebAssembly рдореЙрдбреНрдпреВрд▓ рд╕реНрд╡рдпрдВ рдЖрдпрд╛рддрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
extern { fn sum(x: i32, y: i32) -> i32; } #[no_mangle] pub extern fn add1(x: i32, y: i32) -> i32 { unsafe { sum(x, y) } + 1 }
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдирд╛рдо рджреЗрдВ
import.rs
ред рдЗрд╕реЗ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬреЛ
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
add1
рдлрдВрдХреНрд╢рди
add1
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рд╣реИред WebAssembly рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
sum
рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
cgo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╣реИред рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ, рдЬреЛ рдореБрдЦреНрдп рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рдЧрд┐рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
package main
рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ:
sum
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( import "C"
рдХрдорд╛рдВрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ)редsum
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЧреЛ рдореЗрдВ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд▓рд╛рдЗрди //export
рдзреНрдпрд╛рди рджреЗрдВ - рдпрд╣ рддрдВрддреНрд░ cgo рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде Go рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)редNewImports
WebAssembly рдЖрдпрд╛рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ API рд╣реИред рдЗрд╕ рдХреЛрдб рдореЗрдВ, "sum"
WebAssembly рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╣реИ, sum
рдЧреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реВрдЪрдХ рд╣реИ, рдФрд░ C.sum
рдХреЛрдЧреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реВрдЪрдХ рд╣реИред- рдФрд░ рдЕрдВрдд рдореЗрдВ,
NewInstanceWithImports
рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде WebAssembly рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛
WebAssembly рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд▓реАрдирд┐рдпрд░ рдореЗрдореЛрд░реА рд╣реИред рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкрдврд╝реЗрдВред рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд░рд╕реНрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕реЗ рд╣рдо
memory.rs
ред
#[no_mangle] pub extern fn return_hello() -> *const u8 { b"Hello, World!\0".as_ptr() }
рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо
memory.wasm
рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреАрдЪреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
return_hello
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реВрдЪрдХ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╕реА рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реА рдореЗрдВ, рдПрдХ рдЕрд╢рдХреНрдд рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рдеред
рдЕрдм Go рдХреА рддрд░рдл рдЬрд╛рдПрдВ:
bytes, _ := wasm.ReadBytes("memory.wasm") instance, _ := wasm.NewInstance(bytes) defer instance.Close()
return_hello
рдлрд╝рдВрдХреНрд╢рди
i32
рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ
ToI32
рдХреЙрд▓ рдХрд░рдХреЗ рдпрд╣ рдорд╛рди рдорд┐рд▓рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдореЗрдВ
instance.Memory.Data()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред
instance.Memory.Data()
ред
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди WebAssembly рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдореЗрдореЛрд░реА рд╕реНрд▓рд╛рдЗрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЧреЛ рд╕реНрд▓рд╛рдЗрд╕ рдХреА рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЙрд╕ рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣
memory[pointer : pointer+13]
рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдлрд┐рд░ рд░реАрдб рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ Go рдХреЗ WebAssembly рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдореЗрдореЛрд░реА рддрдВрддреНрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдорд╛рдирдХ
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ, рдЧреЛ-рдПрдХреНрд╕-рдПрдПрд╕рдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреАрдЖрдИ рд╣реИред рдЕрдм рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
PHP рдпрд╛ рд░реВрдмреА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЧреЛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА wasm рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
- рдкреЗрд░рд▓рд┐рди рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЬреАрд╡рди - WebAssembly рджреБрднрд╛рд╖рд┐рдпрд╛ред
- Go Interpreter's Wagon рдПрдХ WebAssembly рджреБрднрд╛рд╖рд┐рдпрд╛ рдФрд░ рдЯреВрд▓рдХрд┐рдЯ рд╣реИред
Php-ext-wasm рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░
рд╕рд╛рдордЧреНрд░реА рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
n- рдмреЙрдбреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣
рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо (рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рдВрд╕реНрдХрд░рдг) рдФрд░ рдЬреАрд╡рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
рдкреЛрд▓рд╛рд░реНрдб ╧Б- рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИред рдпрд╣ рд╕реНрдиреИрдкреА рдХрдореНрдкреНрд░реЗрд╢рди рдЕрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЧреЛ-рдПрдХреНрд╕-рд╡рд╛рд╢рдо рдХреЗ рд╕рд╛рде рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рдЗрдл рдпрд╛ рд╡реИрдЧрди рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдирддреАрдЬрддрди, рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЯреЗрд╕реНрдЯ рдХреЛрдб
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╣рдордиреЗ рдЕрдиреБрд╕рдВрдзрд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЕрд░реНрдерд╛рддреН, рдпреЗ рд▓рд╛рдЗрдл 20190521143330-57f3819c2df0 рдФрд░ рд╡реИрдЧрди 0.4.0 рд╣реИрдВред
рдЪрд╛рд░реНрдЯ рдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдирдВрдмрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ 10 рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдФрд╕рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред рдЕрдзреНрдпрдпрди рдореЗрдВ 2016 рдореИрдХрдмреБрдХ рдкреНрд░реЛ 15 "рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7 2.9 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 16 рдЬреАрдмреА рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдПрдХреНрд╕ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Y рдЕрдХреНрд╖ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╕реВрдЪрдХ рдЬрд┐рддрдирд╛ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред
рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рд╕рд░, рд╡реИрдЧрди рдФрд░ рдЬреАрд╡рди рдХреА рдкреНрд░рджрд░реНрд╢рди рддреБрд▓рдирд╛рдЬреАрд╡рди рдФрд░ рд╡реИрдЧрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ, рдФрд╕рддрди, рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВред рд╡рд╛рд╕рдорд░, рдФрд╕рддрди 72 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд╛рд╕рдорд░ рддреАрди рдмреИрдХрдПрдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
рд╕рд┐рдВрдЧрд▓рдкрд╛рд╕ ,
рдХреНрд░реИрдирд▓рд┐рдлреНрдЯ рдФрд░
рдПрд▓рдПрд▓рд╡реАрдПрдо ред Go рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреИрдХрдПрдВрдб Cranelift рд╣реИ (
рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдореВрд▓ рдХреЗ рдХрд░реАрдм рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрд░реИрдирд▓рд┐рдлреНрдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреИрдХрдПрдВрдб рд╕рдВрдХрд▓рди рд╕рдордп рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдкрд╛рдд рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдмреИрдХрдПрдВрдб, рдЙрдирдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдкрд░рд┐рдгрд╛рдо
рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдЧреЛ-рдПрдХреНрд╕реНрдЯ-рд╡рд╛рд╢ рдПрдХ рдирдпрд╛ рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдЗрдирд░реА рд╡реЙрд╢ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ
рд╡рд╛рд╕рд░ рд░рдирдЯрд╛рдЗрдо рднреА рд╢рд╛рдорд┐рд▓
рд╣реИ ред рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдкреАрдЖрдИ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдарддреА рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡рд╛рд╕реЗрдорд░, рдФрд╕рддрди рд▓рд╛рдЗрдл рдФрд░ рд╡реИрдЧрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 72 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧреЛ-рдПрдХреНрд╕-рдПрдПрд╕рдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧреЛ рдореЗрдВ wasm рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИ?
