Ruby勉強会@関西-7(京都)
参加しています。リアルタイムでメモしています。
YARV: Yet Another Ruby VM ささだこういちさん
- 「やるぶ」って発音してる。
- 地球に優しいプレゼン。Simple is Best。技術寄りかも。Rabbitを使ってないけど文句言わない。
- Ruby遅い→Ruby捨て。Rubyオソイヨー。Ruby2.0Riteマダー? 現在1.9.0開発中。スパゲッティーな評価器。
- 他の言語はどうしているの?バイトコード(仮想マシン)処理系が適当。
- ByteCodeRuby。現状のRuby処理系よりも遅かった→やめ。
- ObjectManager(GC)、Parser/Compiler、Evaluator。Compiler、EvaluatorあたりがYARV。
- YARVの概要。単純なスタックマシン。既存のRubyと連携して機能を利用。
- 国産は重要。「どうやって作るのか?」に注力。
- YARVをRubyに組込みます。ネイティブスレッドに対応、Multi-VMインスタンス。
- 2004年度目標設定。基本性能2倍。JITコンパイラでは5倍。Ruby2.0処理系Riteの公式実装にしたい。
- Rubyのパーサ。既存のものを利用。コンパイラ。構文木→YARV命令列に変換。
- 例外。なるべくsetjmpをしないようにしている。
- VM生成系。簡単なDSL。CISC。
- Cのひとつの関数で5万行。オペランド・命令融合は組合せが爆発。I-cacheに載らなくなる。
- 現状。ふつうの機能はほぼ実装。リフレクションなどは動かない(eval、module_eval、instance_eval、Binding)。
- スレッドモデルの検討。まるばつさんかくは外国の方には分かってもらえないらしい。
- Multi-VMインスタンス。
- 性能。tDiary遅い。
- FAQ。「らびー」って何? 「るびー」です。
- 質疑応答。最適化のためのプロファイラ。VMレジスタへのアクセス頻度、命令実行頻度、オペランド出現頻度、命令連結度(bigram)。インライン展開。できると思うけど、再定義については? つまりは現在はまだ。ブロックインライン展開はやりたい。クロージャ。
RGSSの世界 サイロス誠さん
- RGSSとは? 背景。RPGツクール。RPGを簡単につくれる。RPGツクールXP。RGSS=ゲームエンジン。Rubベース。Ruby Game Scripting System。オブジェクト指向でゲーム製作。
- 直感的ゲームプログラミング。とっかかりがラク。
- カプセル化。スプライト。ウィンドウ。ゲームパッド。
- 簡単な実例。RPG::Weather.new。雨が降った。
- 付属エディタ。構造体クラス。
- 星空。多重スクロールのデモ。
- 見てわかる。教育用。某大学。
- ゲームだけじゃない。MP3プレーヤー。
- 問題。遅い。1秒間に20回くらいしか画面更新できない。開発環境が有償。1万円近くする。
- ハッカーの顛末。
- デバッグってどうやってやるんでしょう。pって使えるのかな。どうやらJavaScriptのalertみたいな感じみたい。
Ruby初級者向けレッスン第4回 かずひこさん
$ uname -a NetBSD tillet.example.com 2.1 NetBSD 2.1 (TILLET) #10: Wed Nov 23 16:10:43 JST 2005 s-tanaka@tillet.example.com:/usr/src/sys/arch/i386/compile/TILLET i386 $ ruby --version ruby 1.8.2 (2004-12-25) [i386-netbsdelf]
上記環境で以下のプログラムを動かすと
def foo foo end foo
次のように
$ ruby ./sample5.rb zsh: illegal hardware instruction (core dumped) ruby ./sample5.rb $ gdb -q /usr/pkg/bin/ruby18 ruby18.core (no debugging symbols found)...Core was generated by `ruby18'. Program terminated with signal 4, Illegal instruction. Reading symbols from /usr/libexec/ld.elf_so...(no debugging symbols found)... done. Loaded symbols for /usr/libexec/ld.elf_so Reading symbols from /usr/pkg/lib/libruby18.so.18...done. Loaded symbols for /usr/pkg/lib/libruby18.so.18 Reading symbols from /usr/lib/libpthread.so.0...done. Loaded symbols for /usr/lib/libpthread.so.0 Reading symbols from /usr/lib/libcrypt.so.0...done. Loaded symbols for /usr/lib/libcrypt.so.0 Reading symbols from /usr/lib/libm387.so.0...done. Loaded symbols for /usr/lib/libm387.so.0 Reading symbols from /usr/lib/libm.so.0...done. Loaded symbols for /usr/lib/libm.so.0 Reading symbols from /usr/lib/libc.so.12...done. Loaded symbols for /usr/lib/libc.so.12 #0 rb_eval (self=134728120, n=0x806da6c) at eval.c:2667 2667 { (gdb) bt #0 rb_eval (self=134728120, n=0x806da6c) at eval.c:2667 #1 0x48084702 in rb_call0 (klass=134733080, recv=134728120, id=9913, oid=134666860, argc=0, argv=0x0, body=0x806da6c, nosuper=0) at eval.c:5650 #2 0x48084ce7 in rb_call (klass=134733080, recv=134728120, mid=9913, argc=0, argv=0x0, scope=2) at eval.c:5743 #3 0x4807fef1 in rb_eval (self=134728120, n=0x806da6c) at ruby.h:631 #4 0x48084702 in rb_call0 (klass=134733080, recv=134728120, id=9913, oid=134666860, argc=0, argv=0x0, body=0x806da6c, nosuper=0) at eval.c:5650 #5 0x48084ce7 in rb_call (klass=134733080, recv=134728120, mid=9913, argc=0, argv=0x0, scope=2) at eval.c:5743
落ちました。
ruby-1.8.4-preview1だったら
$ /tmp/new/bin/ruby ./sample5.rb ./sample5.rb:2:in `foo': stack level too deep (SystemStackError) from ./sample5.rb:2:in `foo' from ./sample5.rb:5
大丈夫ですね。いつの間にかきっとバグが直っているんでしょう。