The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Duktape - компактный встраиваемый JavaScript-движок

05.12.2014 16:30

В рамках проекта Duktape развивается JavaScript-движок, ориентированный на встраивание в кодовую базу проектов на языке C/C++ и отличающийся компактным размером, высокой переносимостью и низким потреблением ресурсов. Исходные тексты движка написаны на языке Си и распространяются под лицензией MIT. Состояние проекта отмечено как стабильное и пригодное для промышленного применения.

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

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

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

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/41194-duktape
Ключевые слова: duktape, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (52) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, MPEG LA (ok), 16:43, 05/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    JIT?
     
     
  • 2.12, анонимус (??), 21:15, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Как Вы предполагаете совместить JIT и низкое потребление ресурсов?
     
     
  • 3.26, Аноним (-), 13:19, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну LuaJIT же как-то совместил
     
     
  • 4.43, cmp (ok), 18:32, 07/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Все переменные глобальны,весь функционал в динамически линкуемых либах, действительно, как им удалось сделать его быстрым и легковесным?
     
     
  • 5.46, arisu (ok), 03:40, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Все переменные глобальны

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

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

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

    if true then print("hello"); endif

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

     
     
  • 6.48, cmp (ok), 06:26, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > 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, не понравилось, потому что интеграция равнялась бы прибиванию гвоздями.

     
     
  • 7.49, arisu (ok), 06:32, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> 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, не понравилось, потому что интеграция
    > равнялась бы прибиванию гвоздями.

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

     
     
  • 8.52, cmp (ok), 14:07, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ну раз пытаюсь что-то до тебя донести, то видимо да Когда нечего сказать, приня... текст свёрнут, показать
     
     
  • 9.53, arisu (ok), 14:12, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    зрелищем твоего развороченого афедрона удовлетворён ... текст свёрнут, показать
     
     
  • 10.54, cmp (ok), 13:12, 09/12/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В ваших копрофильских фетишах совсем не силен, но троль ты такой же махровый ... текст свёрнут, показать
     
     
  • 11.55, arisu (ok), 13:24, 09/12/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    когда я указываю тебе на твой идиотизм 8212 это не троллинг, а печальная прав... текст свёрнут, показать
     
     
  • 12.56, cmp (ok), 00:41, 10/12/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    аааа, да, я просто не заметил... текст свёрнут, показать
     
  • 3.50, edwin3d (ok), 10:12, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > совместить JIT и низкое потребление ресурсов?

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

     
  • 2.17, Аноним (-), 01:14, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    JIT зло и оверхед большой
     
     
  • 3.47, arisu (ok), 03:40, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > JIT зло и оверхед большой

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

     
  • 3.51, edwin3d (ok), 10:14, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > JIT зло

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

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

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

     
     
  • 4.57, Crazy Alex (ok), 19:31, 10/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Ждем Вашего рецепта решения проблемы низкой про-ти.

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

     
     
  • 5.58, edwin3d (ok), 10:53, 11/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Добрый день.

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

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

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

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

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

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

     

  • 1.4, Аноним (-), 17:14, 05/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    а есть js-интерпритатор для консоли? возможно на нём...
     
     
  • 2.14, Аноним (-), 22:51, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >а есть js-интерпритатор для консоли? возможно на нём...

    aptitude search spidermonkey

     
  • 2.16, Аноним (-), 23:21, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    apt install nodejs
     

  • 1.8, Аноним (-), 18:43, 05/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    "Состояние проекты "
    Но при этом: "стабильное и пригодное для промышленного применения"
     
  • 1.9, Фокс Йовович (?), 20:04, 05/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Чем оно лучше LuaJIT?
     
     
  • 2.10, Пользователь Debian (?), 20:18, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Язык программирования менее эзотеричен (Таблицы и метатаблицы для всего и double для всех числовых данных? Спасибо, не нужно.)
     
     
  • 3.11, Фокс Йовович (?), 20:26, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В чём проблема, если JIT это оптимизирует?
     
     
  • 4.22, Аноним (-), 03:19, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В чём проблема, если JIT это оптимизирует?

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

     
  • 3.13, Аноним (-), 21:26, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    в Lua 5.3 есть integer
     
     
  • 4.19, АнонуС (?), 01:53, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > в Lua 5.3 есть integer

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

     
  • 3.20, Аноним (-), 02:06, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    таблицы - это просто хэши
    магия с прототипами вам больше нравится?
    как по вашему в js представлены числа?
     
     
  • 4.41, Аноним (-), 03:14, 07/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > магия с прототипами вам больше нравится?

    Monkey patching FTW!!!

     
  • 3.25, arisu (ok), 08:07, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Таблицы и метатаблицы для всего и double для
    > всех числовых данных? Спасибо, не нужно.

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

     
  • 2.15, Crazy Alex (ok), 22:55, 05/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Например, тем, что количество людей, умеющих писать на JS, больше тех, кто умеет Lua, раз в сто как минимум. Готового кода тоже в достатке.

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

     
     
  • 3.18, Mihail Zenkov (ok), 01:38, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Правда, непонятна скорость этой штуки.

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

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

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

     
  • 2.29, Аноним (-), 13:38, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Си-подобностью? Переносимостью (в браузер без всяких lua2js) и интероперабельностью с JS-кодом?
     
  • 2.30, Аноним (-), 13:47, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Чем оно лучше Squirrel?

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

     

  • 1.21, Аноним (-), 02:57, 06/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Повод для еще одного форка nodejs
     
  • 1.23, arisu (ok), 08:02, 06/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    больше жаваскрипов для бога жаваскрипов! see? njs? jx9? фатальные недостатки!
     
  • 1.24, arisu (ok), 08:06, 06/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    движок регулярных выражений, само собой, чисто бэктрекинговый. авторы малацца, жгут.
     
  • 1.27, Аноним (-), 13:27, 06/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Для интеграции Duktape в код на C/C++ достаточно добавить в проект файлы duktape.c и duktape.h

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

     
     
  • 2.28, arisu (ok), 13:29, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    и что тебе не нравится? ты не в курсе термина «амальгамизация»?
     
     
  • 3.32, Аноним (-), 15:54, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ты bundle'ишь в программу zlib. Или libpng. Или md5.c. Завтра там находят уязвимость. Твои действия?
     
     
  • 4.36, arisu (ok), 18:16, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ты bundle'ишь в программу zlib. Или libpng. Или md5.c. Завтра там находят
    > уязвимость. Твои действия?

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

     
     
  • 5.39, Crazy Alex (ok), 19:45, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, я бы сказал, что он прав... если бы сабж совершенно очевидно не был рассчитан на какой-то эмбед, где хоть шаред, хоть статическую либу будет (или не будет) фиксить один и тот же разработчик прошивки
     
     
  • 6.42, arisu (ok), 03:59, 07/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну, я бы сказал, что он прав...

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

     
  • 4.38, Crazy Alex (ok), 19:40, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ты выкатываешь новую прошивку. Или забиваешь, так как устройство с уязвимостью тобой уже не поддерживается. Еще раз посмотри описание (в частности, акцент на малом потреблении памяти) и подумай, на какое применение эта штука рассчитана.
     
  • 2.31, ix.. (?), 14:32, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Очень даже верный подход. То, что многие отказались от него и даже успели нагородить свехсложную интеграцию - не делает их правыми.
     
     
  • 3.33, hoopoe (ok), 15:55, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Один из ярчайших примеров использования данной техники - это sqlite, весьма удачное решение
     
     
  • 4.34, Аноним (-), 16:20, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Один из ярчайших примеров использования данной техники - это sqlite, весьма удачное
    > решение

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

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

     
     
  • 5.40, Mihail Zenkov (ok), 20:36, 06/12/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Вообще мимо кассы. Я говорил про подход gnulib.

    https://sqlite.org/amalgamation.html

     

  • 1.35, Аноним (-), 17:11, 06/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Полезная вещь! Время от времени думал о том что неплохо бы найти нечто подобное, но лениво было.
    А аналоги есть? (чтобы сравнить и выбрать лучшее)
     
  • 1.44, Аноним (-), 00:50, 08/12/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А кто пробовал, а то у меня почему-то require не работает. Что нужно - поделитесь опытом?
     
     
  • 2.45, Аноним (-), 02:43, 08/12/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Нужно определить следующую конструкцию:

    '''
    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;
    }
    '''

    Удачи.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру