V8 เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‡ WebAssembly เจฒเจˆ เจ‡เฉฑเจ• เจกเฉ€เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ

V8 JavaScript เจ‡เฉฐเจœเจฃ เจฆเฉ‡ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ wasm-decompile, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจฟเจšเจ•เจพเจฐเจฒเฉ‡ เจฌเจพเจˆเจจเจฐเฉ€ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจจเฉ‚เฉฐ เจกเฉ€เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจตเฉˆเฉฑเจฌเจ…เจธเฉˆเจชเจฒเฉ‡เจธ JavaScript เจ…เจคเฉ‡ C เจฆเฉ€ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจ‚เจฆเฉ€ เจ‡เฉฑเจ• เจชเฉœเฉเจนเจจเจฏเฉ‹เจ— เจธเฉ‚เจกเฉ‹-เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจšเฅค เจชเฉเจฐเจธเจคเจพเจตเจฟเจค เจธเฉ‚เจกเฉ‹-เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจธเจฎเจเจฃ เจฒเจˆ เจฌเจนเฉเจค เจธเฉŒเจ–เจพ เจนเฉˆ เจ…เจคเฉ‡ ".wat" เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจตเฉˆเฉฑเจฌ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจฆเฉ€ เจŸเฉˆเจ•เจธเจŸ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจจเจพเจฒเฉ‹เจ‚ เจฆเจธเจคเฉ€ เจชเจพเจฐเจธเจฟเฉฐเจ— เจฒเจˆ เจตเจงเฉ‡เจฐเฉ‡ เจขเฉเจ•เจตเจพเจ‚ เจนเฉˆ, เจœเฉ‹ เจ‰เฉฑเจš-เจชเฉฑเจงเจฐเฉ€ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจจเจพเจฒเฉ‹เจ‚ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจญเจพเจธเจผเจพ เจฆเฉ‡ เจจเฉ‡เฉœเฉ‡ เจนเฉˆเฅค เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจกเฉ€เจ•เฉฐเจชเจฟเจฒเฉ‡เจธเจผเจจ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเฉฐเจญเจต เจคเฉŒเจฐ 'เจคเฉ‡ เจตเฉˆเจธเจฎ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆเฅค

เจกเฉ€เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจธเจผเจพเจฎเจฒ เจนเจจ เจŸเฉ‚เจฒเจ•เจฟเฉฑเจŸ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจกเจฌเจฒเจฏเฉ‚.เจ.เจฌเฉ€.เจŸเฉ€, เจœเฉ‹ เจ•เจฟ WebAssembly เจฆเฉ‡ เจฌเจพเจˆเจจเจฐเฉ€ เจ…เจคเฉ‡ เจŸเฉˆเจ•เจธเจŸ เจชเฉเจฐเจคเฉ€เจจเจฟเจงเจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจตเจฟเจšเจ•เจพเจฐ เจ…เจจเฉเจตเจพเจฆ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ, เจจเจพเจฒ เจนเฉ€ wasm เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจชเจพเจฐเจธเจฟเฉฐเจ—, เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ—, เจธเฉ‹เจง เจ…เจคเฉ‡ เจคเจธเจฆเฉ€เจ• เจ•เจฐเจฆเจพ เจนเฉˆเฅค 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 (type 0) (param i32 i32) (เจจเจคเฉ€เจœเจพ f32)
(f32. เจเจก
(f32. เจเจก
(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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹