LINUX.ORG.RU

Встраиваемый JS

 ,


0

3

Добрый день!

Есть проект на плюсах, в котором иногда надо выполнять пользовательские скрипты. Я раньше пользовался только Lua, Python и QScript, но все три не подходят: Lua не понимается людьми, которые должны писать скрипты, Python плохо работает с потоками, Qt не используется в проекте.

Так как js среди скриптовых языков наиболее понятен обычным людям с опытом в вебе или на c++/java, я решил выбрать его.

Оказалось, что есть огромное количество js-движков (начиная от V8, который мне не подходит из-за однопоточности, заканчивая tiny-js для встраиваемых систем).

Производительность не очень важна (то есть всякие JIT-компиляторы не требуются), но нужно, чтобы движок мог работать в многопоточном приложении и не пользовался TLS.

Кто-нибудь встраивал js-интерпретатор в свои программы? Каким движком вы пользовались, с какими проблемами столкнулись?

★★★

duktape бери, а вообще странно что проблемы с lua который семантически близок к js

anonymous
()

Так в js в принципе нет многопоточности. Реализуй поток, потом приделывай туда js.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)

Lua не понимается людьми, которые должны писать скрипты

лолшто? гнать ссаными тряпками таких спецов

Python плохо работает с потоками

эм...ну js как бы тоже.

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

а TLS то тебе чем не угодил?

енивей, я луа делал в многопотоке. в каждом потоке по своей машине и небольшой LPC между ними.

anonymous
()

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

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

а TLS то тебе чем не угодил?

Возможно, буду приделывать зелёные нити с разными интерпретаторами в одном потоке ОС.

енивей, я луа делал в многопотоке. в каждом потоке по своей машине и небольшой LPC между ними.

Да, так я тоже делал.

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

странно что проблемы с lua который семантически близок к js

гнать ссаными тряпками таких спецов

Люди программируют на своих обычных языках (java, js, c++, python, perl). Раз в неделю им надо влезть в скрипт и что-то поправить или дописать. Синтаксис Lua скорее необычен по сравнению со всеми перечисленными, что будет тратить время и порождать ошибки. Так как мне всё равно, какой язык встраивать, хочу доставить им меньше неудобств.

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

Раз в неделю что-то поправить или дописать

Думаю, для этого сойдет любой язык.

IMHO, js ведет себя более непредсказуемо для неискушенного пользователя. Бери lua.

newb
()

Python плохо работает с потоками
js
чтобы движок мог работать в многопоточном приложении

Возьми Go для движка и можешь еще GopherJS прикрутить если так надо JS запускать. Хотя это какой-то костылизм, конечно.

выполнять пользовательские скрипты

оке, вопрос, на самом деле без подвоха, а как безопасность обеспечишь ? Или ты пользователям так доверяешь ?

Dred ★★★★★
()

Я лисп встраивал (ECL), человеками понимается на ура, с многопоточностью проблем нет, штука была огонь!

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

Под многопоточностью я понимаю несколько независимых интерпретаторов с разными контекстами

Это мультипроцессинг, а не многопоток, в Питоне делается через соответствующий модуль (https://docs.python.org/3/library/multiprocessing.html), и ничего там не лочится.

entefeed ☆☆☆
()
Ответ на: комментарий от newb

Подумаю над тем, чтобы прикрутить оба :)

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

оке, вопрос, на самом деле без подвоха, а как безопасность обеспечишь ? Или ты пользователям так доверяешь ?

Пользователи доверенные, делать что-то не то могут только по глупости (из-за которой и хочу уйти от текущей системы плагинов, которая подгружает .so на плюсах). Как я понимаю, сегфолтить процесс ни один скриптовый интерпретатор в принципе не должен, таймауты на lua и duktape прикручиваются.

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

Это мультипроцессинг, а не многопоток, в Питоне делается через соответствующий модуль (https://docs.python.org/3/library/multiprocessing.html), и ничего там не лочится.

Я из соседнего процесса не смогу дёргать плюсовые коллбеки. Точнее, смогу, но не вижу в этом смысла.

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

Я из соседнего процесса

тогда стоит определиться чего хочешь, потому что понятия весьма четкие

Пользователи доверенные

ну смотри, выполнять пользовательский eval не просто так не рекомендуют даже в JS. Я вот собираюсь для пользовательского JS-а chrome headless гонять, у него не самый плохой sandbox. Раньше там был докер (скорее всего и останется), правда пользователи у меня даже близко не доверенные.

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

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

Dark_SavanT ★★★★★
()

напиши интерфейс работающий через unix-сокеты и пусть js пишут на ноде, общающейся через этот самый сокетик)

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

Что обсуждают не то, что нужно, я заметил :(

А что мне нужно и что я с чем путаю? Задача проста: дёргать из плюсов js, который иногда будет дёргать плюсы обратно. Вроде бы, это и называется встраиваемый или embedded интерпретатор.

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

Даже не думал, что такое бывает.

А можно перегонять плюсы в js через emscripten, потом перегонять этот js в lua, и выполнять.

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

напиши интерфейс работающий через unix-сокеты и пусть js пишут на ноде, общающейся через этот самый сокетик)

Мне кажется, пользователи не смогут в коллбеколапшу :( Но такой вариант я тоже рассматривал, чтобы кривые пользователи хотя бы не сегфолтили мой процесс. Мне кажется, реализуется на порядок геморнее, чем встраивание ЯП.

vzzo ★★★
() автор топика

можешь потыкать guile. ЕМНИП, его vm поддерживает js. С многопоточностью там точно всё в порядке.

feofan ★★★★★
()

прикрути lua и скажи что это укушенный embedded жабоскрипт. Судя по твоему сообщению, целевая аудитория даже не поймёт что это не жабоскрипт.

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

Стопочку за земляка. Если он ещё их на схему перетянет, будет круто. Но не будет. Гуйль какую то старую Экму поддерживает, 3 или 4.

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

Мне кажется, пользователи не смогут в коллбеколапшу

Сделай полностью синхронный интерфейс для этого дела.

Или как вариант херани им интерфейс на каком-нибудь nashorn, реализовав только то, что тебе нужно

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

У них просто другая работа.

vzzo ★★★
() автор топика
8 ноября 2017 г.
Ответ на: комментарий от LamerOk

Чмо уёбищное, якобы 5-ти звездочное, приведи хоть какой-то текст на asm....

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