Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Estendendo Ruby com C

Estendendo Ruby com C

Techtalk apresentado na Tagview Tecnologia sobre como criar extensões em C em Ruby.

Avatar for Rodrigo Navarro

Rodrigo Navarro

April 20, 2012

More Decks by Rodrigo Navarro

Other Decks in Programming

Transcript

  1. WHY? 1) Utilizar libs que já existem: • libcurl •

    libxml • libssh • libvorbis • ...
  2. Objetos pre-definidos Classes rb_cArray = rb_define_class("Array", rb_cObject); rb_cBignum = rb_define_class("Bignum",

    rb_cInteger); rb_cBasicObject = boot_defclass("BasicObject", 0); rb_cObject = boot_defclass("Object", rb_cBasicObject); rb_cModule = boot_defclass("Module", rb_cObject); rb_cClass = boot_defclass("Class", rb_cModule); rb_cComplex = rb_define_class("Complex", rb_cNumeric); egrep '^ *rb_c.* *=' *
  3. Objetos pre-definidos Módulos rb_mComparable = rb_define_module("Comparable"); rb_mEnumerable = rb_define_module("Enumerable"); b_mErrno

    = rb_define_module("Errno"); rb_mFileTest = rb_define_module("FileTest"); egrep '^ *rb_m.* *=' *
  4. extconf.rb # Criar um Makefile create_makefile("nome"); # Exigindo um header

    raise "some_lib not found, plz install some_lib" unless have_header("some_lib.h") # Exigindo uma lib raise "some_lib not found, plz install some_lib" unless have_library("some_lib.h") # Exigindo uma função have_func("some_function", "some_function/lib.h")
  5. Arrays int RARRAY_LEN(VALUE array) VALUE* RARRAY_PTR(VALUE array) VALUE rb_ary_new2(int size)

    rb_ary_store(VALUE array, int index, VALUE value) rb_ary_push(VALUE array, VALUE value)