V8 рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ WebAssembly рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ decompiler рдкреНрд░рд╕реНрддреБрдд рдЧрд░реЗ

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

рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░ рд╕рдорд╛рд╡реЗрд╢ рдЯреВрд▓рдХрд┐рдЯрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫ WABT, рдЬрд╕рд▓реЗ WebAssembly рдХреЛ рдмрд╛рдЗрдирд░реА рд░ рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмреАрдЪ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рд╕рд╛рдереИ wasm рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдкрд╛рд░реНрд╕рд┐рдЩ, рдкреНрд░рд╢реЛрдзрди, рдкрд░рд┐рдорд╛рд░реНрдЬрди рд░ рдкреНрд░рдорд╛рдгрд┐рдХрд░рдгред WABT рд▓реЗ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрдирд┐ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджреИрдЫ wasm2c, рдЬрд╕рд▓реЗ wasm рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ C рдХрдореНрдкрд╛рдЗрд▓рд░рджреНрд╡рд╛рд░рд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рдмрд░рд╛рдмрд░рдХреЛ C рдХреЛрдбрдорд╛ рдбрд┐рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рддрд░ "wat" рдХреЛ рдкрд╛рдареНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдмрд╛рдЯ рдкрдардиреАрдпрддрд╛рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдзреЗрд░реИ рдлрд░рдХ рдЫреИрдиред

рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдореВрд▓ рд╕реА рдкреНрд░рдХрд╛рд░реНрдп wasm рдорд╛ рд╕рдВрдХрд▓рд┐рдд

рдЯрд╛рдЗрдкрдбреЗрдл рд╕рдВрд░рдЪрдирд╛ { рдлреНрд▓реЛрдЯ рдПрдХреНрд╕, рд╡рд╛рдИ, рдЬреЗрдб; } 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди