BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Ruby FFI traz acesso às bibliotecas nativas para JRuby, MRI

Ruby FFI traz acesso às bibliotecas nativas para JRuby, MRI

O MRI e o Rubinius tem suportado extensões nativas do Ruby, que permitem código nativo interagir com código Ruby e com o interpretador Ruby ou VM. O Ruby 1.8.0 introduziu a Ruby/DL que permite carregar bibliotecas compartilhadas e chamar as funções fornecidas a partir de código Ruby. A documentação da Ruby/DL mostra como importar funções, como trabalhar e mapear tipos Ruby para tipos C, etc. A Ruby/DL também fornece duas formas de comunicação com callbacks, ex: é possível criar um bloco Ruby para uma função C que espera um ponteiro de função.

Rubinius introduziu sua própria interface com a Foreign Function Interface (FFI) que lembra um pouco a Ruby/DL, embora a API da FFI pareça um pouco diferente, ex: ela usa simbolos Ruby e literais de array para assinatura de tipos ao invés de Strings de código C ou um formato de especificador de tipo customizadocomo a Ruby/DL faz.

Mais cedo nesse ano jruby-ffi, contruído sobre JNA, foi introduzido (JRuby não tem suporte ao Ruby/DL).

Enquanto o suporte no Rubinius e no JRuby estavam disponíveis, isso significava uma grande parte do mundo Ruby que utiliza MRI estava usando Ruby/DL ou criando outras maneiras de usar bibliotecas compartilhadas. Para corrigir isso, o projeto ruby-ffi foi criado pelo Wayne Meissner (que já criara o jruby-ffi) e agora provê a mesma interface FFI como o Rubiniuspara JRuby, Ruby 1.8.x e Ruby 1.9.x. Com isso, é possível usar o mesmo código Ruby através de todas essas implementações Ruby para acessar bibliotecas compartilhadas.

O Ruby FFI 0.2.0 está disponível, a instalação é possível com gem install ffi. A Documentação está disponível no wiki do projeto, um bom lugar para começar é a página de exemplos. Charles Nutter fornece algumas explicações adicionais e exemplos utilizando FFI.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT