Slide 1

Slide 1 text

mruby A naïve introduction to

Slide 2

Slide 2 text

Embedded Devices Native Applications Scripting Applications

Slide 3

Slide 3 text

Know some Ruby Know some C Know Japanese Getting Started

Slide 4

Slide 4 text

Ask Google: “mruby [ANYTHING]”

Slide 5

Slide 5 text

< 128kb

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

`require`

Slide 8

Slide 8 text

stdlib

Slide 9

Slide 9 text

mrbgems

Slide 10

Slide 10 text

mruby-array-ext mruby-bin-mirb mruby-bin-mruby-config mruby-bin-mruby mruby-bin-strip mruby-enum-ext mruby-enum-lazy mruby-enumerator mruby-eval mruby-exit mruby-fiber mruby-hash-ext mruby-kernel-ext mruby-math mruby-numeric-ext mruby-object-ext mruby-objectspace mruby-print mruby-proc-ext mruby-random mruby-range-ext mruby-sprintf mruby-string-ext mruby-string-utf8 mruby-struct mruby-symbol-ext mruby-time mruby-toplevel-ext

Slide 11

Slide 11 text

MRuby::Build.new do |conf| toolchain :gcc conf.gem :core => 'mruby-bin-mirb' conf.gem :core => 'mruby-bin-mruby' conf.gem :core => 'mruby-print' conf.gem :core => 'mruby-proc-ext' conf.gem :core => 'mruby-sprintf' conf.gem :core => 'mruby-time' ! conf.gem :git => 'https://github.com/iij/mruby-io.git' conf.gem :git => 'https://github.com/iij/mruby-mtest.git' conf.gem :git => 'https://github.com/iij/mruby-socket.git' end build_config.rb

Slide 12

Slide 12 text

Many Ways

Slide 13

Slide 13 text

Interpreted $ mruby hello_world.rb Hello, World. ! $ mruby -e “Hello, World!” Hello, World.

Slide 14

Slide 14 text

Interactive Shell (mirb) $ mirb mirb - Embeddable Interactive Ruby Shell ! > puts "Hello, World!" Hello, World! => nil

Slide 15

Slide 15 text

Bytecode (*.mrb) $ mrbc hello_world.rb $ cat -v hello_world.mrb RITE0002&? ^@^@^@gMATZ0000IREP^@^@^@I0000^@^@^@=^@^A^@^D^@ ^@^@^@^@^D^@M-^@^@^F^A^@^@=^@M-^@^@? ^@^@^@J^@^@^@^A^@^@^MHello, World! ^@^@^@^A^@^Dputs^@END^@^@^@^@^H% $ mruby -b hello_world.mrb Hello, World!

Slide 16

Slide 16 text

Binary C Code $ mrbc -B hello_world_bin hello_world.h $ cat hello_world.h const char hello_world_bin[] ={ 0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x39,0x30,0x 30,0x30,0x30,0x30,0x30,0x30,0x39,… };

Slide 17

Slide 17 text

Binary C Code #include ! #include ! ! #include “hello_world.h”! ! int main(void)! {! mrb_state *mrb;! mrb = mrb_open();! mrb_load_irep(mrb, hello_world_bin);! mrb_close(mrb);! return 0;! }

Slide 18

Slide 18 text

Running Ruby from C // car = Car! // car.run! struct RClass *Car = mrb_class_get(mrb, "Car");! mrb_value merv = mrb_class_new_instance(mrb, 0, NULL, Car);! mrb_funcall(mrb, car, "run", 0, NULL);!

Slide 19

Slide 19 text

CODE SPELUNKING github.com/ambethia/merv