読者です 読者をやめる 読者になる 読者になる

Rubyコミッターになりました。

卜部さんの推薦により、Rubyコミッターになることができました

MacRuby と RubyMotion の開発に携わっていた際に Rubyソースコードは良く読んでいたりしたので、そこでの知見を生かしていければと思っています。

当面は自分が送付したPull Requestを処理していこうと思います。

macOS 上で Ruby のパフォーマンスを計測する

macOS では、ターミナルから iprofiler を経由してコマンドを実行することでパフォーマンスを計測することができる。

$ iprofiler -timeprofiler ./a.out
iprofiler: Preparing recording resources
iprofiler: Profiling process 66908 (a) for 10 seconds
iprofiler: Target pid has died. Ending recording.
iprofiler: Saving session...
iprofiler: Session saved at /Users/watson/tmp/a.dtps

実行すると a.dtps というファイルができるので、ターミナルで open a.dtps と実行するか Instruments.app で開く。

Ruby のパフォーマンスを計測する場合には以下のように実行する。最初にテスト用のコードを用意しておく。

$hash1 = {}
1000.times { |i| $hash1[i.to_s] = i }
$hash2 = {}
1000.times { |i| $hash2[(i*2).to_s] = i*2 }

5000000.times do
  $hash1 == $hash2
end
$ iprofiler -timeprofiler /usr/bin/ruby bench.rb
iprofiler: Preparing recording resources
iprofiler: Profiling process 67727 (ruby) for 10 seconds
iprofiler: Target pid has died. Ending recording.
iprofiler: Saving session...
iprofiler: Session saved at /Users/watson/tmp/ruby.dtps

どうやら実行ファイルを /usr/bin/ruby のように絶対パスで指定しないとエラーになるようだ。

$ iprofiler -timeprofiler ruby bench.rb
iprofiler error: 'ruby' cannot be launched

計測結果は以下のような感じで表示されるが、シンボルが見つからないものはアドレス番地が表示されるだけ。 170306-0001.png (648.1 kB)

Rubyソースコードをダウンロードして自前でビルドするとずいぶん見栄えが良くなる。

$ iprofiler -timeprofiler ./miniruby ~/tmp/bench.rb

170306-0005.png (591.0 kB)

関数名部分をクリックすると、ソースコードを見ながらどの部分が実行に時間がかかっているかわかる。

170306-0006.png (485.8 kB)

以下のアイコンをクリックすると表示を切り替えることができる。 instruments-icons.png (24.0 kB)

アセンブリも表示すると以下のようになる。 170306-0007.png (931.9 kB)

退職のお知らせ

4 年半にわたって RubyMotion の開発・ユーザーサポート等に携わってきましたが、2 月末日をもって離れることになりました。前身となるMacRuby の開発からですと 7 年以上になり、よく飽きずにやってきたなと思います。

 

RubyMotion は我ながらとても良いプロダクトだと思っていますが、Swift が Apple からリリースされて以来すっかり押さえ込まれてしまった、というのが離れることになった簡単な理由です。

 

のんびり次の仕事を探していきます。

 

【追記】お仕事をくださる方がいらっしゃいましたら、以下の職歴をご参照ください m(_ _)m

www.wantedly.com