Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° 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->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

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