LINUX.ORG.RU

Форкнули QuickJS

 , , , ,


0

3

Оригинал Белларда: https://github.com/bellard/quickjs.
Форк: https://github.com/quickjs-ng/quickjs:

QuickJS is a small and embeddable JavaScript engine. It aims to support the latest ECMAScript specification.
This project is a fork of the original QuickJS project by Fabrice Bellard and Charlie Gordon, after it went dormant, with the intent of reigniting its development.

Версия 0.8.0 от 24 декабря 2024.


Другие JavaScript-движки на C.

https://github.com/svaarala/duktape – больше года без изменений.

Duktape is an embeddable Javascript engine, with a focus on portability and compact footprint.

https://github.com/jerryscript-project/jerryscript – версия 3.0.0 от 18 декабря 2024.

JerryScript is a lightweight JavaScript engine for resource-constrained devices such as microcontrollers. It can run on devices with less than 64 KB of RAM and less than 200 KB of flash memory.

★★★★★

Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от firkax

А ещё пофиксили новомодное объявление переменной в середине блока.

новомодное

c99

Чувак, этому стандарту 26 лет уже. Родившиеся после его выхода уже своих детей заводят во всю.

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

Это всё не важно. Оно (объявление переменной в середине блока на Си) и через 100 лет будет новомодным и нежелательным.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

через 100 лет будет новомодным и нежелательным

С чего это вдруг? Я, конечно, понимаю, что о религии не спорят. Но порой удобнее чтоб переменная была объявлена не далеко от первого места ее использования.

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

Ему просто нравится когда из-за неинициализированных переменных отрывает жопу. Он ещё код без -Wall собирает.

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

Но порой удобнее чтоб переменная была объявлена не далеко от первого места ее использования.

Согласен. Поэтому ещё одна рекомендация: если тело функции чрезмерно раздулось и от объявления переменных до их использования приходится долго листать - надо подумать о том как реорганизовать код, чтобы она стала короче.

В крайнем случае можно выделить блок фигурными скобками (и отступом!) и в его начале объявить те переменные, которые ты хочешь именно тут. Отступ и скобки помогут зрительно распознать это место, а так же ограничат область видимости временно-нужной переменной чтобы она не мешалась дальше. Но в целом такой способ тоже не особо хороший, лучше пользоваться тем что выше указан.

int f(...) {
  int a;
  q();
  a = 3;
  w();
  {
    int b;
    b = 4;
    x(b);
  }
  s();
  return 0;
}

А вот способ «давайте объявим переменную в середине кода или засунем её внутрь оператора» - самый плохой из вариантов решения указанной тобой проблемы.

Возможно, ты скажешь, что объявление переменной внутри круглых скобок for() это то же самое что блок с отступом. Нет, разница такая: блок с отступом означает, что идёт сначала пустая строка с одной скобкой - очень хорошо заметная, а затем - ещё одна строка для объявления. В случае же с for(int i=) никаких зрительных барьеров перед объявлением нет, а объявление перемешано с императивным кодом.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 6)
Ответ на: комментарий от firkax

А вот способ «давайте объявим переменную в середине кода или засунем её внутрь оператора» - самый плохой из вариантов решения указанной тобой проблемы.

Самый плохой вариант – это то, что ты пишешь. Переменная должна быть объявлена одновременно с инициализацией.

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

В случае же с for(int i=) никаких зрительных барьеров перед объявлением нет, а объявление перемешано с императивным кодом.

Спорное утверждение. Если просматривая код взгляд падает на for (i = 0; ...) то сразу придется искать глазами где объявлен тип i и думать будет ли видна эта переменная далее по коду. А так, сразу виден тип и понятно, что переменная i не будет видна вне блока for.

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

Мне больше интересно, что будет в его случае, если в функции два цикла с счётчиками разных типов.

hateyoufeel ★★★★★
()

Будут делать из быстрого, лёгкого и простого тормознео, жирное и сложное? Чтобы «мейнстримные» JS не выглядели отвратительным уродством по сравнению с оригинальным QuickJS?

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

Родившиеся после его выхода уже своих детей заводят во всю.

Вся негодует от количества заведённых детей!

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

Это встраиваемый движок, он впринципе не рассчитан на конкуренцию с мейнстримом.

bdrbt
()
Ответ на: комментарий от Zhbert

Пишешь, допустим что-нибудь на C - и тут тебе нужно завести туда либо очень хитровывернутый конфиг или DSL-сценарии, чтобы в 100500й раз не писать наколеночные костыли или не дёргать баш-портянки - встраиваешь в свой проект quickjs - и можно писать простенькую автоматизацию на жабоскрипте.

bdrbt
()
Ответ на: комментарий от Zhbert

Встраивание JS в С. Ох, куда-то этот мир не туда свернул :)

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

bdrbt
()
Ответ на: комментарий от Zhbert

Встраивание JS в С. Ох, куда-то этот мир не туда свернул :)

У тебя в лялексе уже лет 15 JS из под рута крутится в виде polkit. Только там раньше движок от мозиллы был.

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

А что это вообще

Да вроде понятно.

QuickJS is a small and embeddable JavaScript engine. It aims to support the latest ECMAScript specification.

и нафейхоа нужно? :)

Ну это как Lua, только JS. :)

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

этому стандарту 26 лет уже

Никак не могу привыкнуть. Кстати, в жс тоже пишу по привычке var в начале функции, потому что раньше там можно было подорваться на наркоманском «hoisting». Даже придумали «single var pattern» для защиты от этой фигни. А у меня теперь травма на всю жизнь.

bread
()
Ответ на: комментарий от hateyoufeel

с99

Чувак, этому стандарту 26 лет уже. Родившиеся после его выхода уже своих детей заводят во всю.

Сишники детей делают? У них кровать разве не сегфолтится от малейшей тряски?

upcFrost ★★★★★
()

Во, этот квикжс используется в сборочной системе Qbs.

И вроде как там пробуют старый квикжс заменить на форк квикжс-нг, но у форка вроде как какая то хрень с производительностью, она ниже, на 3%

Ссыль https://github.com/quickjs-ng/quickjs/issues/876

kuzulis ★★
()
Последнее исправление: kuzulis (всего исправлений: 1)
Ответ на: комментарий от upcFrost

с99

Чувак, этому стандарту 26 лет уже. Родившиеся после его выхода уже своих детей заводят во всю.

Сишники детей делают? У них кровать разве не сегфолтится от малейшей тряски?

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

hateyoufeel ★★★★★
()

жесть какая.

Во-первых оно даже не собирается

quickjs.c: In function 'JS_NewTypedArray':
quickjs.c:52364:14: error: comparison is always false due to limited range of data type [-Werror=type-limits]
52364 |     if (type < JS_TYPED_ARRAY_UINT8C || type > JS_TYPED_ARRAY_FLOAT64)
      |              ^

а во-вторых, сколько-сколько строк? 55980? почти 2 мегабайта в одном файле?

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

Во-первых оно даже не собирается

УМВР, git.

$ ./qjs -h

QuickJS-ng version 0.8.0 …

dataman ★★★★★
() автор топика

Добавил Duktape и JerryScript.

dataman ★★★★★
() автор топика
19 марта 2025 г.

Оригинал Белларда: https://github.com/bellard/quickjs

Ну вот:

9f1864a 2025-03-19 Fabrice Bellard msan fix (#389)
131408f 2025-03-19 Fabrice Bellard simplified js_bigint_from_float64()
7399069 2025-03-19 Fabrice Bellard fixed examples/hello_module compilation (#240)
6d6893b 2025-03-19 Fabrice Bellard fixed BigInt hashing - removed -fno-bigint in qjsc and JS_AddIntrinsicBigInt() (BigInt is now considered as a base object)
5a16c0c 2025-03-19 Fabrice Bellard fixed JS_DumpValue() for BigInt
6de8885 2025-03-19 Fabrice Bellard more bignum cleanup
96e7965 2025-03-19 Fabrice Bellard removed the ability to do simultaneous 64 and 32 bit x86 builds in order to simplify the Makefile
22dbf49 2025-03-19 GitHub Merge pull request #391 from nickva/try-to-fix-multiplatform-builds
e9c69f7 2025-03-18 Nick Vatamaniuc Fix multiarch CI builds
ee4cd4d 2025-03-18 Fabrice Bellard compilation fix
543897a 2025-03-18 Fabrice Bellard added missing variable
61e8b94 2025-03-18 Fabrice Bellard removed bignum support and qjscalc - added optimized BigInt implementation
837a697 2025-03-13 Fabrice Bellard regexp: allow [\-] in unicode mode (#373)
1be68b3 2025-03-13 Fabrice Bellard fixed CONFIG_ALL_UNICODE compilation
9bd10d8 2025-03-13 Fabrice Bellard simplified the handling of closures
dfd9c93 2025-03-13 Fabrice Bellard added missing stack overflow check in JSON.stringify()
25aaa77 2025-03-13 Fabrice Bellard allow regexp interruption (e.g. with Ctrl-C in the REPL)
027f3cb 2025-03-13 Fabrice Bellard fix crash when add_property()  fails on build arguments (penneryu)
c739deb 2025-03-13 Fabrice Bellard microbench: use toFixed()
6474793 2025-03-13 Fabrice Bellard JS_SetPropertyInternal(): avoid recursing thru the prototypes if the property is found in a prototype
030333c 2025-03-13 Fabrice Bellard fixed date parsing in case there is more than nine initial digits (initial patch by nickva)
----------------------------------------------------------------------------------
6e2e68f 2024-07-27 Charlie Gordon Fix termination in Worker test
012451d 2024-06-09 Charlie Gordon Define a fallback PATH_MAX if not available
dataman ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.