BT

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

por Werner Schuster , traduzido por Felipe Rodrigues em 16 Dez 2008 |

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.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT