Magsaya sa isang open source compiler mula sa C/C++ hanggang sa WebAssembly at JavaScript

cheerp

Cheerp: Isang C++ Compiler para sa Web

Ito ay inihayag kamakailan Paglabas ng Cheerp 3.0, isang compiler na nagbibigay-daan sa iyo na mag-compile ng anumang C/C++ code sa WebAssembly o JavaScript. Ang bagong sangay ay kapansin-pansin para sa paglipat ng compiler at mga kasamang aklatan upang gumamit ng mga permissive Apache 2.0 at LLVM na mga lisensya, sa halip na ang dating inilapat na limitadong patakaran sa lisensya, na nag-aalok ng opsyon sa lisensya ng GPLv2 para sa mga hindi pangkomersyal na proyekto at isang may-ari ng lisensya para sa mga komersyal na proyekto.

Maaaring gamitin ang Cheerp kapwa upang i-port ang mga umiiral nang C/C++ na application at mga aklatan upang tumakbo sa browser, o upang lumikha ng mga web application na may mataas na pagganap at mga bahagi ng WebAssembly mula sa simula.

Mahigit isang taon na ang nakalipas mula noong nakaraang paglabas ng Cheerp ( Cheerp 2.7 ), at ang bagong bersyon na ito ay puno ng mga bagong feature at optimization na, muli, nagpapagalaw sa estado ng sining ng paggamit ng C++ bilang programming language para sa mga Web application. at mga laro.

Pinakamahalaga, sa paglabas na ito ay gumagawa kami ng makabuluhang pagbabago sa modelo ng paglilisensya ng Cheerp. Mula sa Cheerp 3.0, lahat ng pangunahing bahagi ng compiler at mga aklatan ay pinahihintulutan na ngayong lisensyado sa ilalim ng lisensyang Apache 2.0/LLVM. Ito ay nagmamarka ng isang radikal na pag-alis mula sa aming nakaraang modelo ng GPLv2/dalawahang komersyal na lisensya, na nagpapahintulot sa Cheerp 3.0 na magamit para sa anumang layunin, nang walang paghihigpit.

Tungkol kay Cheerp

Ang proyekto nagbibigay-daan sa iyo na pagsamahin ang C/C++ code at JavaScript sa isang web application na may kakayahang mag-access mula sa JavaScript code hanggang sa mga function na orihinal na binuo sa C/C++, at mula sa C/C++ code hanggang sa mga bagay na JavaScript, JavaScript library, Web API, at lahat ng feature ng DOM, pati na rin ang pagpapahintulot sa iyong lumikha ng magkakahalong build, bahagi ng ang code na nag-compile sa JavaScript at mga bahagi sa WebAssembly. Sinusuportahan ang pagbuo ng mga proyekto na gumagamit ng karaniwang libc at libc++ na mga aklatan.

Kung ikukumpara sa Emscripten compiler, Cheerp bumubuo ng mas na-optimize at compact na WebAssembly intermediate code (Sa karaniwan, ang mga resultang laki ng file ay 7% na mas maliit.)

Conceptually, ang mga pagkakaiba ay bumagsak sa katotohanang iyon Mag-sign up ay ginagamit bilang object format ng WebAssembly at nagsasagawa ng pagbubuklod at pag-optimize sa yugto ng post-processing ng WebAss Assembly (wasm-opt). Gumagamit ang Cheerp ng LLVM bytecode bilang isang intermediate na representasyon para sa mga library at object file, na nagbibigay-daan para sa mas malawak na pag-optimize sa buong proyekto gamit ang metadata sa antas ng LLVM nang hindi nangangailangan ng post-processing.

Kaugnay na artikulo:
Emscripten 3.0, isang build toolchain para sa WebAssembly gamit ang LLVM

Bukod dito, Ginagamit ng Cheerp ang PreExecuter optimizer para preemptively execute code sa oras ng pag-compile, halimbawa, upang i-convert ang mga konstruktor na ginamit upang simulan ang mga pandaigdigang bagay sa mga constant. Bilang karagdagan, ang PartialExecuter ay ginagamit sa panahon ng compilation, na, batay sa pag-parse ng mga parameter ng function, ay nag-aalis ng code na garantisadong hindi gagamitin sa execution.

Ang Cheerp ay maaari ding bumuo ng JavaScript code upang gumana nang dynamic sa memorya. sakop ng basurero. Sa partikular, sa halip na tularan ang isang tradisyunal na puwang ng address na may mga naka-type na array, nagbibigay ang Cheerp ng direktang pagmamapa mula sa mga bagay na C++ patungo sa mga bagay na JavaScript, na nagpapababa ng pagkonsumo ng memorya dahil ang tagakolekta ng basura ng JavaScript ay may kakayahang mag-alis ng mga hindi nagamit na bagay. Upang mapabuti ang pagganap, ang nabuong WebAssembly intermediate code ay gumagamit ng mga extension ng SIMD upang i-orkestrate ang parallelization ng mga pagpapatakbo ng data.

Maaaring gamitin ang Cheerp bilang isang platform upang bumuo ng mga naka-embed na web application client/server sa C++. Sa kasalukuyang pagsasanay, karaniwan nang bumuo ng hiwalay na front-end na nakabatay sa browser na nakasulat sa JavaScript at isang hiwalay na back-end na nakasulat sa PHP, Python, Ruby, o JavaScript/Node.js.

Nagbibigay ang Cheerp ng paraan upang makabuo ng kumpletong C++ web application na sumusuporta sa parehong backend at frontend sa iisang code base.

Sa panahon ng proseso ng pagbuo, ang server-side ay pinagsama-sama sa katutubong code, at ang interface ay na-convert sa isang representasyon ng JavaScript. Ang pag-debug ng lahat ng mga bahagi ng proyekto, kabilang ang mga na-convert sa JavaScript, ay isinasagawa gamit ang C++ na source text gamit ang Source Map technology.

Sa wakas, kung interesado kang malaman ang tungkol dito, maaari mong suriin ang mga detalye sa sumusunod na link.

Ang compiler code ay batay sa LLVM at Clang developments at may kasamang mga karagdagang pag-optimize upang mapabuti ang pagganap at bawasan ang laki ng pinagsama-samang output.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: AB Internet Networks 2008 SL
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.