The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Основатель QEMU и FFmpeg опубликовал JavaScript-движок Micro QuickJS

23.12.2025 22:02

Французский математик Фабрис Беллар (Fabrice Bellard), основавший в своё время проекты QEMU, FFmpeg, BPG, QuickJS, TinyGL и TinyCC, опубликовал новый JavaScript-движок для встраиваемых систем - Micro QuickJS, способный компилировать и выполнять JavaScript-программы, потребляя всего 10 КБ ОЗУ. Вместе с Си-библиотекой движок занимает примерно 100 КБ постоянной памяти. Возможна компиляция JavaScript в байткод и отдельный запуск байткода. Код проекта написан на языке Си и распространяется под лицензией MIT.

Движок поддерживает подмножество языка JavaScript, близкое к спецификации ECMAScript 5 (ES2019), но предъявляющее более строгие требования к коду и не допускающее использования некоторых неэффективных или приводящих к ошибкам JavaScript-конструкций. Например, глобальные переменные обязательно должны объявляться через ключевое слово "var", запрещено использование "with", массивы не могут иметь пустоты, невозможна инициализация при объявлении вида "new Number(1)", из eval невозможен доступ к локальным переменным.

Производительность Micro QuickJS близка к движку QuickJS, развиваемому Фабрисом c 2019 года. В Micro QuickJS задействована часть кода из движка QuickJS, но архитектура во многом отличается и спроектирована для минимального потребления памяти. Например, в Micro QuickJS задействован трассирующий сборщик мусора, в то время как в QuickJS использован подсчёт ссылок. Накладные расходы сборщика мусора составляют всего несколько бит на каждый выделенный блок памяти. Для выделения памяти используется собственный аллокатор, не зависящий от библиотечной функции malloc().

Другие отличия от QuickJS: не использующая стек виртуальная машина; иное внутреннее представление объектов; хранение строк в кодировке UTF-8; генерация стандартной библиотеки во время компиляции и её хранение в постоянной памяти с созданием в ОЗУ всего нескольких объектов; близкий к QuickJS, но не использующий рекурсию, парсер; совмещение в одном проходе генерации байткода и оптимизации (в QuickJS имеется несколько проходов для оптимизации).

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Основатель QEMU и FFmpeg опубликовал звуковой кодек TSAC
  3. OpenNews: Новая версия встраиваемого JavaScript-движка от основателя QEMU и FFmpeg
  4. OpenNews: Основатель QEMU и FFmpeg опубликовал JavaScript-движок QuickJS
  5. OpenNews: Создатель QEMU и FFmpeg предложил новый формат изображений BPG
  6. OpenNews: Основатель QEMU и FFmpeg развивает систему синхронизации файлов VFsync
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64483-quickjs
Ключевые слова: quickjs, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (52) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 22:27, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Самое весёлое, это когда JSеры пробуют движки типа QuickJS после того, как всю жизнь сидели на V8 и т.д., и ох*евают от того, насколько это неоптимизированный медленный язык без миллиардов инвестиций V8.
     
     
  • 2.4, Кошкажена (?), 22:35, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    У него есть продолжение https://github.com/quickjs-ng/quickjs и какой-то jit https://github.com/bnoordhuis/quickjit

    Для задач типа разборка жс в yt-dlp самое то. v8 ради такой задачи тащить это слишком.

     
     
  • 3.12, Аноним (12), 23:24, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • –4 +/
    >Для задач типа разборка жс в yt-dlp самое то

    ну конечно если ты готов полчаса ждать пока код прожуёт

     
     
  • 4.36, Кошкажена (?), 00:39, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>Для задач типа разборка жс в yt-dlp самое то
    > ну конечно если ты готов полчаса ждать пока код прожуёт

    В yt-dlp была интерпретация js на питоне раньше. В новой версии из-за закручивания гаек Гуглом ее уже не хватает.

     
  • 2.16, Аноним (16), 23:51, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Самое весёлое, это когда JSеры пробуют движки типа QuickJS

    JSеры об этих QuickJS и прочем даже и не слышали, лол. Серьезный JS пишется под реальные браузеры и Ноду, а не вот эти вот поделки.

     
     
  • 3.18, Аноним (18), 23:56, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    серьёзный и JS это не совместимые слова
     
     
  • 4.20, Аноним (16), 00:15, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > серьёзный и JS это не совместимые слова

    Да, серьезные программисты сайты Си кодят.

     
     
  • 5.41, Oe (?), 01:41, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Cерьезные программисты кодят под аппстор и плеймаркет
     
     
  • 6.42, Аноним (42), 01:45, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Серьезные программы типа тапай хомяка?
     
     
  • 7.53, Сирешётка (?), 05:03, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Пожалуйста продолжайте, у меня попкорн ещё не кончился...
     
  • 2.27, morphe (?), 00:24, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Аналогично с java, когда и без того кривой escape analysis вдруг пропадёт
     

  • 1.2, Аноним (2), 22:28, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Подмножество-убожество. Добавлять встраиваемый язык только для парсинга какого-нить конфига - очень паршивая концепция.
     
     
  • 2.6, _kp (ok), 22:52, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это зависит от того, с какой нагрузкой и скоростью хочется "парсить".
    Часто нужен просто какой то простой скриптовый язык в дополнение к основному ПО.
    И требуется например вовсе не скорость, а стабильность и отсутствие зависимостей.
    Что протестировал, то только именно то и работает.
    А столь компактные варианты интересны во встраиваемой технике.
     
     
  • 3.9, Витюшка (?), 23:08, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда и lua подойдёт. И nushell.
     
     
  • 4.13, _kp (ok), 23:26, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, lua и использую. Хотя, мне больше JS по душе.  


     
  • 4.19, Аноним (19), 00:04, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    когдато давно прикрутил луа к своему проекту, задача - получить из конфига строку "2 + 3", посчитать и вернуть int, с потенциальным расширением впоследствии прочитать циферку из http... по итогу оказалось проще заменить луа на js, чем пердолится с этой луой и хттр к ней прикручивать
     
     
  • 5.39, Ns rkjey (?), 01:17, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Skill issue, Lua встраивается элементарно.
     
  • 2.11, Аноним (11), 23:15, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Интересно, не знал об этом. Буду иметь в виду при разработке своих решений.
     
  • 2.25, Аноним (16), 00:21, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Добавлять встраиваемый язык только для парсинга какого-нить конфига

    В смысле "только"? По-твоему, других задач у скриптовых языков, кроме парсинга конфига, не существует?

    И зачем вообще тебе целый встраиваемый язык для парсинга конфига, лол?

     
     
  • 3.51, минона (?), 04:02, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Конфиги бывают разные. Например, конфиги емакса.
     

  • 1.3, Аноним (3), 22:28, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличная новость! Его можно собрать в wasm модуль, чтоб выполнять js из wasm рантайма вне браузера
     
  • 1.5, Кошкажена (?), 22:38, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Он бесспорно молодец. Но файл quickjs.c в 55 тыс строк как-то не очень. Можно же было разбить.
     
     
  • 2.8, _kp (ok), 22:54, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • –9 +/
    Вы там вручную покопаться собираетесь?
    А если с ИИ править и изучать, то в одном файле нормально.
     
     
  • 3.17, Аноним (17), 23:54, 23/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если нужна встраивоемость и сохранение ресурсов то нужна и модульность. Может мне вовсе ненужна поддержка строковых данных в utf или ещё какая-то модная фигня если я только мигаю светодиодами.
     
     
  • 4.21, Аноним (12), 00:17, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Хм, а на что ты заменишь utf, на UCS‑2?
     
     
  • 5.34, Аноним (34), 00:38, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем их использовать если я ничего никуда не пишу и текст не вывожу? Байткоду кодировка ненужна.
     
  • 4.43, _kp (ok), 01:50, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Хмм..
    Да, именно для встраиваемых систем интересна генерация экземпляра "только под конкретные нужды".

     
  • 2.22, premium user (?), 00:17, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > 55 тыс строк

    Для профессионала это не проблема.

     
     
  • 3.31, Аноним (16), 00:31, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> 55 тыс строк
    > Для профессионала это не проблема.

    "Не проблема" это только для гордых писателей в одно лицо, типа автора сабжа. А вот именно в профессиональной среде тебе бы коллеги сразу по шапке дали за такое.

     
     
  • 4.35, Аноним (34), 00:39, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Профессионально попроси нейросеть разбить на файлы.  
     
  • 4.38, Аноним (38), 01:10, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Что вы хорошего написали в этой среде? По шапке они друг другу дают))
     
  • 4.44, _kp (ok), 01:58, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Такие "портянки" раньше точно делать было не хорошо. С ними тупо тормозили редакторы, и тем более с фоновой компиляцией.

    Сейчас такие "портянки" не уже не является проблемой.
    Я не говорю, что так хорошо, или удобно, при разборе с ИИ инструментом, а именно то, это сейчас это не уже важно, ибо в простых редакторах профессионалы с этим копаться все равно не станут.

    Ps: скачал, и уже балуюсь.

     
  • 4.48, premium user (?), 03:13, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Дурову дай по шапке, он наверно не шарит в этом вашем айти) 75к строк:
    https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/
     
     
  • 5.49, Аноним (49), 03:20, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так Телеграм не микросервис, а громадная программа
     
  • 3.40, чтд (?), 01:19, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    согласный. про к такому и близко не подойдёт.
     

  • 1.10, Аноним (10), 23:14, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Эпичный чел
     
     
  • 2.23, Аноним (16), 00:18, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Эпичный чел

    Ничего эпичного - обычные страдания фигней мужика без семьи и детей.

     
     
  • 3.26, Аноним (26), 00:23, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Но тот что он делает (и сделал до этого) намного круче и сложнее, чем детей делать.
     
     
  • 4.30, Аноним (16), 00:29, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Но тот что он делает (и сделал до этого) намного круче и сложнее, чем детей делать.

    Ну да, делать все, чтобы твоему роду пришел конец - это очень круто.

    Ну, если только "делать" детей - да, наверное, сложнее. А вот вырастить потом этих детей достойно - это сори, посложнее, чем сутулиться годами за железкой.

     
     
  • 5.37, Аноним (37), 00:41, 24/12/2025 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 4.33, Аноним (33), 00:36, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Но тот что он делает (и сделал до этого) намного круче и сложнее, чем детей делать.

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

     
     
  • 5.52, Аноним (52), 04:13, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    То наследие, которое он после себя оставит в двести тысяч раз важнее для человечества, чем твои никому невсравшиеся дети.
    Теми вещами, что он создает и уже создал, люди будут пользоваться десятилетиями после его смерти.
    А ты, когда помрешь, останешься полным нонеймом, никто о тебе никогда не вспомнит.
     
  • 4.46, Джон Титор (ok), 02:43, 24/12/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.28, Аноним (26), 00:24, 24/12/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.47, Джон Титор (ok), 03:05, 24/12/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.54, Frestein (ok), 05:31, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Жалкая зависть от человека без реализованных амбиций
     

  • 1.14, Аноним (14), 23:29, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Круто такто
     
  • 1.15, Аноним (17), 23:51, 23/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Если у тебя такие ограничение по железу зачем тебе джаваскрипт, Фабрис не сказал? А так ради искусства красиво.
     
     
  • 2.24, Витюшка (?), 00:19, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Путаем имплементацию и спецификацию?
    И чем же JS хуже? Для скриптового языка вполне. Его несуразный дизайн (всякие цепочки прототипов)...но и конкурент Lua не лучше. Python? В общем список и закончился.
     
     
  • 3.29, Аноним (16), 00:25, 24/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос, наверное, был о целесообразности использования какой-либо скриптоты на железе с 10 килобайт ОЗУ.

    > Python?

    Ну, MicroPython вполне популярен.

     
     
  • 4.45, Джон Титор (ok), 02:27, 24/12/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     

  • 1.32, Джон Титор (ok), 00:34, 24/12/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру