Symudodd Cheerp 3.0, C/C ++ i gasglwr JavaScript, i drwyddedau Apache 2.0 a LLVM

Cyflwynir y casglwr Cheerp 3.0, sy'n eich galluogi i lunio unrhyw god C/C++ i WebAssembly neu JavaScript. Mae'r gangen newydd yn nodedig am symud y casglwr a'r llyfrgelloedd cysylltiedig i ddefnyddio trwyddedau caniataol Apache 2.0 a LLVM, yn lle'r polisi trwyddedu cyfyngedig a ddefnyddiwyd yn flaenorol, gan gynnig opsiwn trwydded GPLv2 ar gyfer prosiectau anfasnachol a thrwydded berchnogol ar gyfer rhai masnachol. Mae'r cod casglwr yn seiliedig ar ddatblygiadau LLVM a Clang, ac mae'n cynnwys optimeiddiadau ychwanegol i wella perfformiad a lleihau maint y canlyniad a luniwyd.

Gellir defnyddio Cheerp i borthladd llyfrgelloedd C/C++ presennol a rhaglenni i'w rhedeg yn y porwr, ac i greu cymwysiadau gwe perfformiad uchel a chydrannau WebAssembly o'r dechrau. Mae'r prosiect yn caniatΓ‘u ichi gyfuno cod C / C ++ a JavaScript mewn un cymhwysiad gwe gyda'r gallu i gael mynediad o god JavaScript i swyddogaethau a ddatblygwyd yn wreiddiol yn C / C ++, ac o god C / C ++ i wrthrychau JavaScript, JavaScript llyfrgelloedd, Web API a'r holl nodweddion DOM. Caniateir iddo greu cynulliadau cyfun, rhai o'r cod sydd ynddo wedi'i grynhoi i JavaScript, a rhai i WebAssembly. Mae'n cefnogi prosiectau adeiladu sy'n defnyddio'r llyfrgelloedd libc a libc++ safonol.

O'i gymharu Γ’ chasglydd Emscripten, mae Cheerp yn cynhyrchu cod canolradd WebAssembly mwy optimaidd a chryno (ar gyfartaledd, mae maint y ffeiliau canlyniadol 7% yn llai). Yn gysyniadol, mae'r gwahaniaethau'n deillio o'r ffaith bod Emscripten yn cael ei ddefnyddio fel fformat gwrthrych WebAssembly ac yn cyflawni'r rhwymiad a'r optimeiddio ar gam Γ΄l-brosesu WebAssembly (wasm-opt). Mae Cheerp yn defnyddio cod byte LLVM fel cynrychiolaeth ganolraddol ar gyfer llyfrgelloedd a ffeiliau gwrthrych, gan ganiatΓ‘u ar gyfer optimeiddio ehangach, ar draws y prosiect sy'n defnyddio metadata lefel LLVM heb fod angen Γ΄l-brosesu.

Yn ogystal, mae Cheerp yn defnyddio'r optimizer PreExecuter, sy'n darparu gweithrediad cod rhagataliol ar amser llunio, er enghraifft, i drosi adeiladwyr a ddefnyddir i gychwyn gwrthrychau byd-eang yn gysonion. Hefyd, wrth lunio, defnyddir PartialExecuter, sydd, yn seiliedig ar y dadansoddiad o baramedrau swyddogaeth, yn dileu cod y gellir ei warantu na chaiff ei ddefnyddio wrth gyflawni.

Gall hwyl hefyd gynhyrchu cod JavaScript i weithio'n ddeinamig gyda chof wedi'i orchuddio gan y casglwr sbwriel. Yn benodol, yn lle efelychu gofod cyfeiriad traddodiadol gydag araeau wedi'u teipio, mae Cheerp yn darparu mapio uniongyrchol o wrthrychau C ++ i wrthrychau JavaScript, sy'n lleihau'r defnydd o gof oherwydd bod gan gasglwr sbwriel JavaScript y gallu i gael gwared ar wrthrychau nas defnyddiwyd. Er mwyn gwella perfformiad, mae cod canolraddol WebAssembly a gynhyrchir yn defnyddio estyniadau SIMD i drefnu paraleleiddio gweithrediadau data.

Gellir defnyddio Cheerp fel llwyfan ar gyfer adeiladu cymwysiadau gwe cleient / gweinydd integredig yn C ++. Yn ymarferol ar hyn o bryd, mae'n gyffredin datblygu pen blaen ar wahΓ’n sy'n seiliedig ar borwr wedi'i ysgrifennu yn JavaScript a phen Γ΄l ar wahΓ’n wedi'i ysgrifennu yn PHP, Python, Ruby, neu JavaScript/Node.js. Mae Cheerp yn darparu'r modd i adeiladu cymwysiadau gwe C++ cyflawn sy'n cefnogi'r backend a'r blaen mewn un sylfaen cod. Yn ystod y broses lunio, mae ochr y gweinydd yn cael ei lunio i god brodorol, ac mae'r rhyngwyneb yn cael ei drawsnewid yn gynrychiolaeth JavaScript. Mae dadfygio holl gydrannau'r prosiect, gan gynnwys y rhai a droswyd i JavaScript, yn cael ei wneud gan ddefnyddio testunau ffynhonnell C++ gan ddefnyddio technoleg Map Ffynhonnell (os bydd gwall, gallwch weld adran o god C++, gan osod torbwyntiau yn y cod C++ a cham llinell wrth linell - wrth gam gweithredu cod C ++ yn cael ei gefnogi).

Ffynhonnell: opennet.ru

Ychwanegu sylw