V8 рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ WebAssembly рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореВрд▓ C рдлрд╝рдВрдХреНрд╢рди wasm рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реИ

рдЯрд╛рдЗрдкрдбрд┐рдл рд╕реНрдЯреНрд░рдХреНрдЪрд░ {рдлреНрд▓реЛрдЯ рдПрдХреНрд╕, рд╡рд╛рдИ, рдЬреЗрдб; } vec3;

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

wasm-decompile рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЫрджреНрдо рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рдлрд╝рдВрдХреНрд╢рди рдбреЙрдЯ(рдП:{ рдП:рдлреНрд▓реЛрдЯ, рдмреА:рдлреНрд▓реЛрдЯ, рд╕реА:рдлреНрд▓реЛрдЯ },
рдмреА:{ рдП:рдлреНрд▓реЛрдЯ, рдмреА:рдлреНрд▓реЛрдЯ, рд╕реА:рдлреНрд▓реЛрдЯ }):рдлреНрд▓реЛрдЯ {
рд╡рд╛рдкрд╕реА рдПрдП * рдмреАрдП + рдПрдмреА * рдмреАрдмреА + рдПрд╕реА * рдмреАрд╕реА
}

рдЬрдмрдХрд┐ рдкрд╛рда рдкреНрд░рд╛рд░реВрдк ".wat" рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

(func $dot (рдкреНрд░рдХрд╛рд░ 0) (рдкрд░рдо i32 i32) (рдкрд░рд┐рдгрд╛рдо f32)
(f32.рдЬреЛрдбрд╝реЗрдВ)
(f32.рдЬреЛрдбрд╝реЗрдВ)
(f32.mul
(f32.рд▓реЛрдб
(рд╕реНрдерд╛рдиреАрдп.рдкреНрд░рд╛рдкреНрдд 0))
(f32.рд▓реЛрдб
(local.get 1)))
(f32.mul
(f32.рд▓реЛрдб рдСрдлрд╝рд╕реЗрдЯ=4
(рд╕реНрдерд╛рдиреАрдп.рдкреНрд░рд╛рдкреНрдд 0))
(f32.рд▓реЛрдб рдСрдлрд╝рд╕реЗрдЯ=4
(local.get 1))))
(f32.mul
(f32.рд▓реЛрдб рдСрдлрд╝рд╕реЗрдЯ=8
(рд╕реНрдерд╛рдиреАрдп.рдкреНрд░рд╛рдкреНрдд 0))
(f32.рд▓реЛрдб рдСрдлрд╝рд╕реЗрдЯ=8
(local.get 1))))))

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ