Как встроить Ruby в C ++? - PullRequest
       47

Как встроить Ruby в C ++?

18 голосов
/ 27 октября 2008

Каков наилучший способ внедрения Ruby в качестве языка сценариев в C ++? Используете ruby.h? SWIG? Что-то другое? Что мне нужно, это выставить некоторые объекты C ++ для Ruby и заставить интерпретатор Ruby оценивать сценарии, которые обращаются к этим объектам. Меня не волнует расширение Ruby или доступ к нему в C ++.

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

Ответы [ 5 ]

11 голосов
/ 27 октября 2008

Рис выглядит очень многообещающе.

6 голосов
/ 21 февраля 2009

Ruby предоставляет очень полезный файл README.EXT. Он содержит много информации о том, как расширить Ruby и конвертировать между типами C и Ruby.

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

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

5 голосов
/ 27 октября 2008

swig - вероятно, путь ... но рубин не слишком хорошо встраивается ......

если вам нужен язык, который хорошо встраивается в C ++, попробуйте lua

2 голосов
/ 22 февраля 2009

Вы можете проверить tinyrb .

1 голос
/ 20 августа 2014

Я работал над Rarity (https://github.com/Plaristote/Rarity),, которая делает две вещи:

  • Генерирует привязки Ruby из YML-описания вашего C ++ API
  • Позволяет взаимодействовать со сценарием Ruby самым модным для C ++ способом

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

Я думаю, что Рэрити стоит того! И я был бы рад получить некоторую обратную связь :)!

...