Post on 19-Aug-2020
Apr 23,2013QCon Tokyo 2013
mruby の今そして目指すもの邑中 雅樹 / 合同会社もなみ屋
1
自己紹介
Apr 23,2013QCon Tokyo 2013
あらすじ• mrubyとは (“組込み”とは?)
• mrubyができること (CRubyや他の言語とくらべて)
• mrubyの現在
• mrubyの開発体制 (git, github, fork, pull request)
•統計情報で見る mruby
• mrubyの未来
2
自己紹介
Apr 23,2013QCon Tokyo 2013
講演者自己紹介
•所属: 合同会社もなみ屋
•プログラマ,ソフトウェア系の技術解説文書の執筆
•得意分野: 組込みシステムのオープンソース適用
• GNU debugger, TOPPERS,mruby
3
自己紹介
Apr 23,2013QCon Tokyo 2013
講演者の属性Ruby度数
組込み度数4
自己紹介
Apr 23,2013QCon Tokyo 2013
いろいろ書いています.
5
自己紹介
Apr 23,2013QCon Tokyo 2013
組み込みネットへの掲載
6
自己紹介
Apr 23,2013QCon Tokyo 2013
逆質問
• Ruby系 or 組込み系?
• git を常用なさっていますか?
•英語でのコミュニケーション,へっちゃらですか?
7
Feb 21,2013軽量ruby実践レポート&セミナー
mruby とは?
8
mrubyとは?
Apr 23,2013QCon Tokyo 2013
mruby とは?
• Embeddable
•Minimal Implementation
• Considerable active committers have “M” as their name initials, somehow.
• Some major committers have Matsumoto as their family name, somehow. (note: They are not relatives)
•Matz
https://github.com/mruby/mruby/wiki/FAQ-%28General-Topic%29
9
mrubyとは?
Apr 23,2013QCon Tokyo 2013
“組込み”の2つの意味
10
mrubyとは?
Apr 23,2013QCon Tokyo 2013
mrubyが意味する組込み
• TOPPERS → 機器組込みにしか使いません.
• VBA → アプリケーションの拡張にしか使いません.
•mruby → 両方で使えます.11
Feb 21,2013軽量ruby実践レポート&セミナー
mrubyにできること
12
mrubyにできること
Apr 23,2013QCon Tokyo 2013
Ruby言語の実行
• Rubyスクリプト
• C言語APIコール (e.g.ネイティブメソッドとのバインド)
• RITEバイトコード(事前コンパイル)
13
mrubyにできること
Apr 23,2013QCon Tokyo 2013
RUBYスクリプトの実行
•mruby コマンドによるバッチ実行
•mirb コマンドによる対話的実行
mruby -e ‘p “Hello Ruby World”;’
> p "Hello Ruby World""Hello Ruby World" => "Hello Ruby World"
(15)
14
mrubyにできること
Apr 23,2013QCon Tokyo 2013
MRB形式の実行p “Hello Ruby World” mrbc (コンパイラ)
RITE0009000000090000MATZ 000900000000007100010000 215300000071SC000100030004469F00000004008000060100003D008000A00000004A9C2200000001110010Hello Ruby World5849000000010001p324100000000
mrubyHello Ruby World
file: hello.rb
file: hello.mrb
stdout
15
mrubyにできること
Apr 23,2013QCon Tokyo 2013
C配列形式MRBの実行p “Hello Ruby World” mrbc (コンパイラ)
const char hello[] = {0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x4d,0x41,0x54,0x5a,0x20,0x20,0x20,0x20,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xcb,0x22,0x00,0x00,0x00,0x42,0x53,0x43,0x00,0x01,0x00,0x03,0x00,0x02,0x46,0x9f,0x00,0x00,0x00,0x04,0x00,0x80,0x00,0x06,0x01,0x00,0x00,0x3d,0x00,0x80,0x00,0xa0,0x00,0x00,0x00,0x4a,0x9c,0x22,0x00,0x00,0x00,0x01,0x11,0x00,0x10,0x48,0x65,0x6c,0x6c,0x6f,0x20,0x52,0x75,0x62,0x79,0x20,0x57,0x6f,0x72,0x6c,0x64,0x58,0x49,0x00,0x00,0x00,0x01,0x00,0x01,0x70,0x32,0x41,0x00,0x00,0x00,0x00,
};バイナリ
Hello Ruby World
file: hello.rb
file: hello.cstdout
Cコンパイラ
libmruby.aVM呼出コード
file: main.c
16
mrubyにできること
Apr 23,2013QCon Tokyo 2013
(詳しい方への情報)
• cdump(C言語APIを呼び出す関数のソースコード)形式の出力はサポートされなくなりました.
•デバッガサポートなどが困難なため
• RITEバイトコードがバイナリ形式になりました.
•今年に入ってからの,できごとです.
17
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mrubyスクリプトの埋め込み方
•【Q】良いサンプルはありませんか
18
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mrubyスクリプトの埋め込み方
•【A】mruby のツール自身がサンプルです.
•言い換えると,mruby(の一部)はmrubyで記述されています.
19
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mrubyの記述言語はmruby
mrubyコア(C言語)
Cコンパイラ
mrbc(mrubyコンパイラ)
First step: mrbcの生成
libmruby_core.a
mrbc.c(C言語API)
Cコンパイラ
mrubyコア(C言語)
mrubyコア(C言語API)
20
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mrubyの記述言語はmrubySecond step: libmruby.a の作成
mrblib(mruby)
mrbc
C言語形式mrb
Cコンパイラ
オブジェクト
libmruby.a
libmruby_core.a
アーカイバ
mrblib(mruby)
mrblib(mruby)
21
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mrubyの記述言語はmrubyThird step: mirb, mruby の作成
Cコンパイラ mruby
libmruby.a
mruby.c(C言語API)
mirb.c(C言語API)
Cコンパイラ mirb
22
mrubyにできること
Apr 23,2013QCon Tokyo 2013
記述言語がmrubyなので
• Ruby で書けば,mruby の拡張ができます.
•効率や複雑な機能が必要なら,C言語での記述も可
•mruby の品質は,mruby のツールが動くことで実証されます.
•mruby の構成は,かなり柔軟に変えられます.
[ある程度は]
[ある程度は]
23
mrubyにできること
Apr 23,2013QCon Tokyo 2013
Configurable/Pluggable
•必要な機能は,削れます.
•標準入出力,時間,正規表現,などなど
•いくつかの機能は,差し替えができます.
•例) Pluggable Regexp : 正規表現ライブラリの差替え口
24
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mrbgems
•機能のパッケージ化
• Ruby の gems に類似.
•相違点は静的コンフィギュレーションであること
•小規模の機器組込み分野では,非常に好ましい
•アプリ組込み分野では…(DLL化など要る…かも)
25
mrubyにできること
Apr 23,2013QCon Tokyo 2013
mruby にできること
•既存システムへの組込み
•環境は単一の構造体 == 複数の実行環境を持てる.
•小規模環境への対応
• 1MB以下のメモリ専有量
•OSが提供する機能からの独立
26
mrubyにできること
Apr 23,2013QCon Tokyo 2013
緩やかなOSSライセンス
•MITライセンス
•OSSライセンスの中では最も緩い部類
• JavaやCRubyが採用しているライセンスは,組込み製品に採用しづらい.
27
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
互換性確保の問題
• CRubyと微妙に互換性がない
•ライブラリが決定的に少ない
• ISO Ruby とも微妙に互換性がない
•文書化が後れていて,Matz に聞かないと判らない
28
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
バイトコード周り
•バイトコードは,容量削減目的でしかない
• “Write Once Run Anyware” ではない
•セキュリティについては考慮されていない
•バイトコードに関しては,組込みJavaの競合ではない.
(30)
29
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
デバッガ
•三昔前のBASIC並み
•コールスタックのダンプすらできない.(hack はある)
•バイトコードにデバッグ情報が無い
遠くない将来に解決(たぶん)
30
Feb 21,2013軽量ruby実践レポート&セミナー
(機器組込み屋から見ると)
31
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
(機器組込み屋から見ると)
•テストスイートはある → テストケース不足
•特にカバレッジ率が高くない
• C言語コードの異常系処理に不安が残る
•いわゆる”天才が書いたコード”が若干残存
•コンパイラのwarningを殲滅できていない
32
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
(機器組込み屋から見ると)
• 2013年2月13日
•おそらくint16_t の-1 を uint16_t にキャストした.
https://twitter.com/paselanpatlin/status/301590756668366848/photo/1
33
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
(機器組込み屋から見ると)
•mrubyを警告厳しくしてコンパイルすると…CC src/compar.c -> build/host/src/compar.oCC src/crc.c -> build/host/src/crc.oCC src/dump.c -> build/host/src/dump.osrc/dump.c: In function ‘mrb_write_irep’:src/dump.c:685: warning: comparison between signed and unsignedsrc/dump.c:691: warning: comparison between signed and unsignedsrc/dump.c: In function ‘mrb_dump_irep’:src/dump.c:714: warning: comparison between signed and unsignedsrc/dump.c:720: warning: comparison between signed and unsignedsrc/dump.c: In function ‘mrb_bdump_irep’:src/dump.c:745: warning: comparison between signed and unsignedsrc/dump.c:749: warning: comparison between signed and unsignedCC src/enum.c -> build/host/src/enum.oCC src/error.c -> build/host/src/error.oCC src/etc.c -> build/host/src/etc.oCC src/gc.c -> build/host/src/gc.osrc/gc.c: In function ‘mrb_obj_alloc’:
電光掲示板を笑えない
34
mrubyにできていないこと
Apr 23,2013QCon Tokyo 2013
対策 : テストケース拡充中
• ISO Ruby 準拠テストの拡充
•機器組込み適用を重点にしている fork の登場
• http://support.monami-ya.com/mruby/
• C言語APIのユニットテストを重点的に行う
35
Feb 21,2013軽量ruby実践レポート&セミナー
mrubyの開発体制
36
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
githubによるホスティング
•本家は http://github.com/mruby/mruby/ に存在
•まつもとゆきひろ (Matz)氏が管理
•多数の fork が存在
•主に,本家へのコントリビュート目的
37
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
githubとは?
• git を用いた開発を支援するサービス
•リポジトリストレージ,バグ追跡支援などの提供
•オープンソース製品の開発目的なら無償
•差分を投げ合う際の支援機能 (pull request)
38
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
コミュニケーション言語
• Basically, English ...
39
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
開発者間の連絡手段
•連絡手段は github で閉じている
• pull request と issue track を利用
•メーリングリストは無い
•効率的 ⇔ 雑談や愚痴は不能
40
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
開発者間の連絡手段
•稀に,Twitter を使ったやりとりも...
...日本語(安堵)
41
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
バージョン1.0はいつ出るの?
• github 版には,安定版の概念は(今のところ)無い
•サグラダ・ファミリア,賽の河原
(C)Wikipedia
安定版が出なけれ
ば
ビジネスでは使え
ない!
42
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
バージョン1.0はいつ出るの?
•「ビジネス方面のことは,NPOに任せる (意訳)」「github版は突っ走る(意訳)」
• “mrubyの夕べ”セミナーにて (2013年1月28日)
43
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
安定版は本家以外に期待
•NPO法人 軽量Rubyフォーラム
•製品バンドルのソースコード
•各種 fork プロジェクト
44
mrubyの開発体制
Apr 23,2013QCon Tokyo 2013
github版からのスピンオフ
• IIJ版 - ネットワーク系に強み http://github.com/iij/mruby/
•mruby-android - chipKIT Max32 (PIC32)への移植http://github.com/kyab/mruby-andorid/
•mruby-jit - JITコンパイラ.3~5倍の高速化.https://github.com/miura1729/mruby/
その他,書ききれないほど45
Feb 21,2013軽量ruby実践レポート&セミナー
まとめ
46
まとめ
Apr 23,2013QCon Tokyo 2013
結局,使えるの?
•不満は,あります.言っていてはキリがありません.
•組込み製品にすぐ採用するのは,ちょっと不安かな…
(IIJさんくらいの技術力があれば話は別)
•私見: 導入を検討するレベルには到達しています.
47
Feb 21,2013軽量ruby実践レポート&セミナー
USE MRUBY NOW !
48
まとめ
Apr 23,2013QCon Tokyo 2013
COPYRIGHT NOTICE
•本プレゼンテーションに含まれる各製品名は,各社の商標または登録商標です.
•本プレゼンシートには,http://honya.nyanta.jp/ で配布している「ほにゃ字」を使っています.
49