Pythonile on pakutud JIT-kompilaator, mis kasutab copy-and-patch tehnikat.

Brandt Bucher, Microsoftist pÀrit core-arendaja CPythonist, kes töötab CPythoni tÔlgendi jÔudluse parandamise meeskonnas, avaldas JIT-kompilaatori rakenduse Pythonile, kasutades Copy-and-Patch tehnikat. JIT-i avaldamine kattub jÔuludega ja teadet on kirjutatud luulevormis.

Ettepanekud JIT-i kohta on mĂ€rkimisvÀÀrsed vĂ€ga kĂ”rge koodigeneratsiooni kiirusest, hoolduse lihtsusest ning tĂ€ielikust integreeritusest tĂ”lgendiga. Ettepanekud vĂ”imaldavad automaatselt muuta C keeles kirjutatud tĂ”lgendi JIT-kompilaatoriks, ilma et oleks vaja eraldi koodigeneratsiooni loogikat vĂ”i kĂ€sitsi koostada assembleri esitlusi. Sellise lĂ€henemise korral viib tĂ”lgendis viga automaatselt sama probleemi kĂ”rvaldamiseni JIT-is, kuna kasutatakse ĂŒhiseid koodigeneraatoreid.

Copy-and-Patch meetodi töö pĂ”hineb sellel, et koodi asukoha muutmine mĂ€lus objekti failide ĂŒhendamisel ja masinakeelsete juhiste asendamine nt bytecode'is JIT-is, on sarnased ĂŒlesanded. JIT-töötamise ajal programmi tĂ€itmise protsessis jĂ€lgitakse tĂ”lgendi genereeritud bytecode'i juhiseid ning kopeeritakse igale juhisele eelnevalt kompileeritud masinakeel kopeeri mĂ€llu koos tĂ€itmisega, samuti muudetakse juhiseid andmete asendamiseks otse kĂ€igus (JIT kopeerib valmis malli juba kompileeritud funktsioonidest ja asendab nendes vajalikud vÀÀrtused, nagu argumendid ja konstantid). Objekti failide laadimisel toimub samuti masinakeele kopeerimine mĂ€llu ja vĂ€listest sĂŒmbolitest asendamine.

Copy-and-Patch JIT loob LLVM-i abil objekti faili ELF-vormingus, mis sisaldab andmeid bytecode'i juhiste kohta ja teavet vajalike andmete asendamise kohta. JIT asendab tÔlgendamise kÀigus genereeritud bytecode'i juhised masinakeele esitustega, samal ajal asendades vajalikud arvutuste jaoks vajalikud andmed. JIT-i rakendamine nÔuab koostamise etapil sÔltuvuseks LLVM-i, kuid runtime-komponendid ei ole seotud vÀlistingimustega ja koosnevad umbkaudu 300 kÀsitsi kirjutatud C koodireast ning 3000 genereeritud C koodireast.

Traditsioonilise JIT-tööriistaga (LLVM -O0) vÔrreldes pakub ettenÀhtud JIT koodigeneratsiooni kiirus 100 korda kiiremat ja 15% kiiremat lÔppkoodi. WebAssembly kompilatsiooniga (Liftoff) vÔrreldes genereerib uus JIT koodi 5 korda kiiremini ja lÔppkood töötab 50% kiiremini. Uue JIT-i vÔrdlemisel optimeeritud JIT-iga (LuaJIT), mis kasutab kÀsitsi kirjutatud assemblerkoodi, osutus ettenÀhtud variant 13-st 44 testist kiiremaks, olles keskmiselt 35% aeglasem, samas aga pakkudes oluliselt lihtsamat hooldust ning madalamat rakendamise keerukust.

MĂ€ngi videot


Allikas: opennet.ru
Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster