Slide 1

Slide 1 text

Mruby & Me Seb Jacobs Monday, 11 February 13

Slide 2

Slide 2 text

Matz’s Dream flickr/moofbong Ruby for everyone, everywhere! Monday, 11 February 13

Slide 3

Slide 3 text

So many rubies? JRuby, Rubinius, Topaz, ... why do we need another one? Monday, 11 February 13

Slide 4

Slide 4 text

What is mruby? lightweight ISO-compliant ruby small memory footprint ruby for embedded systems Monday, 11 February 13

Slide 5

Slide 5 text

mruby is the same but different • compile mruby to bytecode • modular library system • no regexps by default • no standard library • no require! Monday, 11 February 13

Slide 6

Slide 6 text

Hello bytecode $ mruby -e 'puts "hello lrug";' --verbose 000 OP_LOADSELF!R1 001 OP_STRING! R2! "hello lrug" 002 OP_SEND! R1! :puts! 1 003 OP_STOP Monday, 11 February 13

Slide 7

Slide 7 text

C calling Ruby #include #include int main(void) { mrb_state *mrb = mrb_open(); char code[] = "p 'hello world!'"; printf("Executing Ruby code from C!\n"); mrb_load_string(mrb, code); return 0; } https://github.com/mruby/mruby/wiki/Hello-World Monday, 11 February 13

Slide 8

Slide 8 text

Use it with your favourite language! Ruby in Lua Ruby in PHP Ruby in Node.js! Monday, 11 February 13

Slide 9

Slide 9 text

php-mruby $mrb = new Mruby(); $mrb->assign('$myname','sebjacobs'); $mrb->run('puts $myname'); https://github.com/chobie/php-mruby Monday, 11 February 13

Slide 10

Slide 10 text

Embedded Ruby! Ruby in your fridge Ruby on your TV Ruby on Wheels! Monday, 11 February 13

Slide 11

Slide 11 text

Build mobile apps with Mobiruby or Jamruby Monday, 11 February 13

Slide 12

Slide 12 text

mod_mruby r = Apache::Request.new() Apache.rputs("redirecting request!") r.filename = "/var/www/html/redirect.html" Apache::return(Apache::OK) https://github.com/matsumoto-r/mod_mruby Monday, 11 February 13

Slide 13

Slide 13 text

WebRuby https://qiezi.me/projects/webruby-tutorial/ Monday, 11 February 13

Slide 14

Slide 14 text

MTest class Test4MTest < MTest::Unit::TestCase def test_assert_empty assert_empty([], 'array empty') end def test_assert_equal assert_equal('', nil.to_s) end def test_assert_includes assert_includes([1,2,3], 1) end def test_assert_instance_of assert_instance_of Class, Array end end MTest::Unit.new.run https://github.com/iij/mruby-mtest Monday, 11 February 13

Slide 15

Slide 15 text

Get involved! Monday, 11 February 13

Slide 16

Slide 16 text

Module#constants assert('Module#constants', '15.2.2.4.24') do ! module Test4constants ! ! Const4Test4constant = 24 ! end ! module Test4constants2 ! ! include Test4constants ! ! Const4Test4constant2 = 42 ! end ! Test4constants.constants == [:Const4Test4constant] ! Test4constants2.constants == [:Const4Test4constant2] end Monday, 11 February 13

Slide 17

Slide 17 text

Module#constants mrb_value mrb_mod_constants(mrb_state *mrb, mrb_value mod) { ! mrb_value ary; ! ary = mrb_ary_new(mrb); ! if (obj_iv_p(mod) && mrb_obj_ptr(mod)->iv) ! { iv_foreach(mrb, mrb_obj_ptr(mod)->iv, const_i, &ary); ! } ! return ary; } Monday, 11 February 13

Slide 18

Slide 18 text

The future? mruby-ruby Monday, 11 February 13

Slide 19

Slide 19 text

Check out • github.com/mruby/mruby • mruby.sh • github.com/iij/mruby Monday, 11 February 13

Slide 20

Slide 20 text

I’m @sebjacobs any questions? Monday, 11 February 13