Какие языки генерируют байт-коды и могут быть загружены / выполнены в C++

Я хотел бы знать, какие языки соответствуют этому сценарию:

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

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

Экспорт функций приложения C++ в сценарий и обратный вызов функций сценария является обязательным.

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

Какие языки я могу использовать?

5 ответов

Возможно Брейнфак? Конечно, легко найти интерпретаторы и гораздо менее читабельны, чем ваш обычный машинный код или байт-код.

Может Vox* может соответствовать вашему счету?

Сценарии могут быть предварительно скомпилированы в переносимый байт-код, и их очень легко внедрить с помощью API на основе стека, похожего на Lua:

// most basic embedding example
VoxVM* v = vox_open(1024);
vox_aux_seterrorhandlers(v);
vox_pushroottable();
vox_dofile(v, "somescript.vx", false, true);
vox_pop(v, 1);
vox_close(v);

Для более полнофункционального примера смотрите etc / minimal.cpp и src / frontend / frontend.cpp


* Vox - это проект, над которым я работаю, чтобы заменить Lua в личных целях. Он основан на сильно модифицированной версии виртуальной машины squirrel3 (но больше не совместим с белкой!).

Синтаксис также немного изменился: вместо использования <- для новых слотов он использует :=, чтобы избежать неоднозначного синтаксиса.

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

Я бы хотел предложить ChaiScript, но у нас нет встроенной поддержки шифрования или байт-кода.

Тем не менее, нет никаких причин, по которым вы не могли бы использовать какой-либо существующий механизм сценариев C++. Можно использовать ChaiScript, luabind и т. Д., Если вы предоставите свои собственные функции шифрования и дешифрования для подачи сценария в движок.

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

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

LuaJIT - это хороший, быстрый интерпретатор Lua, который превращает Lua в собственный машинный код. Байт-код LuaJIT не зависит от платформы, в отличие от обычного Lua.

Посмотрите сами: http://luajit.org/luajit.html http://luajit.org/extensions.html

Другие вопросы по тегам