Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° 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->x * b->x +
a->y * b->y +
a->z * b->z;
}
ΡΠ΅ Π±ΡΠ΄Π΅ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° Ρ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° 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
