Заснавальнік 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

Дадаць каментар