Встраивание Ruby в приложение C++ с помощью SWIG?

В прошлом я успешно создавал привязки Ruby-C++ с помощью SWIG, где код C++ был скомпилирован как динамическая библиотека с подключенным к ней скриптом Ruby.

Однако я хотел бы сделать это наоборот. Создайте исполняемый файл с помощью C++ и разрешите ему загружать и выполнять код Ruby. Ruby также должен иметь возможность вызывать функции, определенные на стороне C++ (естественно, иначе все, что мне нужно, — это вызов system()).

Предоставляет ли SWIG средства для достижения этой цели?


person StackedCrooked    schedule 16.10.2009    source источник


Ответы (2)


Вас может заинтересовать Ruby, встроенный в c++

person Éric Malenfant    schedule 16.10.2009

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

Самый простой способ — разделить вашу программу на две части: доступную для ruby ​​часть, которая находится в dll, и недоступную часть, которая соединяется с этой dll и вызывает Ruby через system().

На более высоком уровне вы можете использовать C API ruby ​​из C++ для запуска кода Ruby. Это дает вам лучший контроль над тем, как выполняется код Ruby, и дает вам возможность делать такие вещи, как обертывание всего исполняемого Ruby в блоки, которые генерируют исключения C++ из исключений Ruby. Недостатком здесь является то, что вам нужно будет понимать C API Ruby, который не ужасен, но определенно не так удобен, как, скажем, Lua.

Если вы хотите большего, вы в глубокой воде. Ruby и C++ — сложные языки, и заставить их взаимодействовать — настоящая проблема. Ссылка Эрика Маленфанта может быть вам полезна.

person David Seiler    schedule 20.10.2009