QEMU og FFmpeg-grunnlegger publiserer QuickJS JavaScript Engine

Den franske matematikeren Fabrice Bellard, som en gang grunnla QEMU- og FFmpeg-prosjektene, og også laget den raskeste formelen for å beregne pi og utviklet bildeformatet BPG, publiserte den første utgivelsen av en ny JavaScript-motor QuickJS. Motoren er kompakt og fokusert på innbygging i andre systemer. Prosjektkoden er skrevet i C og distribuert under MIT-lisensen. Også tilgjengelig er en sammenstilling av motoren kompilert til WebAssembly ved hjelp av Emscripten og egnet for kjøring i nettlesere.

JavaScript-implementering støtter ES2019-spesifikasjonen, inkludert moduler, asynkrone generatorer og proxyer. Ikke-standard matematikk er valgfritt støttet. utvidelse for JavaScript, som BigInt- og BigFloat-typene, samt operatør overbelastning. Når det gjelder ytelse, er QuickJS betydelig overlegen eksisterende analoger, for eksempel i testen
bench-v8 er foran motoren XS på 35%, duktape mer enn to ganger jerryscript tre ganger og MuJS syv ganger.

I tillegg til biblioteket for å bygge inn motoren i applikasjoner, tilbyr prosjektet også qjs-tolken, som kan brukes til å kjøre JavaScript-kode fra kommandolinjen. Dessuten er qjsc-kompilatoren tilgjengelig, i stand til å generere frittstående kjørbare filer som ikke krever eksterne avhengigheter.

Nøkkelegenskaper:

  • Kompakt og enkel å integrere i andre prosjekter. Koden inkluderer bare noen få C-filer som ikke krever eksterne avhengigheter for å bygge. Den kompilerte enkle applikasjonen tar omtrent 190 KB;
  • Meget høy ytelse og lav oppstartstid. Å bestå 56 tusen ECMAScript-kompatibilitetstester tar omtrent 100 sekunder når de utføres på en enkelt kjerne på en typisk stasjonær PC. Kjøretidsinitiering tar mindre enn 300 mikrosekunder;
  • Nesten full støtte for ES2019-spesifikasjonen og full støtte for Annex B, som definerer komponenter for kompatibilitet med eldre nettapplikasjoner;
  • Fullstendig bestått alle tester fra ECMAScript Test Suite;
  • Støtte for kompilering av Javascript-kode til kjørbare filer uten eksterne avhengigheter;
  • Referansetelt søppelsamler uten oppryddingssykling, noe som muliggjorde forutsigbar oppførsel og redusert minneforbruk;
  • Et sett med utvidelser for matematiske beregninger i JavaScript-språket;
  • Et skall for å utføre kode i kommandolinjemodus som støtter kontekstuell kodeutheving;
  • Et kompakt standardbibliotek med bindinger over C-biblioteket.

Prosjektet utvikler også tre ledsagende C-biblioteker involvert i QuickJS og egnet for en separat applikasjon:

  • libregexp er en rask implementering av regulære uttrykk som er fullstendig kompatibel med Javascript ES 2019-spesifikasjonen;
  • libunicode - et kompakt bibliotek for å jobbe med Unicode;
  • libbf er en implementering av vilkårlig presisjon flytepunkt operasjoner og eksakt avrunding transcendentale funksjoner.

Kilde: opennet.ru

Legg til en kommentar