Razveselite kompajler otvorenog koda sa C/C++ na WebAssembly i JavaScript

cheerp

Cheerp: C++ kompajler za Web

Nedavno je objavljeno Cheerp 3.0 izdanje, kompajler koji omogućava vam da prevedete bilo koji C/C++ kod u WebAssembly ili JavaScript. Nova grana je značajna po premještanju kompajlera i pratećih biblioteka na korištenje dopuštenih Apache 2.0 i LLVM licenci, umjesto ranije primijenjene politike ograničene licence, koja nudi opciju GPLv2 licence za nekomercijalne projekte i vlasnika licence za komercijalne projekte.

Cheerp se može koristiti i za portiranje postojećih C/C++ aplikacija i biblioteka za pokretanje u pretraživaču ili za kreiranje web aplikacija visokih performansi i WebAssembly komponenti od nule.

Prošlo je više od godinu dana od prethodnog izdanja Cheerp-a ( Cheerp 2.7), a ova nova verzija je prepuna novih funkcija i optimizacija koje još jednom pomjeraju stanje umjetnosti korištenja C++ kao programskog jezika za web aplikacije. i igrice.

Ono što je najvažnije, ovim izdanjem pravimo značajnu promjenu u Cheerpovom modelu licenciranja. Od Cheerpa 3.0, sve komponente i biblioteke jezgra kompajlera sada su dozvoljeno licencirane pod licencom Apache 2.0/LLVM. Ovo označava radikalno odstupanje od našeg prethodnog modela GPLv2/dvostruke komercijalne licence, dozvoljavajući Cheerp 3.0 da se koristi u bilo koju svrhu, bez ograničenja.

O Cheerpu

Projekat omogućava vam da kombinujete C/C++ kod i JavaScript u web aplikaciji sa mogućnošću pristupa iz JavaScript koda funkcijama koje su prvobitno razvijene u C/C++, i od C/C++ koda JavaScript objektima, JavaScript bibliotekama, Web API-jima i svim DOM funkcijama, kao i omogućavajući vam da kreirate mešovite verzije, deo kod koji se kompajlira u JavaScript i dijelovi u WebAssembly. Podržava projekte izgradnje koji koriste standardne biblioteke libc i libc++.

U poređenju sa Emscripten kompajlerom, Cheerp generira optimiziraniji i kompaktniji WebAssembly međukod (U prosjeku, rezultujuća veličina datoteke je 7% manja.)

Konceptualno, razlike se svode na to da Prijaviti se koristi se kao objektni format WebAssembly-a i vrši uvezivanje i optimizaciju u fazi naknadne obrade WebAssembly (wasm-opt). Cheerp koristi LLVM bajt-kod kao srednju reprezentaciju za biblioteke i objektne datoteke, omogućavajući šire optimizacije na nivou projekta koristeći metapodatke na nivou LLVM bez potrebe za naknadnom obradom.

Vezani članak:
Emscripten 3.0, lanac alata za izradu WebAssembly koristeći LLVM

Takođe, Cheerp koristi PreExecuter optimizator za preventivno izvršavanje koda u vrijeme kompajliranja, na primjer, za pretvaranje konstruktora koji se koriste za inicijalizaciju globalnih objekata u konstante. Pored toga, PartialExecuter se koristi tokom kompilacije, koji, na osnovu raščlanjivanja parametara funkcije, uklanja kod za koji se garantuje da se neće koristiti pri izvršavanju.

Cheerp također može generirati JavaScript kod za dinamički rad s memorijom. pokrivena odvoznikom smeća. Konkretno, umjesto emulacije tradicionalnog adresnog prostora sa upisanim nizovima, Cheerp obezbjeđuje direktno mapiranje iz C++ objekata u JavaScript objekte, što smanjuje potrošnju memorije jer JavaScript sakupljač smeća ima mogućnost uklanjanja neiskorištenih objekata. Za poboljšanje performansi, generirani WebAssembly međukod koristi SIMD ekstenzije za orkestriranje paralelizacije operacija podataka.

Cheerp se može koristiti kao platforma za izgradnju ugrađenih web aplikacija klijent/server u C++. U trenutnoj praksi, uobičajeno je da se razvije poseban front-end zasnovan na pretraživaču napisan u JavaScript-u i odvojeni back-end napisan u PHP-u, Python-u, Ruby-u ili JavaScript/Node.js.

Cheerp pruža sredstva za izgradnju kompletnih C++ web aplikacija koje podržavaju i backend i frontend u jednoj bazi koda.

Tokom procesa izgradnje, serverska strana se kompajlira u izvorni kod, a interfejs se konvertuje u JavaScript reprezentaciju. Otklanjanje grešaka svih komponenti projekta, uključujući i one konvertovane u JavaScript, vrši se korišćenjem C++ izvornih tekstova korišćenjem tehnologije Source Map.

Na kraju, ako ste zainteresirani da saznate više o tome, detalje možete provjeriti u sljedeći link.

Kompajlerski kod je zasnovan na razvoju LLVM-a i Clang-a i uključuje dodatne optimizacije za poboljšanje performansi i smanjenje veličine prevedenog izlaza.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.