- 2013-01-28 17:00〜19:30
- 神保町 IIJ 17F 大会議室
- http://partake.in/events/36879645-7365-4dcc-ac80-60fdcbee1cfb
- http://togetter.com/li/446585
朝起きたら相模原は雪がうっすら積ってギュッギュ音がしてたけど、都心はいつもどおり灰色の景色。
10分前に会場到着。
mruby / @yukihiro_matz
[2013-01-28 17:04]
- 技術的な話をするのは初めてなのでうれしい。
- em.rubyと発音して
- mrubyのm: 開発者にまつもとさんがおおい.
- 組み込み: いろいろ定義はあるけど、メモリがすくない、というような環境。いまではPCなみ。ソフトの割合が増えてきた。
- アーキテクチャにおける主従関係: cruby:rubyが主。mruby:rubyが従。
- 組み込み向けのpythonもあるけど、どっちもおなじ人が書くのはまれ。
- 組み込みAPI(グローバル変数はつかわない、rubyの外の世界をこわさない)、移植性(posix以外でも。C99。VisualCでも(for ゲーム業界)。OSなしでも。IOやsocketはコアにはいってない。つかいたいときはextensionで。)、構成可能性、ソフトリアルタイム(人間に気づかれない程度に。GCで長く止まらないように)
- お金の問題よりもまつもとさんのモチベーションの問題: 地域イノベーション創出研究開発事業に。2年プロジェクト。
- クラスライブラリはrubyで書いてあるところがcrubyとちがうところ。
- mrb_open()でVMがとれる。mrb_state構造体。mrb_close()でおしまい。
- mrb_load_string()で実行。putsとpとprintぐらいはIOがつくってある。デバッグできないので。
- RiteVMというコードネームだった。32bitワードマシン。3オペランド。レジスタ0(R0)はself。レジスタウィンドウっぽくなってるが実際にはスタック。
- 構造体渡しでmrb_value。mrb_float(double),void*,mrb_int,mrb_symのunionとtype。単精度でいいならfloatにすると32bitになるけお負けた気がする→NaN boxingを選べる。NaNは冗長な表現(48bit)。32bitポインタをつっこめる。ちょっとだけ速くなる。C99を逸脱するがコンパイルオプションなのでokok。
- luaをすごく参考している。欠点: luaの処理系は好きでマネしたけど言語がちがうし。言語としてのluaはできのわるいjavascriptみたいでしんどい。luaはコンパクトな言語でrubyのリッチさとちがう。→ CRubyAPIににせた。
- C APIでのブロック呼出:VMの再帰呼出はしたくない。crubyではスタック-ヒープ間のコピーしてたりしてる。fiberとかを実装するときを考えて。eachなどのブロックはrubyで実装するように。
- MS-DOSでも動くはずだがC99があるかどうか。i-tronでもうごく。
- rubyチップ評価ボードで動作(OSはないけど動く)
- MRB_USE_IV_SEGLIST:メモリをくうハッシュテーブルのかわりにseggmented listをつかうオプション。
- 今は正規表現は実装されてない。
- DISABLE_TIME: 時刻はポータブル(つかえない環境もある)じゃないので外せるようになっている。
- bin/mrbc:rubyのプログラムを内部表現にコンパイル→Cの巨大配列になる。→ bin/mrbtest (なんかめんどくさいらしい。ブートストラップか?)
- Makefileを書いてたがshellのおばけになってCMakeにしたがたいへになってcrubyとrakeでビルドするようになった。
- mrbgems: ライブラリの組み込み。mrubyには動的ロードの仕組みがないのでコンパイル時にとりこむ仕組み。ドイツの人がつくった。conf.gem '/path/to/mruby-gem' → build_config.rb。gitからコードをとってこれる。
- mrbgems管理: mgem. mgem update, mgen listで30ちょいでてくる。(まつもとさんがなにもしなくてもmrubyがせいちょうしている。レビューしてマージボタンをおすだけに退化している..)
- GC:実家に帰ってるとお母さんが勝手に整理してくれるアレ。
- GC性能: スループット(総実行時間中のGCの割合。それなりに重要)・最大停止時間(組み込みではこっちの方が重要な場合がおおい)
- GCアルゴリズム: mark-and-sweep + incremental + 保守的GC(Cの関数でつかっているオブジェクトを生きてるとする。crubyではCのスタックをポインタの配列としてみるが移植性はない。mrubyではアリーナに登録させる。関数の終りで解放する。(固定配列なのでarena overflowの危険。mrb_gc_arena_save/_restor関数でサイズを戻せる)。古いOCamlでは変数にマクロで宣言させる方法だったが忘れることも。)。たいくつな会議中に3時間でつくった!
- インクリメンタルGC
- スイープ時間: 生成されたオブジェクト数に比例
- マーク時間:生きているオブジェクト数に比例
- GC時間をこまぎれににしてキューを管理する。たりなくなる前から動作する。
- 停止時間は短かくなるがスループットはおちる。
- GC時間が
- 世代別GC
- リメンバードセット(古いのから新しいのを参照しているとき) + ライトバリア(インクリメンタルGCでつくりこみ済み)
- 古いオブジェクトもたまにはスキャンしないといけない。
- 最大停止時間は改善しない。
- mrubyつかわれた例:
- 太陽光発電管理システム。使用期間が10年とか長いのでPCだともたない。httpサーバもmrubyで。socketはIIJから。まつもとさんはまだ実物をみたことがない。
- 自販機メンテシステム(富士電気)。中国人エンジニアが一定のルールにしたがってrubyで書いたものをルールベースでCに変換して組み込んでたのをmrubyにしてみた(プロトタイプ)。
- ruby対応インテリジェントルータ mruby/NetBSD? Oauthも。
- 教育用ボードコンピュータ: ルネサスのチップ(ILC)。128KBしかメモリがない。倉庫番がうごく。ポケコンbasicのノリ。
- apacheモジュール: apatchを制御するモジュール。
- rubyはつくってからひろまるのに10年くらいかかったのに、mrubyのスピード感はすごい。
- クライアントサイド:
- mruby to javascriptコンバータもある。LLVMのバックエンドを書いて実現。
- NaCl(Native Client) ブラウザのなかでうごかす。
- VxWorks:mrubyで制御してロボット命令を発行する。
- レゴ・マインドストーム: 64kBくらいしかメモリがないので、ライントレースがなんとかできたくらい。新しいのはメモリが増えたらしい。
- アプリ組み込み:
- バンダイのゲームにはいっちゃうとか?
- BとかSとか関心があるらしい。
[2013-01-28 18:23]
- Q: ソフトウェアアップデートが難しいがブラックボックスとし組込めるか?
- A: 組込む人の問題だからしらないけど、ちゃんとテストしましょうね。できないことはできない。
- Q: GCでアリーナをつかう方法を採用した理由は?
- A: OCamlの方法はコードを書く人のメンテナンスコスト(自分もふくめて)をかんがえて。アリーナあふれは場所がわかりやすいから。
- Q: 世代別GCは?
- A: 両方ともmark-and-sweep
- Q: 断片化は?
- A: オブジェクトが固定長なのでおきにくい。あとはmallocまかせ。いまのところ問題になったことはさほどない。
- Q: バージョンはないけどマイルストーンは?
- A: なにもかんがえていない。ビジネスサイドにおまかせ。github上は直線ですすむ。
[2013-01-28 18:30]
[2013-01-28 18:35]
mrubyで組込機器の開発プロジェクトを進化させよう! / 曽我部崇 @rev4t
- SEIL(ザイル)
- NetBSDをベースにしている。PCに近いアーキテクチャ。Quaggaとかオープンソースをつかっている。
- コンフィグ管理システムが大きな割合を占めている。
- 挙手:会場の1/3くらいが組み込みソフトの開発にかかわっている。
- 出会い: 2011年ごろに社内でseilにcrubyをくみこんだところから。
- 組み込みソフト開発者の苦悩:
- ファイルよみこみだけでもたいへん。エラー処理がたいへん。→ mrubyで。
- RAMは256MBくらいとちいさい。
- Quill
- バックボーン遅延測定システム。みえる化。
- プローブの開発にrubyをつかっている。
- 汎用PCをつかっていたが信頼性に問題。交換も郵送で送ってできるように。集中管理システムもつかえるように。
- crubyは大きすぎファームにはいりきらず。専用版をつくっておしこんだが,メンテコストが高くなってしまった。
- SEIL
- イベントスクリプト機能:ユーザがやりたいことを書けるように。
- つぶやくルータ: http://twitter.com/wattmeter2012 スマートOAタップでUSBでデータ取得。
- amazon S3: mruby-aws-s3 ネットワークに障害がおこったときにコンテンツをかきかえちゃうとか。
- SACM(エスエーシーエム)
- 富山の置き薬タイプのネットワーク接続サービス(2/14から)
- 機械はタダで提供、機能に課金する。
- シンプルな機能に絞り込んでいる。
- SA-W1のなかにmruby:レシピフレームワーク(設定を機器のコンフィグに変換)
- よかったこと
- 文字列処理がかんたんになった。
- firmwareをビルド(イメージファイル作成してリブート)しなくてもプログラムをさしかえできる。開発マシンにテキストエディタをいれてしまえばオンラインでも。
- 地雷
- mrubyバグつぶしに時間がかかった。今のバージョンなら安心。
- rubyのバージョンとかgemはmrubyなら開発者の選んだバージョンで動くので安心?
- サーバ/クラウド側ruby+クライアント側mruby -> インターネットでつながる。
- 軽量rubyフォーラム: http://forum.mruby.org NPO法人
- デブサミ2013 2/15: http://bit.ly/WjiDh3
[2013-01-28 19:04]
- Q: Cだと開発環境が豊富だけどmrubyならいらない?
- A: ほしいけどない。printデバッグしてる。バックトレースの機能はつくった(IIJ)。
- Q: mrubyの利点というよりはスクリプト言語全般の利点のようにおもうが? いままでスクリプトをつかってなかったのは?
- A: シェルスクリプトは内部でつかってたが本格的にはきびしい。luaも検討したがエンジニアの好みで。日本にrubyエンジニアが多いというのもある。
[2013-01-28 19:08]
Ruby PaaSであるMOGOKについて / 阿部博
- モーゴク (β版は無料だが正式版でも無料の予定,有料版の予定は未定)
- Ruby on Rails の PaaS。
- http://mogok.jp/
- 挙手: PaaSつかったひと 1/2。IaaSつかったひと 1/3
- 想像ではIaaSの方がおおいとおもってたけどPaaSの方がおおかった。
- IaaSは管理の手間がかかるが、細かい設定ができる。
- PaaSは運用管理(セキュリティパッチをあてたり)から解放される。
- 4ステップでアプリケーション公開できる。簡単!
- つかっているテクノロジ: RoR, MySQL, LXC, Nginx, Fluentd, Bundler, IIJ GIO, ...
- OSC 2103 Tokyo/Spring
- http://hirolovesbeer.ruby.iijgio.com/
- NGINXにmrubyでルーティング機能をもたせる。
[2013-01-28 19:23]
- Q: herokuとのちがい。
- A: マーケはheroku倒すぜ!とかいってる。国内にサーバがあることで差別化している。あまり違いなない。
- Q: MySQLのみ?
- A: 対応を増やすと管理コストが上がってしまうので要望ベース。herokuからの移行ツールをつくろうとしている。
- Q: RoR Sinatraをつかいたいという要望は?
- A: 検討中。
[2013-01-28 19:27]
帰りのエレベータでまつもとさんといっしょになったので、リファレンスカウントGCを採用しなかった理由を聞いたところ、循環参照を解決するために別のGCが必要になってしまうことと、最大停止時間が短かくなるのではという質問に対しては連鎖的に解放されたときに保証できなくなるということだった。
新宿に寄ってドラッグストアで買い物して帰宅。居酒屋の客引きは禁止されてるらしく、立て看板やオレンジの服を着た人がうろうろしていた。