Założyciel QEMU i FFmpeg publikuje silnik JavaScript QuickJS

Francuski matematyk Fabrice Bellard, który kiedyś założył projekty QEMU i FFmpeg, a także stworzył najszybszą formułę obliczania pi i opracował format obrazu BPG, opublikował pierwszą wersję nowego silnika JavaScript QuickJS. Silnik jest kompaktowy i nastawiony na osadzenie w innych systemach. Kod projektu jest napisany w C i rozpowszechniany na licencji MIT. Dostępny jest również zespół silnika skompilowany do WebAssembly przy użyciu Emscripten i nadający się do wykonania w przeglądarkach.

Implementacja JavaScriptu obsługuje specyfikacji ES2019, w tym modułów, generatorów asynchronicznych i serwerów proxy. Opcjonalnie obsługiwane są niestandardowe obliczenia matematyczne. ekspansja dla JavaScript, takie jak typy BigInt i BigFloat, a także przeciążenie operatora. Pod względem wydajności QuickJS jest znaczący lepszy od istniejące analogi, na przykład w teście
Bench-v8 wyprzedza silnik XS na poziomie 35%, taśma klejąca więcej niż dwukrotnie jerryscript trzy razy i MuJS siedem razy.

Oprócz biblioteki do osadzania silnika w aplikacjach, projekt oferuje również interpreter qjs, za pomocą którego można uruchamiać kod JavaScript z wiersza poleceń. Ponadto dostępny jest kompilator qjsc, zdolny do generowania samodzielnych plików wykonywalnych, które nie wymagają zewnętrznych zależności.

Najważniejsze cechy:

  • Kompaktowy i łatwy do zintegrowania z innymi projektami. Kod zawiera tylko kilka plików C, które nie wymagają zewnętrznych zależności do zbudowania. Skompilowana prosta aplikacja zajmuje około 190 KB;
  • Bardzo wysoka wydajność i krótki czas uruchamiania. Przejście 56 tysięcy testów kompatybilności z ECMAScript zajmuje około 100 sekund, gdy jest wykonywane na jednym rdzeniu typowego komputera stacjonarnego. Inicjalizacja środowiska wykonawczego zajmuje mniej niż 300 mikrosekund;
  • Prawie pełne wsparcie dla specyfikacji ES2019 i pełne wsparcie dla Annex B, który definiuje komponenty pod kątem kompatybilności ze starszymi aplikacjami webowymi;
  • Całkowite zaliczenie wszystkich testów z pakietu ECMAScript Test Suite;
  • Obsługa kompilacji kodu Javascript do plików wykonywalnych bez zewnętrznych zależności;
  • Moduł wyrzucania elementów bezużytecznych z liczeniem odwołań bez cyklu czyszczenia, co pozwoliło na przewidywalne zachowanie i mniejsze zużycie pamięci;
  • Zestaw rozszerzeń do obliczeń matematycznych w języku JavaScript;
  • Powłoka do wykonywania kodu w trybie wiersza poleceń, która obsługuje kontekstowe podświetlanie kodu;
  • Kompaktowa biblioteka standardowa z powiązaniami z biblioteką C.

W ramach projektu opracowano również trzy towarzyszące biblioteki C zaangażowane w QuickJS i nadające się do osobnej aplikacji:

  • libregexp to szybka implementacja wyrażeń regularnych w pełni zgodna ze specyfikacją Javascript ES 2019;
  • libunicode - kompaktowa biblioteka do pracy z Unicode;
  • libbf to implementacja operacji zmiennoprzecinkowych o dowolnej precyzji i funkcji przestępnych z dokładnym zaokrąglaniem.

Źródło: opennet.ru

Dodaj komentarz