Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° V8 прСдставиха Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π·Π° WebAssembly

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° JavaScript Π΅Π½Π΄ΠΆΠΈΠ½Π° V8 прСдставиха ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° wasm-decompile, която позволява дСкомпилация Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡ‚ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎ прСдставянС WebAssembly Π² Ρ‡Π΅Ρ‚ΠΈΠΌ псСвдоязик, наподобяващ JavaScript ΠΈ C. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡ‚ΠΎ псСвдоязик Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-лСсно Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ ΠΈ ΠΏΠΎ-подходящо Π·Π° Ρ€ΡŠΡ‡Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ тСкстовото прСдставянС Π½Π° WebAssembly във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ β€ž.watβ€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎ-Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ асСмблСра, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄ΠΎ високо Π½ΠΈΠ²ΠΎ Π΅Π·ΠΈΡ†ΠΈ. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ дСкомпилацията ΠΏΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ напълно отразява прСдставянСто Π½Π° Wasm.

Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΡΡŠΡΡ‚Π°Π²Π° Π½Π° инструмСнтариума WABT, ΠΊΠΎΠΉΡ‚ΠΎ осигурява транслация ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ ΠΈ тСкстови прСдставяния Π½Π° WebAssembly, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, модификация ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° wasm-Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’ΡŠΠ² WABT ΡΡŠΡ‰ΠΎ сС Ρ€Π°Π·Π²ΠΈΠ²Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° wasm2c, която позволява дСкомпилация Π½Π° 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster