2. O que é FFI?
FFI (Foreign Function Interface) é um mecanismo
pela qual, um programa escrito em determinada
linguagem, pode realizar chamadas, funções e
comunicar-se outros programas e serviços de
linguagens distintas.
http://www.c2.com/cgi/wiki?ForeignFunctionInterface
4. RubyInline
Automaticamente determina se o código em questão
mudou e só roda build quando necessário.
As extensões são automaticamente carregadas na
classe/módulo que a definiu.
Por padrão suporta apenas C/C++
https://github.com/seattlerb/rubyinline
9. RubyFFI
"FFI is a fantastic tool for easily interfacing your Ruby
code with native libraries.
Using FFI, you can use native libraries from Ruby
without writing a single line of native code."
https://github.com/ffi/ffi/wiki/Core-Concepts
11. Vantagens de utilizar FFI
• Não, necessariamente, escrever código da linguagem
que está integrando
• Mesmo código em qualquer interpretador Ruby (MRI,
JRuby, Rubinius)
• Melhor para outros membros do time, principalmente
se tratando de uma gem
• Instalar apenas libs de runtime
• Não quebra por mudanças na API interna do Ruby
12. Componentes do Ruby FFI
FFI::Library - utilizada ao chamar `require 'ffi'`
FFI::Pointer - segura memória alocada pela
biblioteca terceira.
FFI::MemoryPointer - permite o Ruby alocar
memória nativa e passá-la para bibliotecas não-
Ruby. Também controla ciclo de vida de objetos em
memória
FFI::Struct e FFI::Union
13. Gerenciamento de Memória
• Biblioteca/Linguagem utilizada
• Interpretador Ruby utilizado
• Dois tipos de pilha de memória: Ruby e nativa.
Pilha de memória Ruby é gerenciado pelo GC do
interpretador.
14. Tipos
• :char and :uchar - 8 bit signed and unsigned values
• :short and :ushort - 16 bit signed and unsigned values
• :int and :uint - 32 bit signed and unsigned values
• :long_long and :ulong_long - 64 bit signed and unsigned values
• :long and :ulong - native cpu word (32 bit or 64bit) signed and unsigned values.
Equivalent to C 'long' type.
• :float and :double
• :string - C string, NULL terminated.
• :pointer - a C pointer
https://github.com/ffi/ffi/wiki/Types