×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
C Extendendo com Ruby @samflores & cartoons
Slide 2
Slide 2 text
Ruby Eu mas...
Slide 3
Slide 3 text
Mais velocidade
Slide 4
Slide 4 text
Manipular o hardware
Slide 5
Slide 5 text
Não reinventar a roda
Slide 6
Slide 6 text
Enlouquecer com memory leaks e segfaults
Slide 7
Slide 7 text
Mas como fazer?
Slide 8
Slide 8 text
• cria um Makefile • extconf.rb • create_makefile • Init_ mkmf
Slide 9
Slide 9 text
require 'mkmf' create_makefile 'greeter' extconf.rb
Slide 10
Slide 10 text
#include "ruby.h" void Init_greeter() { /*Implemente aqui*/ } greeter.c
Slide 11
Slide 11 text
• rb_define_class • rb_define_module • rb_define_class_under Classes
Slide 12
Slide 12 text
VALUE rb_cGreeter = rb_define_class( "Greeter", rb_cObject); Criando uma Classe
Slide 13
Slide 13 text
• rb_define_method • classe, nome, ponteiro para função e número de parâmetros • -1 == C array • -2 == Ruby array Métodos
Slide 14
Slide 14 text
rb_define_method( rb_cGreeter, "say_it", greeter_say_it, 1); Criando um Método
Slide 15
Slide 15 text
VALUE say_it (VALUE self, VALUE name){ /*Faz algo aqui*/ } Criando um Método
Slide 16
Slide 16 text
• rb_funcall ‣ varargs • rb_funcall2 ‣ C array • rb_funcall3 ‣ só public • rb_apply ‣ Ruby array Enviar Mensagens
Slide 17
Slide 17 text
VALUE obj = /* objeto */ ID id = rb_intern("to_s"); rb_funcall(obj, id, 0); Enviando Mensagens
Slide 18
Slide 18 text
Funções úteis - Strings • rb_str_new / rb_str_new2 • rb_str_dup • rb_str_cat / rb_str_concat • rb_str_split
Slide 19
Slide 19 text
Funções úteis - Arrays • rb_ary_new (até 4) • rb_ary_store / rb_ary_push • rb_ary_entry
Slide 20
Slide 20 text
Funções úteis - Hashs • rb_hash_new • rb_hash_aset • rb_hash_aref
Slide 21
Slide 21 text
Vamos ao trabalho sujo
Slide 22
Slide 22 text
•Extending Ruby with C: http:/ / cl.ly/KJO4 •Programming Ruby: http:/ / cl.ly/KIWE Onde ir daqui?
Slide 23
Slide 23 text
No content