Французский математик Фабрис Беллар (Fabrice Bellard), основавший в свое время проекты QEMU и FFmpeg, а также создавший самую быструю формулу вычисления числа Пи и разработавший формат изображений BPG (https://www.opennet.me/opennews/art.shtml?num=41198), опубликовал первый выпуск нового JavaScript-движка QuickJS (https://bellard.org/quickjs/). Движок отличается компактностью и ориентирован на встраивание в другие системы. Код проекта написан на языке Си и распространяется под лицензией MIT. Также доступна сборка движка, скомпилированная в WebAssembly при помощи Emscripten и пригодная для выполнения в браузерах.Реализация JavaScript поддерживает (https://bellard.org/quickjs/quickjs.html) спецификацию ES2019, включая модули, асинхронные генераторы и прокси. Опционально поддерживаются нестандартные математические расширения (https://bellard.org/quickjs/jsbignum.html) для JavaScript, такие как типы BigInt и BigFloat, а также перезагрузка операторов (https://ru.wikipedia.org/wiki/%D0%9F%D0%....
Кроме библиотеки для встраивания движка в приложения проектом также предлагается интерпретатор qjs, который можно использовать для запуска JavaScript-кода из командной строки. Более того, доступен компилятор qjsc, способный на выходе генерировать пригодные для обособленного запуска исполняемые файлы, не требующие внешних зависимостей.
По производительности QuickJS существенно превосходит (https://bellard.org/quickjs/bench.html) имеющиеся аналоги, например, в тесте
bench-v8 опережает движок XS (https://github.com/Moddable-OpenSource/moddable) на 35%, DukTape (https://duktape.org/) более чем в два раза, JerryScript (http://jerryscript.net/) в три раза, а MuJS (https://mujs.com/) в семь раз.
Основные особенности:
- Компактность и простота встраивания в другие проекты. Код включает лишь несколько файлов на языке Си, не требующих для сборки внешних зависимостей. Скомпилированное простейшее приложение занимает около 190 Кб;
- Очень высокая производительность и быстрое время запуска. Прохождение 56 тысяч тестов на совместимость с ECMAScript занимает около 100 секунд при выполнении на одном ядре обычного настольного ПК. Инициализация runtime занимает менее 300 микросекунд;
- Почти полная поддержка спецификации ES2019 и полная поддержка приложения "B", определяющего компоненты для совместимости со старыми web-приложениями;
- Полное прохождение всех тестов из набора ECMAScript Test Suite;
- Поддержка компиляции в кода на языке Javascript в исполняемые файлы без внешних зависимостей;
- Сборщик мусора на основе подсчёта ссылок без цикличного выполнения чистки, позволивший добиться предсказуемого поведения и снижения потребления памяти;
- Набор расширений для математических вычислений на языке JavaScript;
- Оболочка для выполнения кода в режиме командной строки, поддерживающая контекстную подсветку кода;
- Компактная стандартная библиотека с обвязками над Си-библиотекой.
Проектом также развиваются три сопутствующие Си-библиотеки, задействованные в QuickJS:
- libregexp - быстрая реализация регулярных выражений, полностью совместимых со спецификацией Javascript ES 2019;
- libunicode - компактная библиотека для работы с Unicode;
- libbf - реализация операций с плавающей запятой произвольной точности и трансцендентных функций с точным округлением.
URL: https://news.ycombinator.com/item?id=20411154
Новость: https://www.opennet.me/opennews/art.shtml?num=51079
А по сути сейчас не взлетит конечно. Разработчикам важно удобство а не размер файлов. С js делать ничего не надо вообще и везде работает. Это самое удобное. Надо в браузеры интегрировать и пару лет ждать пока браузеры не обновятся.
Для встраиваемых систем размер важен, а JavaScript очень удобен. Конечно, до тех пор, пока на нём пишут именно скрипты, а не приложения целиком.
Он удобен только лишь тем, что он встроен.
Нет ни одного другого языка с таким же количеством подводных комней, не очевидных и не стандартизированных поведений.
> Нет ни одного другого языка с таким же количеством подводных комней, не очевидных и не
> стандартизированных поведений.зато на нем умеет программировать (точнее, помнит наизусть два десятка готовых заклинаний для готовых модулей из npm) любая макака.
А для твоей lua все придется кодить самому. А на tcl вообще уже никто не умеет, кроме пары седобородых циско-админов из прошлого века.
есть неочевидные вещи, но поведение стандартизовано. И вообще это только кажется на первый взгляд..
Да, в этом плане оптимально поступил Google, развивая V8. Даже у Mozilla не получилось продвинуть новый движок SpiderMonkey, несмотря на все его достоинства.
Да если посмотреть, все последние проекты мозиллы оканчивались провалом. Сейчас, вот, браузер на очереди.
Да. Что делают с Фф и Тбёрдом - иначе бы им как-то.
Ты везде такое под копирку коментишь? https://www.opennet.me/opennews/art.shtml?num=41198
Красава :)
Класс, со временем прикрутят JIT, и можно будет создать убийцу Electron!
Для Electron ещё нужны DOM, CSS, рендер и т.д., так что всё равно те же 100Mb получатся.
С таким грамотным подходом получится сильно меньше чем 100 Мб. Opera когда-то была живым примером. Ничего не мешает повторить тот же опыт, были бы заинтересованные. Корпорациям, очевидно, совершенно по барабану. И это печалит.
У opera был чудовищный код с кучей костылей и if'ов под каждый случай, это не лучший пример.
Но оно работало. И весило, и кушало при этом мало. В вопросах оптимизации не до красоты кода. Да вы в исходник сабжа загляните - сплошная математика, но, как видно, обходит другие реализации по всем параметрам.
С каким грамотным? Разработчик смог сделать урезанную и медленную реализацию js для встраивания. Ок.
Но причем здесь электрон? Сделать медленную и урезанную реализацию браузера, которой невозможно будет пользоваться из-за низкой производительности...
Ну, судя по тестам, получилось лучше всех из тех, что реалистично написать 1-2 людям, конечно. Если поставить его архитектором и мейнтейнером группы программеров, уверен, что порвет остальные реализации. И я сильно сомневаюсь в том, что V8 - достижимый предел по оптимизациям. Можно быть быстрым и при меньшем потреблении ресурсов.
перезагрузка оператора это когда он завис что ли?
Речь про ПЕРЕОПРЕДЕЛЕНИЕ ИМЕНИ
Не, это перегрузка
Не надо тут капсом писать, мы знаем что такое перегрузка операторов и функций, в статье написано "перезагрузка".
>что такое перегрузка операторов и
>написано "перезагрузка".Б[уха]дь .
Поднимем же стакан светлую память издательства "Мир" и профильной академии... Академики работали, переводили забугорное, _словари_ терминов столбили... для нас, немытых пейзан.
Теперь только :/ собственные потуги. #пичально-я-гляжу-на #пятница #опять-нет-повода-не... #о-терминах
Написано ведь в новости, "перегрузка", а не "перезагрузка"..
Ну вот и поправил бы сразу язык, выкинув из него все говно. Может и получилась бы конфетка.А так - вся производительность тут же умрет под новым провоцируемым языком говнокодом.
[] == ![] // true
[1, 2, 3] + [4, 5, 6] // '1,2,34,5,6'
[,,,].length // 3Больше граблей богу граблей! Искривим мозг с рождения, не дай боже люди начнут писать прямой код..
> [] == ![] // true
> [1, 2, 3] + [4, 5, 6] // '1,2,34,5,6'
> [,,,].length // 3Сколько бы работодателей ни сменил, нигде не видел этих теоретических примеров. Зато я их видел в статьях типа "смотрите какая приколюха".
Но! Ты можешь меня легко опровергнуть, приведя в каком-нибудь гитхабе реальные примеры твоим трем кускам кода. Ждем опровержений, так сказать. Язык же провоцирует, как ты говоришь? Следовательно, ожидаются не пара ссылок, а пара десятков ссылок, найденных __сходу__ и за 15 минут начиная с 00:00 MSK (даю тебе 30 минут на рефреш страницы и обнаружение моего ответа, сейчас 23:32 MSK).
Да ну третий пример +- иногда используется, даже в PHP можно так запятые ставить.И ваще то, это фича, которую юзают! Кажись так можно пропускать переменные при деструктуризации
const [first,,third] = [1,2,3];
Но я не чекал, работает ли такой код, я с телефона
Чего???$ php -r 'var_dump([,,,]);'
PHP Fatal error: Cannot use empty array elements in arrays in Command line code on line 1Fatal error: Cannot use empty array elements in arrays in Command line code on line 1
не, там прикол в другом - в третьем примере по логике ответ должен был быть 4
Кому был должен? Ты выясни, чисто для себя, что такое .length - в данном случае он работает так, как ему положено
Нет, там [1,2,] == [1,2] поэтому empty между последней запятой и закрывающей скобкой не создается.
В python, кстати, тоже можно так писать - [1,2,] и это то же самое, что и [1,2]
Реально используемый код
[
"one",
"two",
"three",
]
По Вашей логике там должен быть пустой элемент в конце. А по логике разработчиков языка запятая в конце позволяет избежать ошибки при добавлении последующих элементов. Например
[
"one",
"two",
"three"
"four"
]
Если с андроеда - ставишь termux и можно прогать )
Так я об этом и написал: язык является таким скопищем граблей и ловушек, что приходится избегать(!!!!) базовых вещей.Вот еще:
1 < 2 < 3 // -> true
3 > 2 > 1 // -> falseОтличный язык, да.
> Отличный язык, даИногда лучше жевать, чем говорить.
$ cat ./fgh.c
#include <stdio.h>
void main () {
printf("1 < 2 < 3: %d\n", 1 < 2 < 3);
printf("3 > 2 > 1: %d\n", 3 > 2 > 1);
}
$ gcc ./fgh.c && ./a.out
1 < 2 < 3: 1
3 > 2 > 1: 0
> $ gcc ./fgh.c && ./a.out
> 1 < 2 < 3: 1
> 3 > 2 > 1: 0Как будто кто-то утверждал, что сишка в этом плане лучше (один только препроцессор чего стоит)
Хотя там грабли все таки больше исторические, обратно-совместимые, сразу со встроенным грабле-детектором:
% gcc -Wall fgh.c
fgh.c:2:6: warning: return type of 'main' is not 'int' [-Wmain]
void main () {
^~~~
fgh.c: In function 'main':
fgh.c:3:35: warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning [-Wparentheses]
printf("1 < 2 < 3: %d\n", 1 < 2 < 3);
^
fgh.c:4:35: warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning [-Wparentheses]
printf("3 > 2 > 1: %d\n", 3 > 2 > 1);
Грабледетектор - это конечно хорошо, но если разработчик берет свои ожидания не из спецификации языка, а откуда-то из воздуха ("ну вроде очевидно же"), то он ошибся профессией. Какого результата он ожидал от [1,2,3] + [4,5,6]? Ожидал ли он результат в виде [1,2,3,4,5,6]? Или там должно было быть [5,7,9]? Или [1,2,3,[4,5,6]]? Или вовсе 21? А если бы операндами были массивы массивов, ожидал ли он сложение матриц?Толковый разработчик, не знающий языка, сразу должен заподозрить, что конструкция "массив + массив" может означать всё, что угодно, и поэтому он тут же пойдет прояснять поведение в спецификации языка. А бестолковый примет за ожидаемое поведение единственный вариант, до которого сумел додуматься.
Вы путаете разработчика и кодера, сиречь обезьяну, переводящую готовый алгоритм на одном языке на другой.Толковый разработчик не должен держать в голове пятьсот взаимоисключающих параграфов (таких как true + true дает 2, или "+" - это конкатенация, а "-" - это математическая операция) нужного говноязыка, он должен легко и просто записать на выбранном языке разрабатываемый алгоритм; при этом быть защищенным от большинства интуитивных ошибок.
В любом языке эти грабли, конечно, есть (например, "=" как присвоение а не сравнение в С), но это именно что "грабли есть". В то время как JS - это одна сплошная грабля, куда не сунься. И не надо мне вешать лапшу про "динамический язык", динамических языков много, а говно - только один.
И это не только мое мнение. Это подтверждается постоянно изобретаемыми языками, фреймворками и тулзами поверх JS. Такого зоопарка языков "ну хоть как-то превратить программирование на js из изврата в программирование" больше нигде нету.
46 языков (https://www.slant.co/topics/101/~best-languages-that-compile... главная цель которых "мы не хотим писать на говне, мы хотим писать для веба комфортно"!!!/Щас мне скажут: все эти люди - не программисты, они не могут зазубрить весь противоречивый экмаскрипт, поэтому пусть идут вязать лапти. Три раза хаха - когда одни зубрят почему нельзя добавить true и true, другие успешно реализуют алгоритмы и продают свою работу/.
--
Но больше всего, конечно, удручает воспитанное этими граблями всеобщее отсутствие культуры программирования. Если уж инструмент всегда норовит вывернуться и вместо забитого в стену гвоздя сыграть лезгинку, то сам бог велел при программировании плевать на результат - какая разница, ведь все равно вокгур грабли и говно.
Посему и странички, которые на 5 гигагерцовой машине рендерятся по 5 секунд и жрут по гигу оперативы.
> Толковый разработчик не должен держать в голове пятьсот взаимоисключающих параграфов (таких как true + true дает 2, или "+" - это конкатенация, а "-" - это математическая операция)Начнем (и закончим) с того, что толковый разработчик не допустит ситуации, что складываются булево с булевом. Если у тебя такие ситуации возникают постоянно, вследствие чего ты пишешь объемные наполненные болью комменты, то это красноречиво характеризует в первую очередь именно тебя.
У меня например таких ситуаций попросту не возникает. Если я положил в переменную число, то у меня там и будет число: туда я больше не положу ни массив, ни булево, ни что-то еще. Возможно у тебя в в for'e в while в switch'e одна и та же переменная хранит все, что бог на душу положит. Тут уж проблема в генах, а не в языке.
Ну вот видишь - все именно так, как я и говорил: "программист" джаваскрипт ходит строго по указанной дорожке между граблями, боясь сделать шаг влево или вправо. При этом еще и обвиняя тех, кто хотя бы указывает на присутствие оных грабель в невежестве и вообще глупости.А программист НЕ джаваскрипт решает поставленную задачу всеми доступными ему средствами языка. За сим, думаю, тему пока что можно закрывать.
Прекрасное подтверждение тезиса "говноязык воспитывает говнопрограммеров".Вы, я так понимаю, уже давно перестали понимать разницу между булевыми и числовыми значениями?
JavaScript содержит булевые значения, это true и false. True, это true. False, это false (если не верите мне, сами нажмите Ctrl+Shift+I и введите в консоли. 1 - это 1, а 0 - это 0. Тоже можете проверить. И true === 1 дает в результате false (а не, кстати, 0).В С булевых значений нету в принципе, там есть только числа. Это низкоуровневой язык. JavaScript же содержит, это высокоуровневой язык. И typeof(false) дает "boolean", а не "number".
И если программист высокоуровневого языка считает, что разные(!) типы могут беспрепятственно неявно конвертироваться друг в друга, при этом не имея логически непротиворечивых правил, но зато имея набор исключений - то он не программист, а обезьяна, которую научили кодить, а не логически мыслить. У таких программистов, небось, блок анализа логики в мозгу уже сломан из-за постоянных сбоев на противоречиях.
p.s. Да, иногда действительно лучше жевать, чем говорить. Ибо часто лучше просто слыть дураком, чем разом развеять все сомнения.
> Вы, я так понимаю, уже давно перестали понимать разницу между булевыми и числовыми значениями?Погоди-ка. Почему это Я не понимаю разницы, если это ТЫ раз за разом пишешь код, когда вместо строк и чисел складывается все, что угодно? Это же __твой__ код производит всякие трюкачества, поэтому у __тебя__ и проблемы. У меня таких проблем нет, в кодовой базе моих работодателей таких проблем нет, на гитхабе таких проблем тоже нет. Ты же не привел ссылки, верно? Пока ссылок нет, ты не сумел показать, что "проблема" носит какой-то массовый характер.
> разные(!) типы могут беспрепятственно неявно конвертироваться друг в друга
Как это неявно, если именно __ты__ своим оператором "+" запросил у языка привести булева и массивы в соответствующие типы? Если не хочешь приведений, клади в переменные строго один тип данных.
Дорогой аноним. Почему бы вам не попытаться прочитать то, что написано выше? Или программирование на джаваскрипте заодно и отучает понимать то, что пишут другие? Впрочем, не удивлюсь - ведь то, что написано на джаваскрипте, чаще всего делает совсем не то, что подразумевается. Например, арифметическая сумма является конкатенацией строк, в то время как разница - действительно арифметическая разница.Но короче - я выше писал про разницу между булевыми и числовыми значениями, а так же о том, что ваш пример с С откровенно глуп (в контексте разговора), так как в С все является числом. В то время как в вашем любимом джаваскрипте это совершенно разные вещи.
Без минимум двух десятков ссылок на гитхаб твои примеры исключительно сферическо-теоретические
в чем проблема запомнить несложные преобразования сложных типов к примитивам и условия в котором они неявно производятся?
Да и достаточно использовать любой статический анализатор чтобы недопускать такие дурацкие вещи.
Зато у js так же много плюсов.
Тонюсенько набросил про "плюсы". Молодец. А не взлетело потому что слишком уж тонко, эксперты опеннетика такую тоньшину не могут замечать
В том, что это совершенно излишне.Ну вот представьте себе, что ваш язык не состоит не из "for", "repeat", "while", а из "+", "++" и "+++" соответственно.
В чем, скажет очередной недопрограммер, проблема? Неужели нельзя запомнить один простой сивмол? Зато сколько плюсов...
Это хорошо известное документированное поведение. Если оно для тебя в новинку - катись улицы мести!
Что ж такое было в голове, у созавщего(их) _это_.
Такой инструёмент не нужен.
> Что ж такое было в голове, у созавщего(их) _это_.
> Такой инструёмент не нужен.Для метения улиц -- безусловно. И для писания "ннужно"-камментариев.
То есть Вас лично никто не заставляет. "Можете не приходить."
И Ваше мнение важно, не останавливайтесь, спасибо!
Прекрасный язык:var arr = [1, 2, 3, 4, 5, 6, 7, 8];
arr[-1] = "yo wazzzup";
console.log(arr.length); // > 8
console.log(arr[arr.indexOf(99)]); // log's > "yo wazzzup"
кто тебя заставляет такой код писать? JS никого не заставляет. Если хочешь такое писать изволь разобраться с приведением типов..
Когда мне надо - я пишу на тайпскрипте. Но, к сожалению, нормальных средств дебага (как уже 1000 лет есть в С) для него пока не создали.
Ну что я вижу по комментаторам - все пишут "тебя никто не заставляет по этим граблям прыгать" и "есть специально определенное практикой подмножество языка JS, на котором и надо писать, чтобы не проваливаться в ловушки и не получать граблями в лоб".Так вот я и написал - почему бы автору не выкинуть эти все грабли и выделить язык, на котором можно легко и приятно писать, не опасаясь, что из-за близости ящика ананасов и яблок весь склад не взорвется.
Не выделишь - язык с динамической типизацией и без приведения типов неудобен
lua. Все красиво, удобно и интуитивно понятно.
И индексы начинаются с 1. Спасибо, ешьте сами.
Индексация и должна быть с 1. Вся мировая математика считает с 1 - почему программисты должны каждый раз переделывать математику под себя, не забывая отнимать 1 от каждого индекса?
Более того - нулевой индекс лишен математического и семантического смысла.То, что "так сложилось исторически" в самом распространенном до некоторого времени языке, который из-за лени (ничего не мешает хранить указатель на массив как "массив-1" элемент и использовать ту же самую математику для вычисления N-го элемента, что и всегда - это не повод считать, что "так правильно".
Кстати, в лиспе (одном из древнейших языков) элементы считались с 1. И математики с удовольствием этим пользовались.
p.s. Я когда-то писал для МС математическую библиотеку, она вроде до сих пор где-то в недрах даже десяточки валяется. В ТЗ было написано: индексация векторов и матриц - с единицы. Совершенно никакой деградации скорости.
> lua. Все красиво, удобно и интуитивно понятно.и begin end, ага. убивать
Безотносительно недостатков языка - если автор выделит язык "на котором можно легко и приятно писать, не опасаясь, что из-за близости ящика ананасов и яблок весь склад не взорвется", то это, наверное, уже будет не JavaScript. А новый язык, уже не особо сильно и нужен - их и так уже придумано достаточно много, а автор, к сожалению, не Google, у него нет таких ресурсов, чтобы популяризировать новый язык и создать большое сообщество под своей эгидой.
Ну давайте ещё вспомним операции с плавающей точкой. Всё-таки это применяемый на практике, живой язык. Не нравится пользуйте webassembly как прослойку, для "идеального языка" или обмазывайтесь TS с кофе.
С вебассембли есть большая проблема - он еще не устаканился, поэтому эмскриптен, например, каждый месяц ломают обратную совместимость и каждый месяц приходится по новой вчитывать "что же они там в этот раз поломали".Впрочем, я забил - я просто тащу с собой их старый фреймворк и работаю только через него.
Для идеального языка по работе с числами есть фортран и лисп.(* 12345678987654321 78912345654321987)
; ==> 974226487611077725558868785855827
Обратная запись. Ты наркомэн штолле?
Вот и выросло поколение...Во-первых, не обратная, а прямая. Префиксная.
Во-вторых, в лиспе средствами языка (метапрограммирование) элементарно реализуется и обратная, и префиксная, и постфиксная, и даже просто математическая запись. Недоступная современной необразованной молодежи гибкость.
А еще большие числа, рациональные дроби и комплексные числа из коробки.> (/ 12345 555)
823/37
> Для идеального языка по работе с числами есть фортран и лисп.
> (* 12345678987654321 78912345654321987)
> ; ==> 974226487611077725558868785855827Вы решаете не ту проблемму том же C++ для такой проблеммы можно просто класс написать, чтобы это решить.
А вы попробуйте вот такой пример скажем в scheme48:
> (+ 0.2 .1)0.30000000000000004
Ну или
> (+ (/ 2 10) (/ (/ (log 10) (log 10)) 10))0.30000000000000004
> (log (exp (/ 1 10)))
0.10000000000000007
> [,,,].length // 3А что тут не так? Лист не пустой, конечно длинна будет 3. Вот размер будет нулевой, или в жабе нету подчёта размера?
Четыре. Три запятые, четыре элемента.О чем и речь.
не будет он нулевой.
Это будет массив из 3х пустых элементов.
такие грабли есть у всех языков. Не используй автоматическое преобразование типов если не понимаешь как оно работает.
!![] == ![]
[1,2,3].concat([4,5,6])
new Array(4)
> такие грабли есть у всех языков.Правда? В Haskell, Clean, Miranda, МL, Mercury? Или может в семействе паскалевых, в Ada?
> такие грабли есть у всех языков.Это в первую очередь грабли динамичных ЯП и ЯП со слабой типизацией, особенно с неявными преобразованиями.
isNaN(null) === false
и тут он узнал что null и NaN это разные значения (и типы)
Не в этом дело. По стандарту isNaN() всё, что не Number и не NaN, приводит к Number; и по стандарту же null приводится к +0, хотя, как ниже заметили, typeof null === "object", а object при приведении к Number по стандарту должен давать как раз NaN. Поведение документировано.
typeof null === "object"
Толковый мужик. Я из математики помню только таблицу умножения.
Про скорость верится с трудом. Скорее всего встроенные как интерпретаторы соревнуют. Это как если в современном браузерном движке просадить инлайновые кеши деоптимизациями. Скорость упадет в 4-10 раз.Яваскрипт для оптимизаций вообще не очень. Просто в него уже столько бабла ввалили, что все что угодно конфетами запахнет.
Для встраиваемых систем сейчас позарез нужен компактный Javascript, причём, вменяемость важнее скорости. Буду тестировать.
Движок js, выполняемый в браузере это сильно конечно, но зачем???
А так самое интересное тут это компилятор. Можно ли будет, скажем, сервер под ноду скомпилировать, т.е. скомпилированный js + libuv
> Движок js, выполняемый в браузере это сильно конечно, но зачем???Мозила наконец-то выкиет неполиткорректный эйковский LISP ^W
js из бровзера же!</Заживём>.
> Можно ли будет, скажем, сервер под ноду скомпилировать, т.е. скомпилированный js + libuvВозникает вопрос: а зачем вам тогда js сдался? Может писать на компилируемом языке сервер сразу и не заниматься ерундной?
JS иногда позволяет починить такие косяки дизайна программ, которые в компилируемых языках починить просто невозможно, в нём отлично реализованы вские замыкания и прочие плюхи, которые весьма облегчают программирование (но не саппорт) и делают код более компактным и простым (ровно до момента пока автор этот код помнит)
> Компактность и простота встраивания в другие проекты. Код включает лишь несколько файлов на языке Си, не требующих для сборки внешних зависимостей. Скомпилированное простейшее приложение занимает около 190 Кб;Не обязательно в браузере запускать интерпритатор. Достаточно говнореализациию от всяких мозилл и гуглов заменить.
>javascript
>компактностьзвучит как оксюморон
Наконец-то, адекватная реализация.
А это можно вместо lua в качестве встраиваемого языка применять?
Как официальный Аноним оппенета официально запрещаю тебе использовать вместо lua данную js поделку. Во имя Линуса, Ядра и святого опесорсного духа.
> Во имя Линуса, Ядра и святого опесорсного духа.Тебе имя автора ни о чем не говорит?
Lua - MIT
И что? "Лицензия MIT (англ. MIT License) - лицензия открытого программного обеспечения (...)". Т.е. - open-source license.
> Т.е. - open-source license.Господи, да сколько вам объяснять что опенсорс != свободный софт,
MIT и BSD != GNU и GPL, которые можно юзать везде
Все можно использовать. Вопрос в том, что именно ты пишешь. Исповедования Столлмана (равно как и христианства, мусульманства, буддизма) пожалуйста оставляйте при себе и больше не позорьтесь.Вот именно сейчас ты опозорил Столлмана, который тебе мильон раз объяснил, что GNU это философия (и акроним), а GPL это лицензия.
> Все можно использовать. Вопрос в том, что именно ты пишешь.Малыши http://www.opennet.me/openforum/vsluhforumID3/112997.html#153
обижены http://www.opennet.me/openforum/vsluhforumID3/116924.html#15
на GPL, FSF и лично деда Ричарда:"" Да, для _проприертарщиков_ GPL-и более несвободны, чем пермиссивы. Это и я говорил неоднократно.
И да, так и задумано, так и надо. ""
-- http://www.opennet.me/openforum/vsluhforumID3/109155.html#41
>Исповедования СтоллманаДа, он вообще не понятно, чего там "на[би-бииип]кодил". (про '!= GPL , ещё что-то")
То есть по впечатлению -- +<|-) пермиссивщик же.
>пожалуйста оставляйте при себе и больше не позорьтесь.
Сразу, как толь ко Вы -- оставите при себе свои. Обязательно.
> Вот именно сейчас ты опозорил Столлмана, который тебе мильон раз объяснил, что
> GNU это философия (и акроним), а GPL это лицензия.У вас парное выступление? Один наблосил, другой провентилировал-разбросал?? Ай, "зрада".
> Господи, да сколько вам объяснять что опенсорс != свободный софт,
> MIT и BSD != GNU и GPL, которые можно юзать вездеNIT и BSD также являются свободными. Они, кроме того, не являются копилефт-лицензиями, поэтому, в отличие от кода под GNU GPL, код под MIT или BSD действительно можно юзать везде. Учитывая, что это встраиваемая реализация, использование GPL или даже LGPL сильно ограничило бы область применения.
>> Господи, да сколько вам объяснять что опенсорс != свободный софт,
>> MIT и BSD != GNU и GPL, которые можно юзать везде
> NIT и BSD также являются свободными. Они, кроме того, не являются копилефт-лицензиями,
> поэтому, в отличие от кода под GNU GPL, код под MIT
> или BSD действительно можно юзать везде. Учитывая, что это встраиваемая реализация,
> использование GPL или даже LGPL сильно ограничило бы область применения.Ну, давай, давай про "ограничения"....
1) Нельзя в гугле. Там только ASL, лояры не разрешают.
http://www.opennet.me/openforum/vsluhforumID3/116924.html#20
1.1) в сони, в микрософтк (GPLv2==-им-гр-Торвальдса уже почти можно, но сейчас не об этом), в ... не суть!
http://www.opennet.me/openforum/vsluhforumID3/82687.html#172
http://www.opennet.me/openforum/vsluhforumID3/82687.html#1322) В твоём проекте, где ты мечтаешь (мечтатель!) жо..ть ^W невозбранно закрывать код и продавать, продавать.... продавать!!!
http://www.opennet.me/openforum/vsluhforumID3/82687.html#171
http://www.opennet.me/openforum/vsluhforumID3/116924.html#23
& http://www.opennet.me/openforum/vsluhforumID3/116924.html#20
http://www.opennet.me/openforum/vsluhforumID3/105044.html#453) Во FreeBSD. Они идейные сторонноки первых двух пунктов: "невдобнож аплаянс вендорам" страшый харам.
http://www.opennet.me/openforum/vsluhforumID3/82687.html#300
http://www.opennet.me/openforum/vsluhforumID3/82687.html#176
http://www.opennet.me/openforum/vsluhforumID3/82687.html#270
http://www.opennet.me/openforum/vsluhforumID3/114680.html#73
& http://www.opennet.me/openforum/vsluhforumID3/114680.html#25
&&& http://www.opennet.me/openforum/vsluhforumID3/114680.html#44
http://www.opennet.me/openforum/vsluhforumID3/114919.html#39Более другие ограничения?
http://www.opennet.me/openforum/vsluhforumID3/82687.html#115С этими -- вполне можно жить.
http://www.opennet.me/openforum/vsluhforumID3/82687.html#80
http://www.opennet.me/openforum/vsluhforumID3/116924.html#24И, кстати! Свобода(!!)
http://www.opennet.me/openforum/vsluhforumID3/116924.html#43
http://www.opennet.me/openforum/vsluhforumID3/114680.html#77
использования -- совсем не страдает.Да, "использование" -- в изначальном смысле,
[[ссылка на словарь потеряна в аналах]]
не проприертарщическо-сексуально-мазохистском искажении.
Ты очень много ссылаешся на других, а толком выразить свою мысль не можешь. Поясню для тебя на пальцах.BSD/MIT просят сохранить копирайт, но с кодом велен делать, что хочешь. Эта просьба основа на законе об авторском праве (венская конвенция) и общечеловеческом отношении: все что не мой код, я обязан другим людям.
GPL требует открывать код при любом использовании кода под GPL. Это вирусная лицензия, смысл которой всегда создавать производный код под открытой лицензией.
Рассмотрим на примере. Есть два проекта, скажем библиотека для создания http сервера. Один проект под BSD, другой под GPL.
Ты решил написать веб-приложение на основе одной из этих библиотек, например, whois. Твой код это создание (инициализация) веб-сервера, клиент whois, html/js код.
В случае BSD твой код может быть под любой лицензией, в частности GPL.
В случае GPL - только GPL.
Теперь предположим, что я решил развить твое веб-приложение, добавив проверку в спам листах.
И снова, если ты выбрал GPL, то я обязан буду выпустить свой код под GPL. Если ты выбрал MIT или BSD, то я буду обязан лишь указать твой копирайт. В последнем случае ты будешь уверен, что я не присвоил себе твой код и точка.
Вывод. Чем лучше GPL или BSD определяет автор своего кода. А свой код ты можешь писать из-за разных внешних факторов.
Например, если ты сотрудник компании, которая решит потом продавать твой код, выгоды в GPL нуль. С GPL можно продавать только поддержку. Если решишь продавать бинарные патчи и плагины, то тебя самого можно по GPL засудить. Даже не смотря на то, что ты автор всего кода. Я не знаю таких прецедентов, но GPL это не разрешает. Именно в этом ее вирусная сущность.
Кстати, именно по причине выше некоторые выпускают код под двойной лицензией.
И в чем свободность GPL? Даю ответ. BSD/MIT это свобода выбора автора [что делать с твоим кодом]. GPL - свободный код, везде и всегда, хочет автор этого или нет.
> Ты очень много ссылаешся на других, а толком выразить свою мысль не???! Там почти все ссылки на меня-любимого. Ты толком читать не научился?
> можешь. Поясню для тебя на пальцах.
Купи себе циркулярку, распальцовщик...
Всё это жовано-переобсосано тыщу раз. Поэтому тыща ссылок.
Нет, твою простыню я читать не буду. Как и ты мою.
Разговор не задался.Да?
GPL можно использовать не везде. В проприетарные компоненты встраивать нельзя.
Проблема не только и не столько в проприетарщине. GPL-код нельзя линковать с кодом под кучей других свободных лицензий: https://www.gnu.org/licenses/license-list.html#GPLIncompatib...
В GPL обязательно открытие исходников (только в 3.0, в 2.0 есть лазейки). В остальном MIT ничем не отличается. Ну да, MIT можно в проприетарщине юзать и не давать никому исходники, это минус.
> В GPL обязательно открытие исходников (только в 3.0,Нет. Не "открытие исходнков", а "предоставление прав".
И не "откытие" вааще, а предоставление [тех же] прав получателям кода.Нет. Выкладывать винтеренет _не_обязательно_. Но можно, да.
Вас покусали! Срочно сделайте прививку от гпл-опенсорсия. А то так и до гидхаб-пермиссивия не далеко.
"" --Резать! Резать к ч.м., не дожидаясь перитонита. ""
>в 2.0 есть лазейки).
> Господи, да сколько вам объяснять что опенсорс != свободный софт,Не надо никому ничего объяснять - то, что ты пытаешься объяснить не имеет отношения к СУТИ вопроса.
> MIT и BSD != GNU и GPL, которые можно юзать везде
Вот ещё один GPL-зацикленный... Кто-то запрещает использовать везде выложенное под MIT? Вот как НАДО формулировать вопрос. Не "но это же не GPL?" (и не "а что по этому поводу говорит Столлман?", бгг), а "что мне позволяет MIT?".
> И что? "Лицензия MIT (англ. MIT License) - лицензия открытого программного обеспечения
> (...)". Т.е. - open-source license.Как что?!1 Она же напрочь отбивает у анОнимов чувство прекрасного, глымления и сарказЬму. Бида с ней.
Тот же ducktape сто лет как можно
Я тебе по секрету скажу: вон те аналоги, которые в новости перечислены, уже давно именно так и применяют. Правда не знаю, зачем, если есть lua.
Для встраивания всё есть. Так что можно, разрешаю
А мужики то и не знают что встраиваемые системы надо на джава скрипте писать а не на С. Завтра им обязательно сообщу что они ерундой занимаются.
C заменять не надо. А вот вместо питона было бы отлично.
Если Беллар не мужик, то я не знаю кого ты зовешь мужиками.
Не путай с "мужчиной". Исторически "мужик" - это крестьянин, почти раб "дворянина".
1) "Встраивание в другие системы" и "встраиваемые системы" - разные вещи.
2) Удивись - питон тот же ещё в avr и PIC упихивали. О бейсике и том, на чём в своё время крутился, и не говорю - тогдашние компы мощи нынешней встройки могут только позавидовать.
> А мужики то и не знают что встраиваемые системы надо на джава
> скрипте писать а не на С.Конечно, основной функционал пишется на си.
А если устройство мало мальски интелектуальное, то поддержка стандартных скриптов, для большей гибкости, то это совсем другой уровень.Помимо всяких контоллеров, Javascript/Lua есть в фотоаппаратах, контроллерах телескопов...
Быстродействие скриптов в таких применениях некритично, достаточно что бы они не создавали проблем из за частичного соответствия стандартам.
нужно сравнение по производительности с v8
Какой смысл сравнивать слона с таксой? Лучше сравнить с той же lua
V8 тоже встраиваемый js-движок (про node.js не слышали?). В чём проблема сравнить?
V8 такой же встраиваемый, как cpython. Тут же речь про компактность. Ну обгонит V8 раз в 10 и дальше что? Какой вывод из этого можно сделать? То что жирный монстр с jit и морем оптимизаций уделал компактный двиг? Вот это неожиданность.
О, у нас снова User294 :)
Привет!
> Какой смысл сравнивать слона с таксой?Нода-и хрома- фаги увидели Возможность! В новости написано ж "быстрее!"
Поэтому, быстрее - пока не началось!(ц) анекдот, нужно втащить бузинессь-преимущества в проакшен, повысить эффективность же.
Эффективные оптимизируют.
>Лучше сравнить с той же lua
Вот и Вы тоже -- участвуете, ищете микрооптимизаций и бузинес проффитов, задаёте "интересные вопросы", да?
Поеннет, пятниця -- жизнь бурлит.... //И да, Беллард - титан.
Взял из их архива bench-v8, сбилдил QuickJS и сравнил с нодой: https://pastebin.com/rfb7k13m
> Взял из их архива bench-v8, сбилдил QuickJS и сравнил с нодой: https://pastebin.com/rfb7k13mГде в этом наборе букафф -- сравнение-то?? Не позорился б, подождал час-другой, пока Ларабель сделает настоящее сравнение с грахвиками, прОцентами и целеуказующими стрелочками на оных "<-<< less is butter". /</>/
Чё ноешь? Циферки не умеешь читать, графики подавай?
Чел взял и сравнил. Хочешь лучше - сделай сам! Или жди фороникс, а не ной.
Чёрт, вот хотел же сделать по модно-хипстерски, а сделал на отвянь, за что и поплатился )А если серьёзно - ещё попробовал запустить их microbench.js, но там как-то жутко прибито к апишкам QuickJS и я пока не прошарил как это запустить на ноде. Там тестов намного больше и они нагляднее.
Что показывают эти числа? Число выполненных циклов за фиксированное время (т.е. скорость)? Или время выполнения теста? Вижу, что один в 20 раз лучше другого, но который?
Выдержка из комментария к бенчмарку:Suites of benchmarks consist of a name and the set of benchmarks in addition to the reference timing that the final score will be based on. This way, all scores are relative to a reference run and higher scores implies better performance.
Выходит, что эти числа - среднее геометрическое значение прогонов каждого теста и чем выше балл - тем лучше производительность.
> основавший в свое время FFmpeg
> разработавший формат изображений BPG
» ffmpeg -formats|grep -i bpg
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
…
[exit code: 1]
Как так?
В следующий раз проверь поддержку FFmpeg'ом JavaScript'а
И QEMU ещё.
> И QEMU ещё.https://duckduckgo.com/?q=%D0%B8+%D0%B6&... //и картинка тоже+
Ну вот так, в туду пока что, не впилили еще)
https://trac.ffmpeg.org/ticket/4169
Не стандарт же. Широкой поддержки не получил.
Это же по сути HEVC, а для него для изображений есть куда более официальный HEIF.
Вот это, реально, крутой чувак.
так так так... теперь в реализацию webasm на js засунем QuickJS внутри браузера а то 16Гб на вкладку уже не комильфо
хоть более нормальных свободных альтернатив qemu нет, qemu еще то гвн0. Берем учебник английского языка и гаглим "google cloud && qemu"
> хоть более нормальных свободных альтернатив qemu нет, qemu еще то гвн0. Берем
> учебник английского языка и гаглим "google cloud && qemu"Смотрите, дети, на этого анОнима...
...г"А"глит он клауд, а г--но == qemu.
...и никода так не делайте ~
Вам бы учебник русского языка взять... ну, погаглить предварительно...
Вот этого (js) - не надо! Вроде и математик, а такую фигню.. ааа, точно! Математик жи ;)> Проще говоря WebAssembly представляет технологию, которая позволяет
> запускать в браузере низкоуровневый скомпилированный код.Ну, такое.. ведь никто не добавляет "из доверенных источников", ХОМЯКИ!))
> Реализация JavaScript поддерживает спецификацию ES2019Т.е. Babel больше не нужен?
А как запускать es2019 в старом ie?
> Поддержка компиляции кода на языке Javascript в исполняемые файлы без внешних зависимостей;Зависимости будут в рантайме из интернета подтягиваться.
>> Поддержка компиляции кода на языке Javascript в исполняемые файлы без внешних зависимостей;
> Зависимости будут в рантайме из интернета подтягиваться.Тебе ж русским языком по белому написали: без glibc-а .
Всё. Остальное не важно.
Интересно сможет ли он заменить PhantomJS? Было бы круто использовать его в CI/CD системах для тестирования фронтенда.
phantomjs давно помер и не нужен, chrome и firefox поддерживают headless режимы.
насколько помню, PhantomJS был браузером без GUI, а не просто js-движком. И его уже заменяет современный хром в режиме headless, драйверы к нему уже прикрутили, вроде
# du -h quickjs.c
1.5M quickjs.c# wc -l quickjs.c
47841 quickjs.cвот так, сразу, внезапно, кода на 1000 страниц.
в одном файле.взял чувак ганджубас, хорошо так затянулся, и фигак с клавиатуры кода полтора магабайта в одну портянку.
выдохнул, и сказал - хорошо это.
разница между вами в том, что у него этот код - работающий, и, в общем-то, даже и понимаемый.А тебе сколько ни кури - ничего кроме хихиканья не произведешь.
>А тебе сколько ни кури - ничего кроме хихиканья не произведешь.чувак, не поверишь, несмотря на всякое, я таки пишу разные программы.
и они таки работают.писать и потом публиковать моно-модуль на полтора мегабайта, в тысячу страниц - это надо быть сильно атипичным.
тут пипл структурирует что аж все вилизано, в текстах доксигеном все расписано, и все равно надо много дней что бы понять хоть бы основное.
ты думаешь, кроме него в структуру кто-то может еще вотнуться и дописать?
> взял чувак ганджубас, хорошо так затянулся, и фигак с клавиатуры кода полтора
> магабайта в одну портянку.Звучит так, будто он за день в одно рыло нагенерировал, но нет:
> * Copyright (c) 2017-2019 Fabrice Bellard
> * Copyright (c) 2017-2019 Charlie Gordon
>Звучит так, будто он за день в одно рыло нагенерировал, но нет:
>2017-2019А это как затянуться.
Он математик, а не программист. Не злись, придут люди и расфасуют код по файликам как надо. Ты сам можешь начать это делать.
> Опционально поддерживаются нестандартные математические расширения для JavaScript, такие как типы BigInt и BigFloatBigInt только только в Firefox 68 официально появился. А тут один Человек успел. Да ещё и не кое-как лишь бы работало.
Вроде бы и математик - умный человек. А приток смузи победил. Модно-молодёжно... а шутки про тостер с дырявым JS скоро станут кошмарной реальностью
Альтернативная реальность, где ранее разумные люди делают что-то полезное тебе не доступна?
Приложение под видом документа - это троян.
Где ты был последние 20 лет? Тебя всё устраивало?
Вместо того, что бы похоронить этот недоязык, они его развивают. Whyyyy.
Научите Белларда в git уже! Ну что за архивы в tar.gz на его странице?
Если кого возмутила встройка -- ну посмотрите, с чем нынче линкуется polkit. Да, меня там и libxml2 смущала, но и это познаётся в сравнении, как оказалось.PS: надо добыть себе немного стадотомиков:
lcc: "quickjs.c", строка 107: фатальная ошибка: не
могу открыть исходник файл "stdatomic.h"
> lccИ в значительно более активно развивающемся tcc нет. Вот это точно досадно.
Фабрис опять жжет. То виртуалку на джеэс напишет, то компилятор, а ведь уже 47 лет мужику.
И, с твоей точки зрения он должен перестать делать то, что он делает? Или как?
Компиляция js в исполняемый файл это очень интересно.
Чем это ново и почему это интересно тебе?
Вот за libregexp Фабрису спасибо!"Backtracking with an explicit stack is used so that there is no recursion on the system stack. Simple quantizers are specifically optimized to avoid recursions."
Прямо то, что мне надо, чтобы заменить PCRE с его комбинаторными взрывами, но иметь возможность backtracking-а.
Крутой чувак надо ему памятник поставить...