2010-03-05 4 views
2

Я ищу для создания модулей ruby ​​из существующих библиотек C.Варианты Swig для Ruby?

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

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

ответ

5

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

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

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

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

Rubinius представил Rubinius Foreign Function Interface (FFI), который much easier to use than DL, гораздо легче реализовать для рубин VM писателей и fully documented, specified и tested. JRuby немедленно скопировал API, Уэйн Мейснер написал two C extensions for MRI and YARV, tinyrb поддерживает его, IronRuby, MacRuby и MagLev будет довольно скоро.

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

+0

Спасибо Jorg. FFI выглядит многообещающе. – rmk

Смежные вопросы