#+TITLE: mruby with C API #+AUTHOR: murase_syuka #+EMAIL: murase_syuka+mruby@gmail.com * 関西Ruby会議05 2013年8月31日(土) たのしいmruby(仮) * お前、誰よ? ** murase_syuka *** work Android of Java on Linux of Driver of C *** cook C++ from Exceptional C++ Ruby from Minami.rb Debian from DebianKansai *** hobby? Blender with Python + GIMP + Inkscape *** info + blog: http://d.hatena.ne.jp/murase_syuka/ + twitter: https://twitter.com/#!/murase_syuka + gmail: murase_syuka(ダミーです)+mruby@ジーメール.com * 最初に ** 目次 - what mruby - hello mruby world - 1st step - ... - nth step - 終わり * what mruby [[http://forum.mruby.org/][軽量Rubyフォーラム]] [[https://github.com/mruby/mruby][github:mruby]] ** mruby知っている人 *** mruby使っている人 **** mrubyコミットしている人 ***** mruby倒せる人 #+BEGIN_VERSE 会場口頭説明 | | 人数 | |------------------+----------------------| | 知っている人 | そこそこ | | 使っている人 | 多少したような | | コミットしてる人 | (よく見てなかった) | | 倒せる人 | (微笑) | #+END_VERSE ** crubyと、mrubyの違いとは ruby2は、rubyが主、rubyからC言語ライブラリを呼ぶ mrubyは、C言語が主、C言語アプリケーション等に組み込む #+BEGIN_VERSE 会場口頭説明 ruby2が、c拡張からc関数を利用するのにたいして cが、libmruby.aをldしてrubyメソッドを利用する感じ #+END_VERSE ** mrubyのすべて #+BEGIN_VERSE 会場口頭説明 mrubyについて知りたいなら、以下本読め #+END_VERSE [[http://tatsu-zine.com/books/mruby][組込向けRuby mrubyのすべて総集編]] * hello mruby world ** basic mruby hello world #+BEGIN_VERSE 会場口頭説明 会場口頭説明 (時間がなくなってきたので、 本家サイトのhelloworldサンプル実行して 終わりたかったがemacs操作に失敗><) #+END_VERSE [[./sample_hello_mruby/hello.c][hello world sample]] #+BEGIN_VERSE 会場口頭説明 (時間がなかったので、飛ばしたが 本来の流れとしては、 本家helloworldコードを mruby_c_apiで置き換えていく livecoding的なものをやる予定でした) #+END_VERSE ** 1st fix like mruby  さて、mruby本家helloworldをmruby c apiを使って 書き直してみましょう  まずは、cのchar*を使用しているので、 mrubyのStringを使用するように。 [[./sample_hello_mruby/hello_fix1.c][c world get mruby String instance and it make to char* for c]] | mruby c function | args -> return | |------------------+---------------------------| | mrb_str_new | const char* -> mrb_value | | RSTRING_PTR | mrb_value -> char* | ** 2nd fix like mruby  次は、mrubyのStringなので、sizeで長さを取っちゃうぞ [[./sample_hello_mruby/hello_fix2.c][mruby instance call method into c world]] | mruby c function | args -> return | |------------------+--------------------------------------------| | mrb_func_call | mrb_value,const char*,int,... -> mrb_value | ** 3rd fix like mruby  文字列を取得する関数があるのは分かったけど、 ArrayとかHashとかユーザ定義クラスが欲しいんだけど  そんな貴方に朗報です。 [[./sample_hello_mruby/hello_fix3.c][call String.new into c world]] | mruby c function | args -> return | |------------------+-------------------------------| | mrb_class_get | const char* -> struct RClass* |  ほかにも色々呼び出せます - mrb->class - Array - Hash - String - ... ** 4th fix like mruby  そろそろ本気だしていいですか by D○C○M○ [[./sample_hello_mruby/hello_fix4.c][String concat to other String]] * hello mirb world  で、mruby c apiで頑張って書いたコードを mrubyだけで書いてみると、あらこんなに簡単に #+BEGIN_SRC ruby p "hello" + " world" #+END_SRC ** mirb(mruby版irb)で実効 #+BEGIN_QUOTE 補足 なんとなくエムイルブと発音してましたが、 tweet上では、irbってアイアールビーじゃない?とか ミルブのほうが!っとご意見が #+END_QUOTE * 関西Ruby会議05 2013年8月31日(土) たのCいmruby(決定) * 終わりに ** 来週のruby関西は *** 組み込みとDiscoveryと私 **** 初めてのLチカ! ***** そろそろHaskell使ってもいいですか? ****** の3本でお送りいたします * ご清聴ありがとうございましたm(_ _)m