Cheerp en åpen kildekode-kompilator fra C/C++ til WebAssembly og JavaScript

cheerp

Cheerp: En C++-kompilator for nettet

Det ble nylig annonsert Cheerp 3.0 utgivelse, en kompilator som lar deg kompilere hvilken som helst C/C++-kode til WebAssembly eller JavaScript. Den nye grenen er kjent for å flytte kompilatoren og medfølgende biblioteker til å bruke permissive Apache 2.0- og LLVM-lisenser, i stedet for den tidligere brukte begrensede lisenspolicyen, som tilbyr et GPLv2-lisensalternativ for ikke-kommersielle prosjekter og en lisenseier for kommersielle prosjekter.

Cheerp kan brukes både til å portere eksisterende C/C++-applikasjoner og biblioteker for å kjøre i nettleseren, eller til å lage høyytelses webapplikasjoner og WebAssembly-komponenter fra bunnen av.

Det har gått over ett år siden forrige utgivelse av Cheerp ( Cheerp 2.7 ), og denne nye versjonen er fullpakket med nye funksjoner og optimaliseringer som igjen flytter det siste innen bruk av C++ som et programmeringsspråk for webapplikasjoner. og spill.

Viktigst av alt, med denne utgivelsen gjør vi en betydelig endring i Cheerps lisensieringsmodell. Fra og med Cheerp 3.0 er alle kjernekompilatorkomponenter og -biblioteker nå tillatt lisensiert under Apache 2.0/LLVM-lisensen. Dette markerer en radikal avvik fra vår tidligere GPLv2/dobbel kommersielle lisensmodell, som gjør at Cheerp 3.0 kan brukes til ethvert formål, uten begrensninger.

Om Cheerp

Prosjektet lar deg kombinere C/C++-kode og JavaScript i en nettapplikasjon med muligheten til å få tilgang fra JavaScript-kode til funksjoner som opprinnelig ble utviklet i C/C++, og fra C/C++-kode til JavaScript-objekter, JavaScript-biblioteker, Web APIer og alle DOM-funksjoner, i tillegg til at du kan lage blandede bygg, en del av koden som kompileres til JavaScript og deler til WebAssembly. Støtter byggeprosjekter som bruker standardbibliotekene libc og libc++.

Sammenlignet med Emscripten-kompilatoren, Cheerp genererer mer optimalisert og kompakt WebAssembly mellomkode (I gjennomsnitt er de resulterende filstørrelsene 7 % mindre.)

Konseptuelt koker forskjellene ned til det faktum at Melde deg på brukes som objektformat for WebAssembly og utfører binding og optimalisering i etterbehandlingsstadiet av WebAssembly (wasm-opt). Cheerp bruker LLVM-bytekode som en mellomrepresentasjon for biblioteker og objektfiler, noe som tillater bredere prosjektomfattende optimaliseringer ved å bruke metadata på LLVM-nivå uten behov for etterbehandling.

Relatert artikkel:
Emscripten 3.0, en byggeverktøykjede for WebAssembly ved bruk av LLVM

Videre Cheerp bruker PreExecuter-optimalisatoren for å kjøre kode på forhånd ved kompilering, for eksempel for å konvertere konstruktører som brukes til å initialisere globale objekter til konstanter. I tillegg brukes PartialExecuter under kompilering, som, basert på parsing av funksjonens parametere, fjerner kode som garantert ikke blir brukt ved kjøring.

Cheerp kan også generere JavaScript-kode for å fungere dynamisk med minne. dekket av søppelsamleren. Spesielt, i stedet for å emulere et tradisjonelt adresseområde med typematriser, gir Cheerp en direkte mapping fra C++-objekter til JavaScript-objekter, noe som reduserer minneforbruket fordi JavaScript-søppelsamleren har muligheten til å fjerne ubrukte objekter. For å forbedre ytelsen bruker den genererte WebAssembly-mellomkoden SIMD-utvidelser for å orkestrere parallellisering av dataoperasjoner.

Cheerp kan brukes som en plattform for å bygge innebygde webapplikasjoner klient/server i C++. I dagens praksis er det vanlig å utvikle en egen nettleserbasert frontend skrevet i JavaScript og en egen backend skrevet i PHP, Python, Ruby eller JavaScript/Node.js.

Cheerp gir deg muligheten til å bygge komplette C++ webapplikasjoner som støtter både backend og frontend i en enkelt kodebase.

Under byggeprosessen kompileres serversiden til innebygd kode, og grensesnittet konverteres til en JavaScript-representasjon. Feilsøking av alle prosjektkomponenter, inkludert de som er konvertert til JavaScript, utføres ved hjelp av C++-kildetekster ved bruk av Source Map-teknologi.

Endelig, hvis du er interessert i å vite mer om det, kan du sjekke detaljene i følgende lenke.

Kompilatorkoden er basert på LLVM- og Clang-utviklingen og inkluderer ytterligere optimaliseringer for å forbedre ytelsen og redusere størrelsen på den kompilerte utgangen.


Bli den første til å kommentere

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: AB Internet Networks 2008 SL
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.