LINUX.ORG.RU

посоветуйте встраиваемый скриптовый язык

 , ,


2

5

Есть относительно большая аппа на C++ с большим количеством всего захардкоженного. Эволюция дошла до того, что народ поверил в нужность конфигов и расширения функций пользователями, дабы не компилировать на каждый чих и не лезть грязными лапами в код, ломая всё на своём пути. Народ попробовал разные язычки типа python и AngelScript встраивать, но оно не подошло в силу тормознутости и больших размеров а также по ряду других параметров, в итоге сформировался список требований:

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

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

3. Нужна скорость, особенно важно, чтобы код, состоящиё только из вызова определённых в C/C++ конструкций выполнялся максимально быстро. Также декларативный код должен выполняться максимально быстро.

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

Пока я смотрю больше на Lua, но народу нравится больше S-выражения, поэтому рассматриваю ещё https://github.com/ashinn/chibi-scheme

Есть какие ещё варианты?

★★★★★

Последнее исправление: slapin (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

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

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

Guile, если хочется S-expr, при желании есть lua-фронтенд, который пилит один китаец.

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

Суть модификаций в основном в приьивании скрипта к задаче. типа в scheme делают как-то (пишу по памяти, не лиспер):

(event-handler ('close)
    (message-box-quit
     (application-terminate '0)
    )
    (event-handled)
)

ну и ещё синтаксис для state-машин и прочих частых конструкций. главным образом задача чтобы был минимум стркутурной воды и больше по делу, дабы не было графомании и весь рантайм-код был максимально ограничен. То есть ели мимокрокодил видит скрипт и не понимает что оно делает, значит это сделано неправильно.

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

посмотри на duktape

lua

Одного поля ягоды. Небезопасный C++, да еще в связке с языком со слабой динамической типизацией. Ммм красота

Место js в браузере (по историческим причинам). Тащить его куда-то еще ИМХО глупая затея. Lua - тот же js, без сахара и стандартной библиотеки

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

я бы не сказал, что racket молниеносный

x4DA ★★★★★
()

Короче пока смотрю на https://github.com/rxi/aria https://gitlab.com/urn/urn ну и chibi-scheme и родной Lua. Короче хочется быть чуть быстрее. Lua чуть медленнее чем хотелось бы и с расширением синтаксических конструкций всё сложно... Urn частично решает проблему. У Lua масса удобств, например достаточно минимальный API для биндинга, (в отличие от того же chibi-scheme). Надо ещё думать...

Проблема в том, что надо пилить штуки, выполняющиеся в горячих кусках кода. JIT плохо тем, что некоторые используемые архитектуры не поддерживаются, плюс память кушает. Надо как-то извратиться чтобы или скрипт был адово быстрый или удавалось сформировать какой-то хитрый кросс-платформенный байткод под конкретную задачу так, чтобы оно CPU не жрало сильно больше C-шного, или какую-то ещё магию :( Короче надо ограничить scope при запуске в горячих местах, там скрипту время максимум 5ms, это вот встаёт колом.

slapin ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Можно взять Julia, он еще быстрее будет

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

Если надо действительно быстро, то бери luajit. Я как-то делал тесты (Обьясните пожалуйста логику названий сетевых интерфейсов в новых убунтах (комментарий), Обьясните пожалуйста логику названий сетевых интерфейсов в новых убунтах (комментарий) ), luajit единственный может хоть как-то приблизиться по скорости к неоптимизированному коду на Си. Остальное сильно отстает.

Но если JIT нежелателен, то следующий по скорости из не-JIT, как ни странно, neko wm.

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

Это их внутренний сервер, причем тут «скриптовый язык», у них racket крутился на андроиде и исполнял sexpы, которыми можно было в рилтайме скриптовать приложения на окулусе, я вот про это в первую очередь.

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

кросс-платформенный байткод

Ну дык GNU Guile, не?

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

Короче надо ограничить scope при запуске в горячих местах, там скрипту время максимум 5ms, это вот встаёт колом.

Сделайте профилирование - куда именно уходит время. 5 ms это довольно много. Может там просто какойто рекурсивный сёрч по диску? Или обращение по плохому каналу на перегруженный сервер?

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

Guile же вроде гнутый, меня закопают, потом убьют, потом снова закопают.

???

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

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

JIT плохо тем, что некоторые используемые архитектуры не поддерживаются, плюс память кушает.

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

На неподдерживаемых архитектурах заменяешь на официальную реализацию.

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

Guile же вроде гнутый

Ну да — хорошо документирован.

меня закопают, потом убьют, потом снова закопают.

ШТА?

Zmicier ★★★★★
()

Я бы использовал ECMAScript/JavaScript - оно как раз для таких кейсов. Продвинутые юзеры кто веб-странички лабал сразу смогут кодить. В качестве движка можно взять SpiderMonkey или V8 (под капотом у NodeJS).

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

Нельзя встраивать GPL в другие лицензии.

Программы под. В программы под несовместимыми с ней лицензиями.

Только какое все это имеет сюда отношение? У вас завалялась какая-то левая Guile под полносильной GNU GPL? Поменяйте ее на подлинную GNU Guile [0] под *малой* [1].

[0] https://www.gnu.org/software/guile/
[1] https://www.gnu.org/software/guile/manual/html_node/Guile-License.html

Она же вирусная.

Не сквернословьте.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

Кстати - да, перл тоже никак не тормоз :-)

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

PicoLisp (~200KB) или даже miniPicoLisp (~50KB)

Просто пиколисп ембеддить неудобно, по крайней мере x64 версию.

На счет мини не скажу.

nihirash ★★★
()

Вот, Red Language лисп с квадратными скобками. Должен встраиваться.

honix
()

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

Red может

Нужна возможность лёгкого расширения синтаксиса

Red поддерживает создание DSL'ей

Нужно чтобы была поддержка многопоточности

А вот тут увы, это в только в планах

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

Поменяйте ее на подлинную GNU Guile [0] под *малой* [1].

А толку? LGPL также запрещает встраивать Guile в бинарник. Только SO/DLL.

monk ★★★★★
()

lua

Недавно было нужно сильно кастомизировать логику в одном С-шном проекте. На lua все взлетело за день. До этого видел lua только в сталкере.

От скобок в tcl-е тошнит. От басикоподобного синтаксиса lua тошнит меньше. Люблю perl, но он тяжеловат.

PS но вот отсутствия ftruncate() убило!

vel ★★★★★
()

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

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

Просто пиколисп ембеддить неудобно, по крайней мере x64 версию.

А в чём это проявляется? Вызов с-кода (или явы) из лиспа - достаточно прост. Вызов лисп функций из с также возможен, хоть и ограничен. Но, конечно, удобнее запустить его как сервер и общаться через IPC.

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