@Yonghwa
121

Как работают скриптовые языки встроенные в приложения?

Читаю о скриптовых языках и не могу понять, как они работают в купе с тяжелыми прогами.
Можем взять в пример тот же sublime text, и плагины к нему, или что-то более мне близкое, а именно разработка игр и Lua.
Если говорить о World of Warcraft, то на Lua можно писать адоны к нему, например, кастомизация клиенской части.
Я не совсем понимаю, но ведь я играю в WOW не в браузере, а в desktop приложении, которое было скомпилировано, и чтобы оно работало иначе, его нужно изменить и перекомпилировать.
Но с помощью Lua, его не нужно перекомпилировать. Вы пишите сам адон, и у вас меняется клиентская часть, или что вы там решите написать. Что сам wow позволит, так скажем,
  • Вопрос задан
  • 1184 просмотра
Пригласить эксперта
Ответы на вопрос 5
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Напомню, что языки делятся на компиллируемые и интерпретируемые.

Для того чтобы интерпретируемый язык выполнялся нужен компонент : "Интерпретатор". Это 1 или более исполняемых файлов предоставляющий некий интерфейс. Когда вы пишите свой продукт к примеру на C++, а затем компилируете, чтобы получить PE32\PE32+ файлы, то вам никто не мешает вместе с вашим продуктом поставлять и исполняемые файлы интерпретатора, к примеру для Python. Этот интерпретатор предоставляет API, к примеру в виде набора C-хидеров и набора lib-файлов. Используя, который вы можете вкомпилить в свой продукт связь с этим интерпретатором. А далее, просто подавать python-код в интерпретатор.

Можете почитать Extending and Embedding the Python Interpreter
Ответ написан
GavriKos
@GavriKos
По сути работает все так же, как и плагины в скомпилированных программах. Есть общий для всех плагинов интерфейс, через который приложение с ними и работает.
Собственно клиентская часть не меняется как таковая - exe остается тем же. Но вот логика обработки каких то данных перекладывается на плагин. А уже как выполнен этот плагин - приложению по сути все равно, лишь бы реализовывался интерфейс. Поэтому можно в теории и на компилируемых, и на интерпретируемых языках.
Ответ написан
Комментировать
Rou1997
@Rou1997
Работают точно так же, как и браузеры, приложение само ищет установленные "аддоны" и интерпретирует (выполняет) их, для этого используются "движки" вроде Rhino.
Ответ написан
Комментировать
VGrabko
@VGrabko
Golang, Php, Js
я буквально сегодня такое делал. Я просто проверяю наличие lua скрипта с функцией и если он есть то выполняю её вместо "встроенной"
Ответ написан
Комментировать
В приложении должна быть реализована поддержка плагинов.

например в С/C++ возможна динамическая подгрузка модулей. тоесть, к примеру, нужно положить скомпилированную библиотеку в папку с планинами, а приложение будет загружать их оттуда приблизительно так: проходит по всем либам в папке, загружает их и запускает определенны метод/ф-ию из этой библиотеки (как писал GavriKos - таким макаром плагин реализует некий интерфейс) - этот метод/ф-ия являет точкой входа для плагина

другие приложения, тот же WoW, используют интерпретируемые языки для написания плагинов. в этом случае этот язык дергает API-функции скомпиленого приложения (ядра). кстати, ярким примером является NodeJS. там ядро написано на C, а работа с этим ядром идет уже на языке JavaScript. к примеру, мы хотим записать в файл, мы вызываем ф-ию fs.write, эта ф-ия запускает ф-ию ядра, которая уже записывает это дело в файл и после записи вызывает коллбек. приблизительно так же реализованы интерфейсные расширения в WoW

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы