V8 рдбреЗрд╡реНрд╣рд▓рдкрд░реНрд╕рдиреЗ WebAssembly рд╕рд╛рдареА рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рд╛рджрд░ рдХреЗрд▓реЗ

V8 JavaScript рдЗрдВрдЬрд┐рдирдЪреЗ рд╡рд┐рдХрд╕рдХ рд╕рд╛рджрд░ рдЙрдкрдпреБрдХреНрддрддрд╛ wasm-decompile, рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдмрд╛рдпрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рд╡реЗрдмрдЕрд╕реЙрдмрд▓ JavaScript рдЖрдгрд┐ C рдЪреА рдЖрдард╡рдг рдХрд░реВрди рджреЗрдгрд╛рд░реНтАНрдпрд╛ рд╡рд╛рдЪрдиреАрдп рд╕реНрдпреВрдбреЛ-рднрд╛рд╖реЗрдд. рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЫрджреНрдо-рднрд╛рд╖рд╛ рд╕рдордЬрдгреНрдпрд╛рд╕ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╕реЛрдкреА рдЖрд╣реЗ рдЖрдгрд┐ ".wat" рд╕реНрд╡рд░реВрдкрд╛рдд рд╡реЗрдмрдЕрд╕реЗрдВрдмрд▓реАрдЪреНрдпрд╛ рдордЬрдХреВрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдкреЗрдХреНрд╖рд╛ рдореЕрдиреНрдпреБрдЕрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧрд╕рд╛рдареА рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдЖрд╣реЗ, рдЬреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖реЗрдЪреНрдпрд╛ рдЬрд╡рд│ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╡рд┐рдШрдЯрди рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рдкреВрд░реНрдгрдкрдгреЗ Wasm рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддреЗ.

рдбрд┐рдХрдореНрдкрд╛рдпрд▓рд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЯреВрд▓рдХрд┐рдЯрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ WABT, рдЬреЗ WebAssembly рдЪреНрдпрд╛ рдмрд╛рдпрдирд░реА рдЖрдгрд┐ рдордЬрдХреВрд░ рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдгрд╛рджрд░рдореНрдпрд╛рди рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рддрд╕реЗрдЪ wasm рдлрд╛рдЗрд▓реНрд╕рдЪреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдкреНрд░рдХреНрд░рд┐рдпрд╛, рд╕реБрдзрд╛рд░рдгрд╛ рдЖрдгрд┐ рдкрдбрддрд╛рд│рдгреА рдХрд░рддреЗ. WABT рджреЗрдЦреАрд▓ рдПрдХ рдЙрдкрдпреБрдХреНрддрддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЗ wasm2c, рдЬреЗ wasm рдлрд╛рдЗрд▓реНрд╕рдирд╛ рд╕рдорддреБрд▓реНрдп C рдХреЛрдбрдордзреНрдпреЗ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рдЬреЗ C рдХрдВрдкрд╛рдЗрд▓рд░рджреНрд╡рд╛рд░реЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ "wat" рдЪреНрдпрд╛ рдордЬрдХреВрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдкреЗрдХреНрд╖рд╛ рд╡рд╛рдЪрдиреАрдпрддреЗрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдлрд╛рд░ рд╡реЗрдЧрд│реЗ рдирд╛рд╣реА.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, wasm рдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдореВрд│ C рдлрдВрдХреНрд╢рди

typedef struct { рдлреНрд▓реЛрдЯ x, y, z; } vec3;

рдлреНрд▓реЛрдЯ рдбреЙрдЯ(const vec3 *a, const vec3 *b) {
a->x * b->x + рдкрд░рдд рдХрд░рд╛
a->y * b->y +
a->z * b->z;
}

wasm-decompile рдпреБрдЯрд┐рд▓рд┐рдЯреА рджреНрд╡рд╛рд░реЗ рд╕реНрдпреВрдбреЛ-рднрд╛рд╖реЗрдд рд╡рд┐рдШрдЯрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓

рдлрдВрдХреНрд╢рди рдбреЙрдЯ(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. рд▓реЛрдб рдСрдлрд╕реЗрдЯ=4
(local.get 0))
(f32. рд▓реЛрдб рдСрдлрд╕реЗрдЯ=4
(local.get 1))))
(f32.mul
(f32. рд▓реЛрдб рдСрдлрд╕реЗрдЯ=8
(local.get 0))
(f32. рд▓реЛрдб рдСрдлрд╕реЗрдЯ=8
(local.get 1))))))

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛