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

Ruby em todos os lugares e dispositivos

Carlos Brando
November 04, 2011

Ruby em todos os lugares e dispositivos

Carlos Brando

November 04, 2011
Tweet

More Decks by Carlos Brando

Other Decks in Technology

Transcript

  1. 7

  2. Por que tinyvm? 03 de Novembro de 2012 RubyConf Brazil

    https://github.com/GenTiradentes/tinyvm.git
  3. 03 de Novembro de 2012 640K ought to be enough

    for anybody. “ ” Bill Gates, 1981 RubyConf Brazil whatever
  4. ARRAY DE VARIÁVEIS 0 1 2 10 HASHTABLE 0x75EC78 0x80BACD

    0x75EC78 *STRING 0x80BACD *HASH (void *) (void *)
  5. == disasm: @>========== 0000 putnil ( 1) 0001 putstring "Hello

    RubyConf" 0003 send :puts, 1, nil, 8, 0009 leave STACK HEAP YARV
  6. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax jmp leave leave: STACK HEAP ASSEMBLY
  7. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax jmp leave leave: STACK HEAP ASSEMBLY
  8. STACK .LC0: .string "Hello RubyConf" start: push .LC0 pop eax

    prn eax jmp leave leave: HEAP ASSEMBLY "Hello RubyConf"
  9. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax jmp leave leave: HEAP ASSEMBLY STACK eax = "Hello RubyConf"
  10. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax jmp leave leave: HEAP ASSEMBLY STACK eax = "Hello RubyConf"
  11. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax pop ebp jmp leave leave: HEAP ASSEMBLY STACK eax = "Hello RubyConf" > Hello RubyConf
  12. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax jmp leave leave: HEAP ASSEMBLY STACK eax = "Hello RubyConf"
  13. .LC0: .string "Hello RubyConf" start: push .LC0 pop eax prn

    eax jmp leave leave: HEAP ASSEMBLY eax = "Hello RubyConf" STACK
  14. STACK HEAP == disasm: @>========== 0000 putspecialobject 1 ( 1)

    0002 putspecialobject 2 0004 putobject :say_hello 0006 putiseq say_hello 0008 send :"core#define_method", 3, nil, 0, 0014 pop 0015 putnil ( 5) 0016 putstring "Brando e Luis" 0018 send :say_hello, 1, nil, 8, 0024 leave == disasm: >=========== local table (size: 2, argc: 1 [opts: 0, rest: -1, post: 0, block: -1] s1) [ 2] name 0000 putnil ( 2) 0001 putstring "Hello, " 0003 getlocal name 0005 opt_plus 0007 send :puts, 1, nil, 8, 0013 leave YARV
  15. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret start: push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY
  16. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY
  17. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY
  18. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY "Brando e Luis"
  19. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY "Brando e Luis" 0xFF
  20. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY "Brando e Luis" 0xFF
  21. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY "Brando e Luis" r10 = 0xFF
  22. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis"
  23. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, "
  24. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, " ebx = "Brando e Luis"
  25. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY edi = "Hello, Brando e Luis" r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, " ebx = "Brando e Luis"
  26. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" edi = "Hello, Brando e Luis"
  27. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" edi = "Hello, Brando e Luis"
  28. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" edi = "Hello, Brando e Luis" edi = "Hello, Brando e Luis" > Hello, Brando e Luis
  29. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" 0xFF edi = "Hello, Brando e Luis"
  30. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " say_hello:

    pop r10 pop [20002] mov eax, .LC1 mov ebx, [20002] strcat eax, ebx mov eax, edi prn eax push r10 ret STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" 0xFF edi = "Hello, Brando e Luis"
  31. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" edi = "Hello, Brando e Luis"
  32. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" edi = "Hello, Brando e Luis"
  33. .LC0: .string "Brando e Luis" .LC1: .string "Hello, " start:

    push .LC0 call say_hello jmp leave leave: STACK HEAP ASSEMBLY r10 = 0xFF [20002] = "Brando e Luis" eax = "Hello, Brando e Luis" ebx = "Brando e Luis" edi = "Hello, Brando e Luis"