×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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