From: Brian Candler Date: 2012-05-25T02:27:47+09:00 Subject: Re: mruby - More info? Hmm, pretty impressive startup time: $ cat testing.rb 5.times do puts "hello world" end $ time bin/mruby testing.rb hello world hello world hello world hello world hello world real 0m0.004s user 0m0.001s sys 0m0.002s And it compiles to some sort of ASCII byte-code: $ bin/mrbc testing.rb $ cat testing.mrb RITE0009000000090000MATZ 00090000000000D600020000 067A0000005FSC0002000400046F28000000040140020301800340010000200000004AC251000000000000000000010005times94E700000077SC0002000400046F2800000005010000060180003D02000005010000A001000029C655000000010F000Bhello world3304000000010004puts248900000000 $ time bin/mruby -b testing.mrb hello world hello world hello world hello world hello world real 0m0.003s user 0m0.001s sys 0m0.001s And it compiles to obfuscated C: $ bin/mrbc -Ctesting testing.rb $ cat testing.c #include "mruby.h" #include "mruby/irep.h" #include "mruby/string.h" #include "mruby/proc.h" static mrb_code iseq_0[] = { 0x01400203, 0x01800340, 0x01000020, 0x0000004a, }; static mrb_code iseq_1[] = { 0x01000006, 0x0180003d, 0x02000005, 0x010000a0, 0x01000029, }; void testing(mrb_state *mrb) { int n = mrb->irep_len; int idx = n; mrb_irep *irep; mrb_add_irep(mrb, idx+2); irep = mrb->irep[idx] = mrb_malloc(mrb, sizeof(mrb_irep)); irep->idx = idx++; irep->flags = 0 | MRB_ISEQ_NOFREE; irep->nlocals = 2; irep->nregs = 4; irep->ilen = 4; irep->iseq = iseq_0; irep->slen = 1; irep->syms = mrb_malloc(mrb, sizeof(mrb_sym)*1); irep->syms[0] = mrb_intern(mrb, "times"); irep->plen = 0; irep->pool = NULL; irep = mrb->irep[idx] = mrb_malloc(mrb, sizeof(mrb_irep)); irep->idx = idx++; irep->flags = 0 | MRB_ISEQ_NOFREE; irep->nlocals = 2; irep->nregs = 4; irep->ilen = 5; irep->iseq = iseq_1; irep->slen = 1; irep->syms = mrb_malloc(mrb, sizeof(mrb_sym)*1); irep->syms[0] = mrb_intern(mrb, "puts"); irep->plen = 1; irep->pool = mrb_malloc(mrb, sizeof(mrb_value)*1); irep->pool[0] = mrb_str_new(mrb, "hello world", 11); mrb->irep_len = idx; extern mrb_value mrb_top_self(mrb_state *mrb); mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); } -- Posted via http://www.ruby-forum.com/.