Cheerp 3.0, C/C++ JavaScript компиляторына, Apache 2.0 және LLVM лицензияларына көшірілді

Cheerp 3.0 компиляторы енгізілді, ол кез келген C/C++ кодын WebAssembly немесе JavaScript ішіне компиляциялауға мүмкіндік береді. Жаңа филиал коммерциялық емес жобалар үшін GPLv2.0 лицензия нұсқасын және коммерциялық жобалар үшін меншік лицензиясын ұсынатын, бұрын қолданылған шектеулі лицензиялау саясатының орнына рұқсат етілген Apache 2 және LLVM лицензияларын пайдалану үшін компиляторды және ілеспе кітапханаларды жылжытуымен ерекшеленеді. Компилятор коды LLVM және Clang әзірлемелеріне негізделген және өнімділікті жақсарту және құрастырылған нәтиженің өлшемін азайту үшін қосымша оңтайландыруларды қамтиды.

Cheerp браузерде іске қосу үшін бар C/C++ кітапханаларын және қолданбаларды тасымалдау үшін де, өнімділігі жоғары веб-қосымшалар мен WebAssembly құрамдастарын нөлден жасау үшін де пайдаланылуы мүмкін. Жоба C/C++ және JavaScript тіліндегі кодты бір веб-қосымшада JavaScript кодынан C/C++ тілінде бастапқыда әзірленген функцияларға және C/C++ кодынан JavaScript нысандарына, JavaScript кітапханаларына, Web API және барлық мүмкіндіктері DOM. Біріктірілген жинақтарды жасауға болады, кодтың бір бөлігі JavaScript-те құрастырылған және бөлігі WebAssembly. Ол libc және libc++ стандартты кітапханаларын пайдаланатын құрылыс жобаларын қолдайды.

Emscripten компиляторымен салыстырғанда, Cheerp неғұрлым оңтайландырылған және ықшам WebAssembly аралық кодын жасайды (орта есеппен 7% кіші нәтиже файлдары). Тұжырымдама бойынша айырмашылықтар мынада: Emscripten WebAssembly нысан пішімі ретінде пайдаланылады және WebAssembly кейінгі өңдеу кезеңінде (wasm-opt) байланыстыру мен оңтайландыруды орындайды. Cheerp LLVM байт кодын кітапханалар мен нысан файлдары үшін аралық ұсыну ретінде пайдаланады, бұл бүкіл жобаны қамтитын кеңірек оңтайландыруға мүмкіндік береді және кейінгі өңдеуді қажет етпей LLVM деңгейіндегі метадеректерді пайдаланады.

Сонымен қатар, Cheerp компиляция сатысында кодтың алдын ала орындалуын қамтамасыз ететін PreExecuter оңтайландырғышын пайдаланады, мысалы, жаһандық нысандарды константаларға инициализациялау үшін пайдаланылатын конструкторларды түрлендіру үшін. Сондай-ақ компиляция кезінде функция параметрлерін талдау негізінде орындалу кезінде пайдаланылмауға кепілдік берілген кодты алып тастайтын PartialExecuter пайдаланылады.

Cheer сонымен қатар қоқыс жинағышпен қамтылған жадты динамикалық түрде басқару үшін JavaScript кодын жасай алады. Атап айтқанда, терілген массивтерді пайдаланып дәстүрлі мекенжай кеңістігін эмуляциялаудың орнына, Cheerp C++ нысандарын JavaScript нысандарына тікелей салыстыруды қамтамасыз етеді, бұл жадты тұтынуды азайтады, себебі JavaScript қоқыс жинағышында пайдаланылмаған нысандарды жою мүмкіндігі бар. Өнімділікті жақсарту үшін жасалған WebAssembly аралық коды деректер операцияларын параллельизациялауға мүмкіндік беретін SIMD кеңейтімдерін пайдаланады.

Cheerp C++ тілінде біріктірілген клиент/сервер веб-қосымшаларын жасау үшін платформа ретінде пайдаланылуы мүмкін. Ағымдағы тәжірибеде JavaScript тілінде жазылған бөлек браузер ішіндегі алдыңғы жағын және PHP, Python, Ruby немесе JavaScript/Node.js тілінде жазылған бөлек артқы жағын әзірлеу әдеттегідей. Cheerp С++ тілінде толық веб-қосымшаларды жасауға арналған құралдарды ұсынады, онда сервер мен фронт бір код базасында қолдау көрсетіледі. Компиляция процесі кезінде сервер жағы жергілікті кодқа құрастырылады, ал интерфейс JavaScript көрсетіліміне түрлендіріледі. Жобаның барлық құрамдас бөліктерінің, соның ішінде JavaScript-ке түрлендірілетіндердің жөндеуі Source Map технологиясының көмегімен C++ тіліндегі бастапқы мәтіндерді пайдалану арқылы жүзеге асырылады (қате орын алса, сіз C++ кодының бөлімін көре аласыз; ол C++ кодында және сызық бойынша тоқтау нүктелерін орнатуды қолдайды. -С++ кодын кезең-кезеңмен орындау жолы ).

Ақпарат көзі: opennet.ru

пікір қалдыру