URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 100535
[ Назад ]

Исходное сообщение
"Duktape - компактный встраиваемый JavaScript-движок"

Отправлено opennews , 05-Дек-14 16:43 
В рамках проекта Duktape (http://duktape.org/) развивается JavaScript-движок, ориентированный на встраивание в кодовую базу проектов на языке C/C++  и отличающийся компактным размером, высокой переносимостью и низким потреблением ресурсов. Исходные тексты движка написаны на языке Си и распространяются (https://github.com/svaarala/duktape) под лицензией MIT. Состояние проекты отмечено как стабильное и пригодное для промышленного применения.


Для интеграции Duktape в код на C/C++ достаточно (http://duktape.org/guide.html#gettingstarted) добавить в проект файлы duktape.c и duktape.h, и использовать Duktape API (http://duktape.org/api.html) для вызова функций на JavaScript  из кода  на C/C++ или наоборот. Код Duktape занимает около 200 Кб  и потребляет всего 46kB ОЗУ, а в режиме низкого потребления памяти  22kB ОЗУ. Подобная особенность позволяет использовать Duktape на встраиваемых системах, укомплектованных 256kB Flash и 96kB ОЗУ.


Движок является полностью совместимым со спецификациями Ecmascript E5/E5.1, а также поддерживает часть возможностей из находящегося в разработке стандарта  Ecmascript E6, в том числе поддерживается объект Proxy, который можно использовать для виртуализации свойств. Предоставляется также набор собственных расширений, таких как сопрограммы, встроенный фреймворк для журналирования, механизм загрузки модулей на основе CommonJS.


В состав входит встроенный движок для выполнения регулярных выражений и подсистема для поддержки Unicode. Для освобождения неиспользуемых объектов из памяти применяется сборщик мусора с финализатором, построенный на основе комбинации алгоритма (https://ru.wikipedia.org/wiki/%D0%A1%D0%... подсчёта ссылок с алгоритмом пометок (Mark and Sweep).
  


URL: https://news.ycombinator.com/item?id=8701228
Новость: http://www.opennet.me/opennews/art.shtml?num=41194


Содержание

Сообщения в этом обсуждении
"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено MPEG LA , 05-Дек-14 16:43 
JIT?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено анонимус , 05-Дек-14 21:15 
Как Вы предполагаете совместить JIT и низкое потребление ресурсов?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 13:19 
Ну LuaJIT же как-то совместил

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено cmp , 07-Дек-14 18:32 
Все переменные глобальны,весь функционал в динамически линкуемых либах, действительно, как им удалось сделать его быстрым и легковесным?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 08-Дек-14 03:40 
> Все переменные глобальны

это ж надо. а создание совершенно независимых контекстов исполнения, со своими наборами переменных, поддерживается.

> весь функционал в динамически линкуемых либах

только что попробовал: у тебя враньё какое-то.

if true then print("hello"); endif

работает. никаких «внешних либ» для if и print не надо. и строки работают. и массивы. и словари. и математика. и луа-регулярки. а-я-яй, как нехорошо врать-то.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено cmp , 08-Дек-14 06:26 
> if true then print("hello"); endif

И в чем бы был смысл если бы и это не работало?

А вот реальная задача, забрать по SNMP и положить в БД, требует портянки предварительной подготовки контекста в котором будет реализована требуемая логика, и в догонку установка дополнений кой нужно еще найти, по итогу написание простого скрипта занимает примерно столько же сколько реализация на с.

> совершенно независимых контекстов исполнения

В большенстве случаев совершенно независимые контексты нафиг не нужны, нужно адекватное наследование, и адекватная работа с индексами в выражениях for(i=0;i<x;i++), а не for(loop_15_i=0;loop_15_i<x;loop_15_i++);

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


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 08-Дек-14 06:32 
>> if true then print("hello"); endif
> И в чем бы был смысл если бы и это не работало?

не знаю, это же не я утверждал, что *всё* во внешних библиотеках.

> А вот реальная задача, забрать по SNMP и положить в БД, требует
> портянки предварительной подготовки контекста в котором будет реализована требуемая логика,
> и в догонку установка дополнений кой нужно еще найти, по итогу
> написание простого скрипта занимает примерно столько же сколько реализация на с.

гениальный пример. мне даже и сказать-то нечего.

>> совершенно независимых контекстов исполнения
> В большенстве случаев совершенно независимые контексты нафиг не нужны, нужно адекватное
> наследование, и адекватная работа с индексами в выражениях for(i=0;i<x;i++), а не
> for(loop_15_i=0;loop_15_i<x;loop_15_i++);

ты дурак, да? вопрос риторический.

> На полноту знаний в данном вопросе я не претендую, у меня нет
> задачи решить задачу на lua, у меня есть просто задача, и
> множество раз возникала необходимость в программируемой прослойке между чем-то и чем-то,
> и js для этого подошел бы просто идеально, но нету нормальной
> реализации : либо монстр, либо вендор лок, либо лицензия продай душу,
> либо мертвое поделие. Поэтому попробовал lua, не понравилось, потому что интеграция
> равнялась бы прибиванию гвоздями.

вопрос действительно риторический…


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено cmp , 08-Дек-14 14:07 
> ты дурак, да?

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

> мне даже и сказать-то нечего.

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


Мной был обозначен факт, что в луа отсутсвуют основополагающие механизмы, присущие иным языкам. Что делает его значительно проще на их фоне.

А вот js, обтертый тысячами глаз программистов, годен - и для соло применения, и для встраивания, и для переноса в клиент-серверных системах.


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


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 08-Дек-14 14:12 
зрелищем твоего развороченого афедрона удовлетворён.

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено cmp , 09-Дек-14 13:12 
В ваших копрофильских фетишах совсем не силен, но троль ты такой же махровый.

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 09-Дек-14 13:24 
когда я указываю тебе на твой идиотизм — это не троллинг, а печальная правда жизни.

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено cmp , 10-Дек-14 00:41 
аааа, да, я просто не заметил

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено edwin3d , 08-Дек-14 10:12 
> совместить JIT и низкое потребление ресурсов?

Я Вам сейчас открою секрет страшный - хороший JIT один из немногих корректных путей обеспечить хорошее б-е для языков такого класса.
Вопрос в степени прямизны JIT и разработчика самого приложения.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 01:14 
JIT зло и оверхед большой

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 08-Дек-14 03:40 
> JIT зло и оверхед большой

хорошо, что Mike Pall не в курсе.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено edwin3d , 08-Дек-14 10:14 
> JIT зло

Ждем Вашего рецепта решения проблемы низкой про-ти.

> и оверхед большой

JIT вообще-то добавляет "оверхед" только на первом этапе работы.
Скажем ф-я вызвалась Н раз (к примеру - 100), в 101-й уже выполнился найтивный код  


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Crazy Alex , 10-Дек-14 19:31 
> Ждем Вашего рецепта решения проблемы низкой про-ти.

Статическая типизация и компиляция. Никакой принципиальной проблемы во вкрутке компилятора в приложение нет. Язык, правда, надо подобрать подходящий. Я бы, пожалуй, в сторону паскаля смотрел - он всегда компилился шустро, а излишние языковые возможности в скриптах - только во вред.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено edwin3d , 11-Дек-14 10:53 
Добрый день.

> Статическая типизация

Никаким боком к JIT. Вообще. Самый наглядный пример - Java.
Не надо сводить JIT только в JS и т.д.
JIT актуален (причем - прежде всего) и там, где генерируется байт-код

> и компиляция. Никакой принципиальной проблемы во вкрутке компилятора
> в приложение нет.

Т.е. Вы предлагаете тот путь, по которому пошли в Google с AOT в Android ?  
Путь интересный, но в некоторых случаях спорный, и вот почему:
К примеру - что делать в случае, если приложение должно исполнять другой, загружаемый кусок ? Типа AS серверов ?

> а излишние
> языковые возможности в скриптах - только во вред.

Так Вы значит только о скриптах ?
Простите, а Вы не забыли, что сегодня на этих скриптах, которым как Вы говорите "а излишние языковые возможности в скриптах - только во вред." строятся целые приложения и с учетом этого момента и стоит решать ?


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 05-Дек-14 17:14 
а есть js-интерпритатор для консоли? возможно на нём...

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 05-Дек-14 22:51 
>а есть js-интерпритатор для консоли? возможно на нём...

aptitude search spidermonkey


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 05-Дек-14 23:21 
apt install nodejs

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 05-Дек-14 18:43 
"Состояние проекты "
Но при этом: "стабильное и пригодное для промышленного применения"

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Фокс Йовович , 05-Дек-14 20:04 
Чем оно лучше LuaJIT?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Пользователь Debian , 05-Дек-14 20:18 
Язык программирования менее эзотеричен (Таблицы и метатаблицы для всего и double для всех числовых данных? Спасибо, не нужно.)

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Фокс Йовович , 05-Дек-14 20:26 
В чём проблема, если JIT это оптимизирует?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 03:19 
> В чём проблема, если JIT это оптимизирует?

Только в 22 кило RAM все это уже явно не уместится.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 05-Дек-14 21:26 
в Lua 5.3 есть integer

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено АнонуС , 06-Дек-14 01:53 
> в Lua 5.3 есть integer

Это прорыв !!!


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 02:06 
таблицы - это просто хэши
магия с прототипами вам больше нравится?
как по вашему в js представлены числа?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 07-Дек-14 03:14 
> магия с прототипами вам больше нравится?

Monkey patching FTW!!!


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 06-Дек-14 08:07 
> Таблицы и метатаблицы для всего и double для
> всех числовых данных? Спасибо, не нужно.

ты только что описал javascript.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Crazy Alex , 05-Дек-14 22:55 
Например, тем, что количество людей, умеющих писать на JS, больше тех, кто умеет Lua, раз в сто как минимум. Готового кода тоже в достатке.

Правда, непонятна скорость этой штуки.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Mihail Zenkov , 06-Дек-14 01:38 
> Правда, непонятна скорость этой штуки.

Duktape (finally released in October 2014) lacks a lazy evaluation model.

http://wiki.netsurf-browser.org/Developer_Weekend_%28No...

Скорее бы к netsurf прикрутили - будет хотя бы один легкий браузер с js.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 13:38 
Си-подобностью? Переносимостью (в браузер без всяких lua2js) и интероперабельностью с JS-кодом?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 13:47 
> Чем оно лучше Squirrel?

Отремонтировал для большей справедливости


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 02:57 
Повод для еще одного форка nodejs

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 06-Дек-14 08:02 
больше жаваскрипов для бога жаваскрипов! see? njs? jx9? фатальные недостатки!

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 06-Дек-14 08:06 
движок регулярных выражений, само собой, чисто бэктрекинговый. авторы малацца, жгут.

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 13:27 
> Для интеграции Duktape в код на C/C++ достаточно добавить в проект файлы duktape.c и duktape.h

Не думал, что в 2014 найдутся люди, не понимающие, почему по пути gnulib идти нельзя.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 06-Дек-14 13:29 
и что тебе не нравится? ты не в курсе термина «амальгамизация»?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 15:54 
Ты bundle'ишь в программу zlib. Или libpng. Или md5.c. Завтра там находят уязвимость. Твои действия?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 06-Дек-14 18:16 
> Ты bundle'ишь в программу zlib. Или libpng. Или md5.c. Завтра там находят
> уязвимость. Твои действия?

выпускаю фикс. конечному пользователю вообще по-барабану, в дистрибутиве давно всё починил маинтайнер. ещё идиотские вопросы есть?


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Crazy Alex , 06-Дек-14 19:45 
Ну, я бы сказал, что он прав... если бы сабж совершенно очевидно не был рассчитан на какой-то эмбед, где хоть шаред, хоть статическую либу будет (или не будет) фиксить один и тот же разработчик прошивки

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено arisu , 07-Дек-14 03:59 
> Ну, я бы сказал, что он прав...

нет, он идиот. который уверен, что если дали амальгаму, то единственный метод использования амальгамы — затащить к себе в проект. мозги же у него отсутствуют, и предположить, что амальгамизация никак не мешает делать отдельную библиотеку, он не в состоянии.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Crazy Alex , 06-Дек-14 19:40 
Ты выкатываешь новую прошивку. Или забиваешь, так как устройство с уязвимостью тобой уже не поддерживается. Еще раз посмотри описание (в частности, акцент на малом потреблении памяти) и подумай, на какое применение эта штука рассчитана.

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено ix.. , 06-Дек-14 14:32 
Очень даже верный подход. То, что многие отказались от него и даже успели нагородить свехсложную интеграцию - не делает их правыми.

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено hoopoe , 06-Дек-14 15:55 
Один из ярчайших примеров использования данной техники - это sqlite, весьма удачное решение

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 16:20 
> Один из ярчайших примеров использования данной техники - это sqlite, весьма удачное
> решение

% locate libsqlite
/usr/lib64/libsqlite3.so
/usr/lib64/libsqlite3.so.0
/usr/lib64/libsqlite3.so.0.8.6

Вообще мимо кассы. Я говорил про подход gnulib.


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Mihail Zenkov , 06-Дек-14 20:36 
> Вообще мимо кассы. Я говорил про подход gnulib.

https://sqlite.org/amalgamation.html


"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 06-Дек-14 17:11 
Полезная вещь! Время от времени думал о том что неплохо бы найти нечто подобное, но лениво было.
А аналоги есть? (чтобы сравнить и выбрать лучшее)

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 08-Дек-14 00:50 
А кто пробовал, а то у меня почему-то require не работает. Что нужно - поделитесь опытом?

"Duktape - компактный встраиваемый JavaScript-движок"
Отправлено Аноним , 08-Дек-14 02:43 
Нужно определить следующую конструкцию:

```
Duktape.modSearch = function (id) {
    var res;

    print('loading module:', id);

    // _source_code_from_module = read('...'); // Provide source code from name

    return _source_code_from_module;
}
```

Удачи.