Засновник QEMU та FFmpeg опублікував JavaScript-движок QuickJS

Французький математик Фабріс Беллар (Fabrice Bellard), який свого часу заснував проекти QEMU і FFmpeg, а також створив найшвидшу формулу обчислення числа Пі та розробив формат зображень БПГ, опублікував перший випуск нового JavaScript-движка QuickJS. Двигун відрізняється компактністю та орієнтований на вбудовування в інші системи. Код проекту написаний мовою Сі та поширюється під ліцензією MIT. Також доступна збірка двигуна, скомпільована в WebAssembly за допомогою Emscripten і придатна для виконання в браузерах.

Реалізація JavaScript підтримує специфікацію ES2019, включаючи модулі, асинхронні генератори та проксі. Опціонально підтримуються нестандартні математичні розширення для JavaScript, такі як типи BigInt та BigFloat, а також навантаження операторів. За продуктивністю QuickJS суттєво перевершує наявні аналоги, наприклад, у тесті
bench-v8 випереджає двигун XS на 35% DukTape більш ніж удвічі, jerryscript втричі, а MuJS у сім разів.

Крім бібліотеки для вбудовування движка в додатку проектом також пропонується інтерпретатор qjs, який можна використовувати для запуску коду JavaScript з командного рядка. Більш того, доступний компілятор qjsc, здатний на виході генерувати придатні для відокремленого запуску виконувані файли, що не потребують зовнішніх залежностей.

Основні особливості:

  • Компактність та простота вбудовування в інші проекти. Код включає лише кілька файлів мовою Сі, які вимагають збирання зовнішніх залежностей. Скомпільований найпростіший додаток займає близько 190 Кб;
  • Дуже висока продуктивність та малий час запуску. Проходження 56 тисяч тестів на сумісність із ECMAScript займає близько 100 секунд під час виконання на одному ядрі звичайного настільного ПК. Ініціалізація runtime займає менше 300 мікросекунд;
  • Майже повна підтримка специфікації ES2019 та повна підтримка програми B, що визначає компоненти для сумісності зі старими web-додатками;
  • Повне проходження всіх тестів із набору ECMAScript Test Suite;
  • Підтримка компіляції коду мовою Javascript у виконувані файли без зовнішніх залежностей;
  • Складальник сміття на основі підрахунку посилань без циклічного виконання чищення, що дозволив досягти передбачуваної поведінки та зниження споживання пам'яті;
  • Набір розширень для математичних обчислень на JavaScript;
  • Оболонка для виконання коду в режимі командного рядка, що підтримує контекстне підсвічування коду;
  • Компактна стандартна бібліотека з обв'язками над Бібліотекою.

Проектом також розвиваються три супутні Сі-бібліотеки, задіяні в QuickJS та придатні для окремого застосування:

  • libregexp - швидка реалізація регулярних виразів, повністю сумісних зі специфікацією Javascript ES 2019;
  • libunicode – компактна бібліотека для роботи з Unicode;
  • libbf - реалізація операцій з плаваючою комою довільної точності та трансцендентних функцій з точним округленням.

Джерело: opennet.ru

Додати коментар або відгук