V8 garatzaileek WebAssemblyrako deskonpiladore bat aurkeztu zuten

V8 JavaScript motorearen garatzaileak aurkeztu erabilgarritasuna wasm-deskonpilatu, tarteko irudikapen bitarra deskonpilatzeko aukera ematen duena WebAssembly JavaScript eta C gogorarazten dituen sasi-hizkuntza irakurgarri batean. Proposatutako sasi-hizkuntza askoz errazagoa da ulertzeko eta eskuzko analisirako egokiago WebAssembly-ren testu-irudikapena baino β€œ.wat” formatuan, hau da, mihiztadura-lengoaitik hurbilago dagoen goi-mailako hizkuntzetatik baino. Kasu honetan, deskonpilazioak Wasm irudikapena ahalik eta gehien islatzen du.

Deskonpilatzailea barne tresna-kutxan sartuta WABT, WebAssembly-ren irudikapen bitar eta testualen arteko itzulpena eskaintzen duena, baita wasm fitxategiak analizatu, prozesatu, aldatu eta egiaztatzea ere. WABT ere erabilgarritasun bat garatzen ari da wasm2c, eta horrek wasm fitxategiak C konpiladore batek konpila ditzakeen C kode baliokide batean deskonpilatzea ahalbidetzen du, baina ez da oso ezberdina irakurgarritasunari dagokionez "wat" testuaren irudikapenetik.

Adibidez, wasm-en konpilatutako jatorrizko C funtzioa

typedef struct { float x, y, z; } vec3;

float dot (const vec3 *a, const vec3 *b) {
itzuli a->x * b->x +
a->y * b->y +
a->z * b->z;
}

wasm-decompile utilitateak sasi-hizkuntza batean deskonpilatuko du

funtzioa dot(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
itzuli aa * ba + ab * bb + ac * bc
}

".wat" testu formatura bihurtzeak, berriz, itxura hau izango luke

(func $dot (mota 0) (param i32 i32) (emaitza f32)
(f32.gehitu
(f32.gehitu
(f32.mul
(f32.karga
(local.get 0))
(f32.karga
(local.lortu 1)))
(f32.mul
(f32.karga-desplazamendua=4
(local.get 0))
(f32.karga-desplazamendua=4
(lokal.lortu 1))))
(f32.mul
(f32.karga-desplazamendua=8
(local.get 0))
(f32.karga-desplazamendua=8
(lokal.lortu 1))))))

Iturria: opennet.ru

Gehitu iruzkin berria