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/.