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 ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.