Swig альтернативы для Ruby? - PullRequest
       20

Swig альтернативы для Ruby?

2 голосов
/ 05 марта 2010

Я хочу сгенерировать модули ruby ​​из существующих библиотек C.

В прошлом я использовал Swig и обнаружил, что это было болезненное задание. Я просто хочу проверить, есть ли что-нибудь лучшее для Руби и других проблем.

Просто нужно оценить выбор, поэтому подойдет даже простой URL, указывающий мне на сайт!

1 Ответ

5 голосов
/ 05 марта 2010

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

Однако существует существенная проблема с расширениями MRI C: они являются MRI C расширениями. Это было хорошо, когда MRI была единственной реализацией Ruby, но теперь у нас есть три готовые к реализации реализации Ruby, еще две готовятся к использованию в ближайшие пару недель и еще две или три будут выпущены позднее в этом году.

Конечно, есть еще одна проблема с расширениями MRI C: вы должны написать их на C.

Лучшим решением является библиотека DL в стандартной библиотеке Ruby , которая позволяет связывать динамическую библиотеку (.dll, .so, .dylib) во время выполнения в чистом Ruby. , К сожалению, он довольно плохо документирован, и из-за этого он не очень хорошо поддерживается (или полностью не поддерживается) несколькими реализациями Ruby: как вы собираетесь предоставлять совместимую реализацию, если нет документации о том, что означает «совместимая реализация»?

Rubinius представил Интерфейс внешних функций Rubinius (FFI) , который намного проще в использовании, чем DL , намного проще реализует для писателей Ruby VM и полностью документировано , указано и протестировано . JRuby немедленно скопировал API, Уэйн Мейснер написал два расширения C для MRI и YARV , tinyrb поддерживает его, IronRuby , MacRuby и MagLev появятся довольно скоро.

Итак, если вы используете FFI, вам не придется писать ни одной строки из C, и , ваша библиотека будет автоматически работать на MRI, YARV, JRuby и Rubinius, а в будущем также на IronRuby. , MacRuby и MagLev.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...