Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° JavaScript Π΅Π½Π΄ΠΆΠΈΠ½Π° V8 ΡΡΠΈΠ»ΠΈΡΠ° , ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ Π±ΠΈΠ½Π°ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π² ΡΠ΅ΡΠΈΠΌ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ·ΠΈΠΊ, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π°Ρ JavaScript ΠΈ C. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡΠΎ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ·ΠΈΠΊ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π·Π° Π²ΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ ΠΈ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π·Π° ΡΡΡΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° WebAssembly Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ β.watβ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΏΠΎ-Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄ΠΎ Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ Π΅Π·ΠΈΡΠΈ. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΠΏΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡΡΠ°Π·ΡΠ²Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Wasm.
ΠΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Π² ΡΡΡΡΠ°Π²Π° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠ° , ΠΊΠΎΠΉΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΡΡΠ°Π½ΡΠ»Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½ΠΈΡ Π½Π° WebAssembly, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° wasm-ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΡΠ² WABT ΡΡΡΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° , ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° wasm ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° C, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Ρ C ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, Π½ΠΎ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΠΈΠΌΠΎΡΡ Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ βwatβ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π°ΡΠ° Π² wasm ΠΈΠ·Ρ ΠΎΠ΄Π½Π° C ΡΡΠ½ΠΊΡΠΈΡ
typedef struct { float x, y, z; } vec3;
float dot(const vec3 *a, const vec3 *b) {
return a. * b. +
a. * b. +
a. * b.;
}
ΡΠ΅ Π±ΡΠ΄Π΅ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° wasm-decompile Π² ΠΏΡΠ΅Π²Π΄ΠΎΡΠ·ΠΈΠΊ
function dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
return a.a * b.a + a.b * b.b + a.c * b.c
}
Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ΡΠΎ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈΡ ΡΠΎΡΠΌΠ°Ρ β.watβ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½
(func $dot (type 0) (param i32 i32) (result f32)
(f32.add
(f32.add
(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
