V8 แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ›แƒ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ˜แƒœแƒ”แƒก แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ”แƒ แƒ˜ WebAssembly-แƒกแƒ—แƒ•แƒ˜แƒก

V8 JavaScript แƒซแƒ แƒแƒ•แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ wasm-decompile, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒœแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒแƒ— แƒจแƒฃแƒแƒšแƒ”แƒ“แƒฃแƒ แƒ˜ แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ WebAssembly แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“ แƒคแƒกแƒ”แƒ•แƒ“แƒแƒ”แƒœแƒแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ’แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ— JavaScript-แƒก แƒ“แƒ C. แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒกแƒ”แƒ•แƒ“แƒแƒ”แƒœแƒ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฃแƒคแƒ แƒ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜แƒ แƒฎแƒ”แƒšแƒ˜แƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒ“แƒ แƒ” WebAssembly-แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ โ€ž.watโ€œ แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒกแƒแƒ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒ”แƒœแƒแƒกแƒ—แƒแƒœ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ”แƒœแƒ”แƒ‘แƒ—แƒแƒœ. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒ แƒแƒกแƒแƒฎแƒแƒ•แƒก Wasm-แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒแƒก แƒ แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒ แƒฃแƒšแƒแƒ“.

แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ”แƒ แƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒจแƒ”แƒ“แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ—แƒ แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒจแƒ˜ WABT, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก WebAssembly-แƒ˜แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ  แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ—แƒแƒ แƒ’แƒ›แƒœแƒแƒก, แƒแƒกแƒ”แƒ•แƒ” wasm แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒก, แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒก, แƒ›แƒแƒ“แƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒ“แƒ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก. WABT แƒแƒกแƒ”แƒ•แƒ” แƒแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒก แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ  แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก wasm2c, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒซแƒšแƒ”แƒ•แƒ wasm แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒ”แƒ™แƒ•แƒ˜แƒ•แƒแƒšแƒ”แƒœแƒขแƒฃแƒ  C แƒ™แƒแƒ“แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ“แƒ’แƒ”แƒก C แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ , แƒ›แƒแƒ’แƒ แƒแƒ› แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ— แƒ“แƒ˜แƒ“แƒแƒ“ แƒแƒ  แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ "wat"-แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒกแƒ’แƒแƒœ.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ C แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ wasm-แƒจแƒ˜

typedef struct { float x, y, z; } vec3;

float dot(const vec3 *a, const vec3 *b) {
แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ— a->x * b->x +
a->y * b->y +
แƒ->แƒ– * แƒ‘->แƒ–;
}

wasm-decompile แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ“แƒ”แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒคแƒกแƒ”แƒ•แƒ“แƒแƒ”แƒœแƒแƒ–แƒ”

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ aa * ba + ab * bb + ac * bc
}

แƒฎแƒแƒšแƒ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒงแƒ•แƒแƒœแƒ ".wat" แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ

(func $dot (แƒขแƒ˜แƒžแƒ˜ 0) (param i32 i32) (แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ f32)
(f32.add
(f32.add
(f32.mul
(f32.load
(local.get 0))
(f32.load
(local.get 1)))
(f32.mul
(f32.load offset=4
(local.get 0))
(f32.load offset=4
(local.get 1))))
(f32.mul
(f32.load offset=8
(local.get 0))
(f32.load offset=8
(local.get 1))))))

แƒฌแƒงแƒแƒ แƒ: opennet.ru

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ