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