LINUX.ORG.RU

QuickJS-NG 0.11.0

 , , , ,


0

3

После более пяти месяцев разработки состоялся выпуск 0.11.0 QuickJS-NG – небольшого встраиваемого движка JavaScript и предназначенный для поддержки последней спецификации ECMAScript.
Это форк оригинального проекта QuickJS Фабриса Белларда и Чарли Гордона, и создан после того, как QuickJS перестал развиваться, с целью возобновить его разработку.

Проект сосредоточен на следующих аспектах (но не ограничивается ими):

  • Развитие сообщества
  • Тестирование
  • Кроссплатформенность
  • Функции ECMAScript

Отличия от оригинального проекта можно посмотреть здесь. Проект написан на языке C и распространяется по лицензии MIT.

Список основных изменений:

  • os.exec поддерживает дополнительные группы.
  • Function.prototype.arguments соответствует спецификации.
  • Прото-методы итератора соответствуют спецификации.
  • TypedArray.prototype.includes соответствует спецификации.
  • Добавлены функции и методы: JS_IsSet, JS_IsWeakRef, Map, WeakMap, Iterator.concat и др.
  • Перенос исправлений по обработке OOM, утечке памяти и других изменений из bellard/quickjs.
  • Использование poll() вместо select() в функции js_os_poll.
  • Конструктор TypedArray сделан расширяемым.
  • Добавлены JS_New{Internal,Plain,Range,Reference,Syntax,Type}Error.
  • В список использующих QuickJS-NG проектов добавлена Lua-библиотека регулярных выражений Lua jsregexp.
  • Другие улучшения, оптимизации и исправления ошибок.

>>> Подробности на GitHub

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 1)

к сожалению там «Several runtimes can exist at the same time but they cannot exchange objects. Inside a given runtime, no multi-threading is supported.»

для эмбед куда-нибудь не годно. Лучше-бы он тормозил, но был дружен с тредами и хоть как-то мог обмениваться объектами

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Довольно много юзкейсов, когда скриптинг нужен только в одном треде, либо объекты никуда наружу и между тредами не утекают.
Для остальных случаев, думаю, можно реализовать GIL как в питоне, жил же он как-то всё это время. Когда альтернативы - собираемые часами v8 и spidormonkey, звучит вполне применимо

mittorn ★★★★★
()
Последнее исправление: mittorn (всего исправлений: 1)

Я его теперь встраиваю в свои наколенные демоны, написанные на rust 🦀 в качестве обработчика конфигов в формате js, вместо этих ваших toml, yaml и прочих json.

surefire ★★★
()

QuickJS перестал развиваться

Последний релиз на сайте от сентября 2025 года.

beck ★★★★
()
Ответ на: комментарий от beck

А что это, если не секрет? Конфиг в виде js кода?

Да, обычный js модуль, который экспортирует объект key/value. Мне показалось удобней, чем повыдумали разных форматов, абы исправить врожденные недостатки json, типа кавычки у ключей, отсутствие комментариев, конечных запятых. Можно даже императивности добавить в рамках разумного, например, если значения дублируются, немного отличаются или в цикле добавить много схожих конфигураций.

И самое важное, что в итоге получается, не намного жирнее, чем парсеры модных форматов.

surefire ★★★
()
Последнее исправление: surefire (всего исправлений: 4)

предназначенный для поддержки последней спецификации

А что такое «поддержка спецификации»??

Спецификация сама по себе неустойчива? Распадается??.. ;P ;))

Somebody ★★★
()
Ответ на: комментарий от beck

Последний релиз на сайте от сентября 2025 года.

Нет бы ещё посмотреть на активность коммитов до создания форка.

dataman ★★★★★
() автор топика
Ответ на: комментарий от surefire

Парсер условного ini в пару сотен строк делается. Использовать js парсер для статичных конфигов - это словно из атомной бомбы по мухам

mittorn ★★★★★
()
Ответ на: комментарий от Somebody

Да, распадается. Сейчас в каком-нибудь браузере скрипты на каком-нибудь говносайтике работают, а через год-два в этой версии этот сайт уже не откроется, потому что насыпали ещё больше ненужного сахара

mittorn ★★★★★
()

https://github.com/ctn-malone/qjs-ext-lib:

A set of pure JS extensions for QuickJS:

  • parse command line arguments and build static command line utilities using JS (see doc)
  • execute external processes asynchronously (see doc)
  • setInterval / clearInterval / wait functions (see doc)
  • curl wrapper supporting all HTTP methods and most of curl options (see doc)
  • ssh wrapper (for quick-and-dirty remote scripting without ansible) (see doc)
  • minimal unit testing library (see doc)
  • semver versions comparison (see doc)
  • interact with pass (see doc)
  • build glamorous shell scripts using gum (see doc)
  • manipulate paths in the style of Node.js path module (see doc)

NB: all extensions as well as os and std modules have typing through JSDoc

Rational

I’m focused on building static binaries targeting linux command line. This library is an intent at providing just enough to make creating static adhoc scripts easier on linux. This library is for you if you’re interested in doing one of the following

  • build decent CLIs easily
  • consume the output of external programs
  • build CI pipelines which don’t need dependencies beyond standard unix utilities
  • consume a HTTP API without depending on 100’s of packages (only curl binary is needed)
dataman ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.