V8 டெவலப்பர்கள் WebAssemblyக்கு ஒரு டிகம்பைலரை அறிமுகப்படுத்தினர்

V8 ஜாவாஸ்கிரிப்ட் இயந்திரத்தின் டெவலப்பர்கள் வழங்கப்பட்டது பயன்பாடு வாசம்-சிதைவு, இது இடைநிலை பைனரி பிரதிநிதித்துவத்தை சிதைக்க உங்களை அனுமதிக்கிறது webassembly ஜாவாஸ்கிரிப்ட் மற்றும் சி ஆகியவற்றை நினைவூட்டும் ஒரு படிக்கக்கூடிய போலி மொழியில். முன்மொழியப்பட்ட போலி மொழியானது, ".wat" வடிவமைப்பில் உள்ள WebAssembly இன் உரைப் பிரதிநிதித்துவத்தை விட, புரிந்துகொள்வதற்கு மிகவும் எளிதானது மற்றும் கைமுறையாகப் பாகுபடுத்துவதற்கு மிகவும் பொருத்தமானது, இது உயர்-நிலை மொழிகளைக் காட்டிலும் அசெம்பிளி மொழிக்கு நெருக்கமாக உள்ளது. இந்த வழக்கில், சிதைவு வாஸ்ம் பிரதிநிதித்துவத்தை முடிந்தவரை முழுமையாக பிரதிபலிக்கிறது.

டிகம்பைலர் சேர்க்கப்பட்டுள்ளது கருவித்தொகுப்பில் சேர்க்கப்பட்டுள்ளது WABT, இது WebAssembly இன் பைனரி மற்றும் டெக்ஸ்ட் பிரதிநிதித்துவங்களுக்கிடையில் மொழிபெயர்ப்பை வழங்குகிறது, அத்துடன் Wasm கோப்புகளின் பாகுபடுத்தல், செயலாக்கம், மாற்றம் மற்றும் சரிபார்ப்பு. WABT ஒரு பயன்பாட்டையும் உருவாக்குகிறது wasm2c, இது ஒரு சி கம்பைலரால் தொகுக்கப்படக்கூடிய சமமான சி குறியீட்டில் வாஸ்ம் கோப்புகளை சிதைக்க அனுமதிக்கிறது, ஆனால் "வாட்" இன் உரை பிரதிநிதித்துவத்திலிருந்து வாசிப்புத்திறன் அடிப்படையில் இது மிகவும் வேறுபட்டதல்ல.

எடுத்துக்காட்டாக, அசல் C செயல்பாடு wasm இல் தொகுக்கப்பட்டது

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

மிதவை புள்ளி(const vec3 *a, const vec3 *b) {
திரும்ப a->x * b->x +
a->y * b->y +
a->z * b->z;
}

ஒரு போலி-மொழியில் Wasm-decompile பயன்பாட்டால் சிதைக்கப்படும்

செயல்பாட்டு புள்ளி(a:{ a:float, b:float, c:float },
b:{ a:float, b:float, c:float }):float {
திரும்ப aa * ba + ab * bb + ac * bc
}

".wat" என்ற உரை வடிவத்திற்கு மாற்றுவது இப்படி இருக்கும்

(func $dot (வகை 0) (param i32 i32) (முடிவு 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

கருத்தைச் சேர்