V8 āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž WebAssembly āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡

V8 āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ‡āĻžā§āĻœāĻŋāĻ¨ā§‡āĻ° āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻ‰āĻĒāĻ¯ā§‹āĻ— wasm-decompile, āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§€ āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĄāĻŋāĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ WebAssembly āĻāĻ•āĻŸāĻŋ āĻĒāĻ āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ›āĻĻā§āĻŽ-āĻ­āĻžāĻˇāĻžāĻ¯āĻŧ āĻ¯āĻž āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻāĻŦāĻ‚ āĻ¸āĻŋ-āĻāĻ° āĻ¸ā§āĻŽāĻ°āĻŖ āĻ•āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦāĻŋāĻ¤ āĻ›āĻĻā§āĻŽ-āĻ­āĻžāĻˇāĻž āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻšāĻœ āĻāĻŦāĻ‚ ".wat" āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ WebAssembly-āĻāĻ° āĻĒāĻžāĻ ā§āĻ¯ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ°āĻ“ āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤, āĻ¯āĻž āĻ‰āĻšā§āĻš-āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ­āĻžāĻˇāĻžāĻ° āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ āĻ¸āĻŽāĻžāĻŦā§‡āĻļ āĻ­āĻžāĻˇāĻžāĻ° āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋāĨ¤ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, decompilation āĻ¯āĻ¤āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ Wasm āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

āĻĄāĻŋāĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻŸā§āĻ˛āĻ•āĻŋāĻŸā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ WABT, āĻ¯āĻž WebAssembly-āĻāĻ° āĻŦāĻžāĻ‡āĻ¨āĻžāĻ°āĻŋ āĻāĻŦāĻ‚ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ wsm āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ‚, āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ, āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻŦāĻ‚ āĻ¯āĻžāĻšāĻžāĻ‡āĻ•āĻ°āĻŖāĨ¤ WABT āĻāĻ•āĻŸāĻŋ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĻ“ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ›ā§‡ wasm2c, āĻ¯āĻž wasm āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻŽāĻ¤ā§āĻ˛ā§āĻ¯ C āĻ•ā§‹āĻĄā§‡ āĻĄāĻŋāĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ C āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ "wat" āĻāĻ° āĻĒāĻžāĻ ā§āĻ¯ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĨā§‡āĻ•ā§‡ āĻĒāĻžāĻ āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻžāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ–ā§āĻŦ āĻŦā§‡āĻļāĻŋ āĻ†āĻ˛āĻžāĻĻāĻž āĻ¨āĻ¯āĻŧāĨ¤

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, wasm āĻ āĻ¸āĻ‚āĻ•āĻ˛āĻŋāĻ¤ āĻŽā§‚āĻ˛ C āĻĢāĻžāĻ‚āĻļāĻ¨

typedef struct { float 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.āĻ˛ā§‹āĻĄ
(local.get 0))
(f32.āĻ˛ā§‹āĻĄ
(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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨