Abaphuhlisi be-V8 babonise i-decompiler yeWebAssembly

Abaphuhlisi be-injini ye-V8 JavaScript thaca into eluncedo wasm-decompile, ikuvumela ukuba udibanise eliphakathi lokumelwa kokubini WebAssembly kulwimi olungeyonyani olufundekayo olukhumbuza iJavaScript kunye noC. Ulwimi olucetywayo olucetywayo lulula kakhulu ukuluqonda kwaye lufaneleke ngakumbi ulwahlulo lwezandla kunokumelwa okubhaliweyo kweWebAssembly kwifomathi β€œ.wat”, ekufutshane nolwimi lwendibano kuneelwimi ezikumgangatho ophezulu. Kule meko, ukuchithwa kubonisa ukumelwa kwe-Wasm ngokupheleleyo kangangoko kunokwenzeka.

I-Decompiler ifakiwe ibandakanyiwe kwikhithi yezixhobo WABT, ebonelela ngoguqulelo phakathi kokubini kunye nokubhaliweyo okubhaliweyo kweWebAssembly, kunye nokwahlulahlula, ukucubungula, ukuguqulwa kunye nokuqinisekiswa kweefayile ze-wam. I-WABT ikwaphuhlisa into eluncedo wam2c, evumela ukuba iifayile ze-wasm zidityaniswe zibe yikhowudi ye-C elinganayo enokuthi iqulunqwe ngumqokeleli we-C, kodwa ayahlukanga kakhulu ngokufundeka kombhalo "wat".

Umzekelo, umsebenzi wokuqala we-C ohlanganiswe kwi- wasm

uhlobo lwe-typedef {float x, y, z; } vec3;

ichaphaza lokudada (const vec3 *a, const vec3 *b) {
buyisela a->x * b->x +
a->y * b->y +
a->z * b->z;
}

iyakuchithwa yi-wasm-decompile into eluncedo ibe kulwimi-lobuxoki

umsebenzi ichaphaza (a:{ a:dada, b:dada, c:dada },
b:{ a:dada, b:dada, c:dada}):dada {
buyisela aa * ba + ab * bb + ac * bc
}

ngelixa uguqulelo kwifomati yokubhaliweyo ".wat" iza kujongeka ngolu hlobo

(func $dot (uhlobo 0) (param i32 i32) (isiphumo f32)
(f32.yongeza
(f32.yongeza
(f32.mul
(f32.umthwalo
(yasekhaya.fumana 0))
(f32.umthwalo
(yasekhaya.fumana 1)))
(f32.mul
(f32.load offset=4
(yasekhaya.fumana 0))
(f32.load offset=4
(yasekhaya.fumana 1))))
(f32.mul
(f32.load offset=8
(yasekhaya.fumana 0))
(f32.load offset=8
(yasekhaya.fumana 1)))))

umthombo: opennet.ru

Yongeza izimvo