調べたこと、作ったことをメモしています。
こちらに移行中: https://blog.shimazu.me/

rvmでインストールしたmrubyを走らせてみる

概要

rvmでインストールしたmrubyを使ってみた。 いろいろ調べていると、どうも走らせ方が古い記事ばかり見つかってうまく行かなかった。
ということで、自分で調べた現状での走らせ方をメモしておく。
間違ってたり、このほうがいいよ、とかあったらぜひ教えてください。

ソース

runner.c


#include <stdio.h>
#include <mruby.h>
#include <mruby/dump.h>
#include <mruby/string.h>
#include <mruby/proc.h>

int main( void ) 
{
    mrb_state *mrb = mrb_open();
    FILE *fp = fopen( "test.mrb", "r" );
    if ( fp == NULL ) {
        perror( "fopen:" );
        return 1;
    }

    /* 1: read and run */
    mrb_value n = mrb_load_irep_file( mrb, fp );
    puts( RSTRING_PTR(mrb_any_to_s( mrb, n )) );

    /* init fp */
    fseek( fp, 0, SEEK_SET );

    /* 2: only read */
    mrb_irep *irep = mrb_read_irep_file( mrb, fp );
    mrb_run( mrb, mrb_proc_new(mrb, irep), mrb_top_self(mrb) );

    mrb_close( mrb );
    return 0;
}

test.rb

puts "Hello world!"

走らせ方

$ /home/amiq/.rvm/rubies/mruby-head/bin/mrbc test.rb #test.mrbの生成
$ cc -o runner runner.c -I/home/amiq/.rvm/src/mruby-head/include -L/home/amiq/.rvm/src/mruby-head/build/host/lib -lmruby -lm
$ ./runner

メモ

どうも
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
として紹介している記事がちょくちょくあるけど、これは古いやり方なのかな?
mrubyはまだ開発途中なようなので、これからじっくり見て行きたい。
あと、サンプルコードとか適当に作っていくのも楽しそうだなあなんて考えてる。