LINUX.ORG.RU

Фабрис Белар выложил движок JavaScript

 


7

6

Французский математик Фабрис Белар (Fabrice Bellard), более известный работой над ffmpeg, qemu, tcc и вычислением числа Пи, выложил в открытый доступ QuickJS — компактную реализацию JavaScript в виде библиотеки на языке C.

  • Почти полностью поддерживает спецификацию ES2019.
  • В том числе математические расширения.
  • Проходит все тесты ECMAScript Test Suite.
  • Нет зависимостей от других библиотек.
  • Малый размер статически линкуемой библиотеки — от 190 KiB на x86 для «hello world».
  • Быстрый интерпретатор — проходит 56000 тестов ECMAScript Test Suite за ~100 с на 1 ядре настольного ПК. Накладные расходы на цикл запуска и остановки < 300 мкс.
  • Может компилировать исходные файлы на JavaScript в исполняемые файлы без внешних зависимостей.
  • Может компилировать исходные файлы на JavaScript в WebAssembly.
  • Сборщик мусора со счётчиком ссылок (детерминированный, с малым потреблением памяти).
  • Интерпретатор командной строки с цветной подсветкой синтаксиса.

Согласно тестам производительности из обсуждения на Opennet.ru, скорость QuickJS в тестах в 15-40 раз меньше, чем у Node.js.

>>> Сайт автора

★★★★★

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

Учитывая, кто автор, а также то, что запрос на перемены есть - будет

Там нужен качественный переход. У V8 встроенный WebAssembler и jit-компилятор, что делает его таким огромным. Если ОТ пойдёт тем же путём, то просто станет «ненужно» с судьбой вечно догонять V8.

kostyarin_ ★★
()

Раньше он полезными вещами занимался

Harald ★★★★★
()

Сборщик мусора со счётчиком ссылок (детерминированный, с малым потреблением памяти).

Бесполезно.

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

Но выше писали, что бывают сборки не под SSE2.

последняя такая сборка была год назад на базе предыдущей, 27й ветки луны (фф38еср). https://forum.palemoon.org/viewtopic.php?f=40&t=13530 ftp://contrib:get@ftp.palemoon.org/SSE-Linux/palemoon-27.9.4SSE.linux-i686.ta...

https://forum.palemoon.org/viewtopic.php?t=21595#p162996
https://www.q4os.org/forum/viewtopic.php?pid=14048#p14048 (сомнительно)

GlazoK
()
Ответ на: комментарий от ZenitharChampion

Низя! Сжечь еретика! Нужно писать на Rust, C#, или Питоне!

Возможно, стоило написать на RPython-е.

anonymous
()
Ответ на: комментарий от ZenitharChampion

javascript

Нужно писать на

javascript.
Это знает любой уважающий себя писатель языков.

anonymous
()
Ответ на: комментарий от Serbis

Ты в этом треде больше всех понимаешь смысл этого QuickJS! Это именно что компактный рантайм а-ля lua, но с синтаксическим сахаром современного JS. У остальных включается ассоциация «js - значит браузер».

Кстати, rebforce любит js за пределами веба. Думаю, он оценит компактный рантайм для js.

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

слишком медленно, как по мне. и v8 тормоз ужасный, а тут ещё в 40 раз медленнее.

anonymous
()
Ответ на: комментарий от gloomy

А ну да, чет я затупил, там же в архиве исходник qjs лежит, эта же программка по сути и есть hello world.

Serbis
()
Ответ на: комментарий от arturianec100

Потому что я тоже люблю js за пределами веба. Ну не только js, еще lua. Один из самых моих крупных экспериментов в области js как доменного языка, это использование его в качестве системы скриптования ПЛК. Т е в контекст скрипта биндились различные функции, полностью скрывающие за собой всю работу аппаратного уровня, а скрипт оперировал на очень высоком доменном уровне. Ну вот как пример, скрипт автополива из этой системы:

var POT_1_HUM = 45;
var POT_1_POMP = 0;
var POT_1_SN = 6;

function main(args) {
    while(true) {
        pot1();
        runtime.sleep(300000);
    }
}

function pot1() {
    var v = bridge.req("adc_r " + POT_1_SN);
    var n = parseInt(v);
    if (!isNaN(n)) {
        var proc = Math.floor((n - 1300) / 20.3);
        if (proc >= POT_1_HUM) {
            flood(POT_1_POMP);
            statFlood("pot1_flood.s");
        }
        statHum(proc, "pot1_hum.m");
    }
}

function flood(gpio) {
    var r1 = bridge.req("gpio_w " + gpio + " 1");
    if (r1 === "0") {
        runtime.sleep(10000);
        while(true) {
            bridge.req("gpio_w " + gpio + " 0");
            runtime.sleep(500);
            var r2 =  bridge.req("gpio_r " + gpio);
            if (r2 === "0")
                break;
        }
    }
}

function statHum(value, file) {
    storage.append(file, value + "," + new Date().getTime() + "\n");
}

function statFlood(file) {
    storage.append(file, "F," + new Date().getTime() + "\n");
}

Так что js это далеко не только веб…

Serbis
()
Ответ на: комментарий от question4

Хм… а откуда цифры? У меня на бенчмарках математики (pica, ресайзер изображений) когда в v8 случалась деоптимизация, скорость раза в 4 падала. Ну пусть в 10. Куда там еще пар выходит чтобы в 20 упало?

Я очень даже за встраиваемый JS, просто хочу понять что от него ждать по скорости и по памяти.

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

Вот никогда этого не пойму. Ну пишите вы на плюсах для встраивания! На выходе компактный и быстрый код, а в языке всё хорошо с эффективными абстракциями. Нет блин, дайте нам говно-VM с говноязыком, к которому мы по говновебу привыкли и ничего другого изучать не хотим. «Из колхозной молодёжи во фронтенде был лишь я.» Тьфу.

dimgel ★★★★★
()

скорость QuickJS в тестах в 15-40 раз меньше, чем Node.js

я не понял, поясните. это опечатка и должно читаться как «в 15-40 раз быстрее чем Node.js» или это означает что он тормознее Node.js в 15 или 40 раз?

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

QuickJS тормознее. В Node.js есть же JIT и оптимизации за счет потребление памяти, а QuickJS тип для встраивания, ему компактность нужна.

Deleted
()
Ответ на: комментарий от ZenitharChampion

Потом ты будешь плакаться что «лёгкий» браузер тормозит. Тут на форуме почему-то многие разделяют мнение что если кода в программе меньше, то она быстрее работает

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

откуда цифры?

Ссылка в тексте новости, но почему-то «#40» потерялось. https://www.opennet.ru/openforum/vsluhforumID3/117893.html#40

Человек скачал исходники, скомпилировал и прогнал тесты. Затем прогнал эти же тесты на V8. Чем больше, тем лучше. Как оптимизировать — не вникал.

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

или это означает что он тормознее Node.js в 15 или 40 раз?

В среднем — в 20. Да, тяжеловесный движок на тысячекратном повторении одного и того же скрипта оказывается быстрее.

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

латентность - это скрытое, не проявляющее себя свойство (латентный гомосексуалист)

latency - это задержка во времени, развитии

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

Спасибо за экскурс в ваше видение. Вот теперь вам образовательная ссылка со значением слова, там написано, что латентность это производное от латентный, что в свою очередь может обозначать и так милые вашему сердцу скрытые отклонения https://www.dictionary.com/browse/latency

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

сам-то читал, или только писатель?

Computers. the period of delay when one component of a hardware system is waiting for an action to be executed by another component.

anonymous
()

Фабрис Белар уже вошёл в историю опенсорса, а что готов дать опенсорсу ты, ЛОРовец?

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

Верю, но непонятно почему больше 10х проигрыш.

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

Обожди, сейчас местные хперты набегут рассказывать тебе сказки, что С кроссплатформенный.

А что такое? Язык действительно кроссплатформенный. Вот стандартной системы сборки к нему не сделали, да, в конце 70-х, видимо, считалось, что make хватит для всего (интересно, кстати, чем Ритчи и другие собирали большие проекты до появления make, это примерно 4 года, судя по википедии - теоретически это могли быть и шелл-скрипты, но это уж очень уныло.)

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

Хз зачем собирать, но в качестве интерпретатора для скриптов tcc огонь.

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

Компактный компилятор C, умеет запускать код аки интерпретатор.

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

... кроссплатформенный.

А что такое?

Тем временем

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

Но почему-то здесь только 2 человека вспомнили про него. Ни один как-бы-эмбедщик не заикнулся про него, и не спросил про портабельность quickjs.

anonymous
()
Ответ на: комментарий от ZenitharChampion

Для спасения от хромиума надо не браузер пилить, а веб-стандарты обратно упрощать. Гугол наворотил несовместимого говна, как микросовт в своё время, только у гугола ещё хватило денег/наглости протолкнуть WHATWG и обозвать своё говно официальным стандартом. Просто надо перестать жрать говно и вернуться к истокам. Когда HTML был простым языком разметки гипертекста, сайты не тормозили, не жрали по 32 ГБ памяти, можно было открыть исходник страницы и посмотреть, как оно сделано, сохранить по Ctrl-S и читать в оффлайне...

Pacmu3ka
()
Ответ на: комментарий от Serbis

А что за стандарты и наборы тестов, которые этот движок поддержал? Потому что если это веб-стандарты, то почему api изначально должен быть несовместимс существующими движками, а если это какие то системные скрипты, то зачем писать их на js?

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

Так, поставил себе NetSurf, вот таким браузер и должен быть. Давай, подскажи как в OpenStreetMap мне открыть свой город.

Deleted
()
Ответ на: комментарий от hobbit

Фабрис Белар уже вошёл в историю опенсорса

Он вошел в «историю» не потому что хотел войти в «историю». И у «истории» не было особых запросов к нему. Это случайное событие.
Поэтому твой запрос

что готов дать опенсорсу ты, ЛОРовец?

не к месту.
И чем больше аудитория лора, тем выше вероятность того, что какой-нибудь лоровец вляпнется в «историю».

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

Нужны. Но с учётом бабеля их можно и не реализовывать.

Legioner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.