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と連携して機能を利用。
  • 国産は重要。「どうやって作るのか?」に注力。
  • YARVRubyに組込みます。ネイティブスレッドに対応、Multi-VMインスタンス
  • 2004年度目標設定。基本性能2倍。JITコンパイラでは5倍。Ruby2.0処理系Riteの公式実装にしたい。
  • Rubyのパーサ。既存のものを利用。コンパイラ構文木YARV命令列に変換。
  • 例外。なるべくsetjmpをしないようにしている。
  • VM生成系。簡単なDSLCISC
  • 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

大丈夫ですね。いつの間にかきっとバグが直っているんでしょう。