LINUX.ORG.RU

Встраиваемые языки: lua, python, scheme, etc?

 , , ,


0

3

Добрый вечер, обитатели цифрового моря.
Буду краток. Имеется большой монолит, написанный на сpp, к которому понадобилось прикрутить систему плагинов и конфигурации. Собственно, ищется язык-кандидат на роль для встраивания в нашего франкенштейна. Требование к кандидату только одно - скорость.

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

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


Ответ на: комментарий от anonymous

Сам ты клоун. Если пацаны привыкли к шарпу/java - TS вас спасёт. Node - хороша. Скорость и батарейки на любой чих. Годное API для своих батареек: https://nodejs.org/api/addons.html#node-api и всё модно-молодёжно. Второй плюс - хайпец. Разберётесь и будете нужны на рынке.

ты сам-то верешь в ту чушь которую ты здесь понаписал?

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

чушь которую ты здесь понаписал

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

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от eyrell

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

какие данные, что за манипуляции.. из одного треда или разных.

Если математика, вектора, матрицы и критично по скорости - то все плагины исключительно на C :-) . Иначе представление и конверсия данных скрипт<->монолит всё сгубит.

и самое главное - а вы который язык знаете ? :-) без этого всё прочее просто фантазии

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

Выглядит интересно, ознакомлюсь. Главное, чтобы остальные члены команды меня не побили за JS.

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

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

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

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

Вам нужна нормальная архитектура и всё. C++ ничем не хуже «скриптовых языков», по крайней мере не настолько хуже, чтобы ради этой разницы настолько усложнять проект, внесением в него второго языка.

Если вы настаиваете на том, что не хотите писать на C++, значит выбирайте любимый язык и делайте интероп, это везде есть. По производительности большинство языков достаточно быстрые. Могу посоветовать Java. Со временем ваш С++ можно будет постепенно переписать на Java, а сначала вызывать через JNI или подобную обёртку. Но, повторюсь, я, лично, такой нужды не вижу, вам не надо никаких других языков, вам надо чётко сформулировать проблему, которую вы хотите решить и решить её в рамках С++ проекта.

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

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

вместо конструктивного диалога ты продолжаешь пороть свою метафизическую чушь с в8 тайпскриптом и теперь вот это еще.

NorthernBlow
()
Ответ на: комментарий от Psilocybe

Нет не встрпивал. Попался на глаза. А что с ним не так? Правда интересно.

у него GC, толстые объекты с кривым огромным API и в мульти-тред он не умеет.

когда изначально в проект заложен столман с лиспом, вот только тогда :-) Или если хочешь познать боль

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

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

Типичное описание архитектуры когда верхний уровень на питоне, нижний на плюсах. Т.е. плюсы встроены в питон а не наоборот.

AntonI ★★★★
()

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

А может быть вы сделаете API для взаимодействия через сокеты по сети, повесите ваш монолит сервером, и будете к нему присоединяться по сети, и дергать за API? Тогда любой клиент сможет писать на чем хочет, лишь бы протокол сетевого взаимодействия выполнялся?

blex ★★
()

Из приведённого списка за зал бы lua, за простоту для людей далёких от программирования (вы ведь для этой цели скрипты подвязываете). А по скорости, думаю haxe побыстрее будет, но тестов я не делал, не смотрел.

skidphysic
()

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

nionio35
()

Короче, автор вот тебе совет: не пробуй даже тащить питон, задолбаешься потом встраивать его, на это очень много уйдет времени + он немаленький. Guile возможно сложноват будет в плане писанины на нем (как по мне) остается из всего этого в качестве адекватного решения естественно Lua, которая легко учится, легко встраивается (чуть ли не нативно) и на ней довольно просто писать, но ООП там костыльное в виде хеш таблиц, но вообще кроме хеш таблиц в принципе другие структуры данных не нужны.

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

Требование к кандидату только одно - скорость.

Lua однозначно. Специально разработан для встраивания, маленький, легко изучить, быстрее всех из интерпритируемых. Годы личного опыта только добавили любви

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

остается из всего этого в качестве адекватного решения естественно Lua

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

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

Вот на этом моменте мы хотим остановиться, перейти на скиптовый язык и больше никогда не прикасаться к этому куску г…кода.

Возьмите меня на работу: звучит как то, от чего я кайфую (я имею в виду раз грести ваш говно код и превратить в конфетку)

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

А как в luajit можно не включать jit? Это ж уже луа со включённым джит? Или где?

Это быстрый интерпретатор + опциональный JIT-компилятор. Когда JIT включен, то JIT’ится не всё подряд, а только то, что нужно, одноразовый код интерпретируется.

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

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

Да все там есть

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

Прикол. Я не знал что это отдельный интерпретатор. Я пробовал, вроде, для 5.1 лет 8 назад.. Но у меня щас в голове было, что это какой-то форк основного лауа, тока jit допелили… Надо почитать что там к чему. Так и забросили его? Чёт не слыхать для новых версий

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

Но у меня щас в голове было, что это какой-то форк основного лауа, тока jit допелили…

Нет, это отдельная реализация

Так и забросили его?

Нет, вполне живой: https://repo.or.cz/luajit-2.0.git/shortlog

https://www.freelists.org/post/luajit/LuaJIT-uses-rolling-releases

Чёт не слыхать для новых версий

Для новых версий Lua? Это весьма красноречиво говорит о нужности этих версий.

annulen ★★★★★
()

По моему опыту, наименьшее количество матов в данном применении вызвало Lua:

  1. Создано специально для встраиваемого применения, отсюда максимально простое встраивание как в имеющийся C/C++ код, так и наоборот (имеющегося кода на компилируемых ЯП в Lua). Для C++ так же могу порекомендовать библиотеку Luabind
  2. Реально небольшой размер интерпретатора и рантайма по сравнению с Python - и, тем более, V8
  3. Считается самым быстрым из интерпретируемых ЯП. Если планируется запускать только на x86/x64 то так же можно использовать JIT-компилятор luajit, считающийся чуть ли не эталоном в своей области
  4. Никаких проблем с многопоточностью by design
  5. Код без проблем читается любым разрабом, имеющим опыт с любым другим ЯП. В целом учится за несколько часов
  6. По сравнению с лисп-подобными - активно используется в production на целой куче крупных проектов, а не преимущественно небольшой группой фанбоев-пассионариев. Отсюда высокий уровень зрелости ЯП со всеми вытекающими, а так же неагрессивное коммюнити.

Из недостатков могу отметить малое количество батареек по сравнению с Python (частично компенсируется пунктом 1), несколько ограниченный синтаксис и непривычный для индустрии подход к выбору номера индекса начального элемента массива (1 а не 0).

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