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.
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.