Cheerp 3.0, C/C++ kupita ku JavaScript compiler, idasamukira ku Apache 2.0 ndi ziphaso za LLVM

The Cheerp 3.0 compiler imayambitsidwa, kukulolani kuti mupange code iliyonse ya C/C++ ku WebAssembly kapena JavaScript. Nthambi yatsopanoyi ndiyodziwikiratu pakusuntha kophatikiza ndi malaibulale otsagana nawo kuti agwiritse ntchito ziphaso zololeza za Apache 2.0 ndi LLVM, m'malo mwa mfundo zololeza zomwe zidagwiritsidwa ntchito kale, zopatsa chilolezo cha GPLv2 pama projekiti omwe siamalonda komanso chilolezo cha eni ake amalonda. Khodi yophatikizira imachokera ku LLVM ndi Clang, ndipo imaphatikizapo kukhathamiritsa kowonjezera kuti muwongolere magwiridwe antchito ndikuchepetsa kukula kwa zotsatira zomwe zaphatikizidwa.

Cheerp ingagwiritsidwe ntchito posungira malaibulale omwe alipo C/C++ ndi mapulogalamu kuti ayendetse mu msakatuli, komanso kupanga mapulogalamu apamwamba kwambiri a pa intaneti ndi zigawo za WebAssembly kuyambira pachiyambi. Pulojekitiyi imakupatsani mwayi wophatikiza C / C ++ ndi JavaScript mu pulogalamu imodzi yapaintaneti ndikutha kupeza kuchokera ku JavaScript code kupita kuzinthu zomwe zidapangidwa mu C / C ++, komanso kuchokera ku C / C ++ mpaka ku JavaScript zinthu, JavaScript. malaibulale, Web API ndi zinthu zonse za DOM. Zimaloledwa kupanga misonkhano yophatikizana, ma code ena omwe amapangidwa mu JavaScript, ndi ena ku WebAssembly. Imathandizira ma projekiti omanga omwe amagwiritsa ntchito malaibulale okhazikika libc ndi libc ++.

Poyerekeza ndi compiler ya Emscripten, Cheerp imapanga code yapakatikati ya WebAssembly (pa avareji, kukula kwa mafayilo ndi 7% yaying'ono). Mwachidziwitso, kusiyanaku kumabwera chifukwa chakuti Emscripten imagwiritsidwa ntchito ngati mawonekedwe a chinthu cha WebAssembly ndipo imapanga zomangiriza ndi kukhathamiritsa pa WebAssembly post-processing stage (wasm-opt). Cheerp amagwiritsa ntchito LLVM bytecode ngati choyimira chapakati cha malaibulale ndi mafayilo azinthu, kulola kukhathamiritsa kwa projekiti yonse yomwe imagwiritsa ntchito metadata ya LLVM-level popanda kufunika kokonzanso pambuyo.

Kuphatikiza apo, Cheerp imagwiritsa ntchito PreExecuter optimizer, yomwe imapereka ma code preemptive pa nthawi yophatikiza, mwachitsanzo, kutembenuza omanga omwe amagwiritsidwa ntchito poyambitsa zinthu zapadziko lonse lapansi kukhala zokhazikika. Komanso, polemba, PartialExecuter imagwiritsidwa ntchito, yomwe, kutengera kusanthula kwa magawo ogwirira ntchito, imachotsa ma code omwe amatsimikiziridwa kuti sagwiritsidwe ntchito pakuphedwa.

Cheer imathanso kupanga JavaScript code kuti igwire ntchito mwamphamvu ndi kukumbukira komwe kumaphimbidwa ndi otolera zinyalala. Makamaka, m'malo motengera malo aadiresi achikhalidwe ndi zolemba zojambulidwa, Cheerp imapereka mapu achindunji a zinthu za C ++ ku zinthu za JavaScript, zomwe zimachepetsa kukumbukira kukumbukira chifukwa wotolera zinyalala wa JavaScript amatha kuchotsa zinthu zosagwiritsidwa ntchito. Kupititsa patsogolo magwiridwe antchito, makina apakatikati a WebAssembly amagwiritsa ntchito zowonjezera za SIMD kukonza kufananiza kwa magwiridwe antchito a data.

Cheerp itha kugwiritsidwa ntchito ngati nsanja yopangira makina ophatikizika a kasitomala / seva mu C ++. M'machitidwe apano, ndizofala kupanga msakatuli wosiyana ndi msakatuli wakutsogolo wolembedwa mu JavaScript ndi wosiyana kumbuyo wolembedwa mu PHP, Python, Ruby, kapena JavaScript/Node.js. Cheerp imapereka njira zopangira mapulogalamu athunthu a C ++ omwe amathandizira kumbuyo ndi kutsogolo mu codebase imodzi. Panthawi yophatikizira, mbali ya seva imapangidwa kukhala kachidindo komweko, ndipo mawonekedwewo amasinthidwa kukhala mawonekedwe a JavaScript. Kusintha kwa zigawo zonse za polojekiti, kuphatikizapo zomwe zasinthidwa kukhala JavaScript, zimachitika pogwiritsa ntchito malemba a C ++ pogwiritsa ntchito ukadaulo wa Source Map (ngati cholakwika chichitika, mutha kuwona gawo la code C ++, kukhazikitsa ma breakpoints mu code C ++ ndi sitepe ya mzere ndi mzere. -kutsata ndondomeko ya C ++ kumathandizidwa).

Source: opennet.ru

Kuwonjezera ndemanga