QEMU och FFmpeg grundare publicerar QuickJS JavaScript Engine

Den franske matematikern Fabrice Bellard, som grundade QEMU- och FFmpeg-projekten, skapade också den snabbaste formeln för att beräkna talet Pi och utvecklade bildformatet BNP, publicerade den första versionen av den nya JavaScript-motorn QuickJS. Motorn är kompakt och designad för integration i andra system. Projektkoden är skriven i C och distribueras under MIT-licensen. En build av motorn finns också tillgänglig, sammanställd i WebAssembly med Emscripten och lämplig för exekvering i webbläsare.

JavaScript-implementering stöder ES2019-specifikation, inklusive moduler, asynkrona generatorer och proxyservrar. Icke-standard matematik stöds valfritt expansionen för JavaScript, såsom BigInt- och BigFloat-typer, samt operatörens överbelastning. Prestandan hos QuickJS är betydande överlägsen tillgängliga analoger, till exempel i testet
bench-v8 ligger före motorn XS med 35 %, DukTape mer än fördubblats jerryscript tre gånger och MuJS sju gånger.

Förutom biblioteket för att bädda in motorn i applikationer, erbjuder projektet även en qjs-tolk, som kan användas för att köra JavaScript-kod från kommandoraden. Dessutom är qjsc-kompilatorn tillgänglig, som kan generera körbara utdatafiler som är lämpliga för fristående körning som inte kräver externa beroenden.

Huvudfunktioner:

  • Kompakt och lätt att integrera i andra projekt. Koden innehåller endast ett fåtal C-filer som inte kräver externa beroenden för montering. Den enklaste kompilerade applikationen tar cirka 190 KB;
  • Mycket hög prestanda och kort starttid. Att klara 56 tusen ECMAScript-kompatibilitetstester tar cirka 100 sekunder när det körs på en enda kärna på en vanlig stationär PC. Körtidsinitiering tar mindre än 300 mikrosekunder;
  • Nästan fullt stöd för ES2019-specifikationen och fullt stöd för Appendix B, som definierar komponenter för kompatibilitet med äldre webbapplikationer;
  • Fullständig godkänd av alla tester från ECMAScript Test Suite;
  • Stöd för att kompilera Javascript-kod till körbara filer utan externa beroenden;
  • En sophämtare baserad på referensräkning utan cyklisk rengöring, vilket gjorde att vi kunde uppnå förutsägbart beteende och minska minnesförbrukningen;
  • En uppsättning tillägg för matematiska beräkningar i JavaScript;
  • Ett skal för exekvering av kod i kommandoradsläge, som stöder kontextuell kodmarkering;
  • Kompakt standardbibliotek med omslag över C-biblioteket.

Projektet utvecklar också tre medföljande C-bibliotek involverade i QuickJS och lämpar sig för individuellt bruk:

  • libregexp - snabb implementering av reguljära uttryck, helt kompatibel med Javascript ES 2019-specifikationen;
  • libunicode - ett kompakt bibliotek för att arbeta med Unicode;
  • libbf - Implementering av godtyckliga precisionsflyttalsoperationer och transcendentala funktioner med exakt avrundning.

Källa: opennet.ru

Lägg en kommentar