Skip to content

Instantly share code, notes, and snippets.

@ujihisa
Created March 12, 2011 05:48
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ujihisa/867071 to your computer and use it in GitHub Desktop.
Save ujihisa/867071 to your computer and use it in GitHub Desktop.

Ruby初級者が中級者に進化するための3の方法

ujihisa

自分のRuby力を測定

Ruby使いのレベル3

  • レベル1
    • リファレンスマニュアルなどを読みながら、動作する小規模のコードが書ける
    • 無限ループにwhile (true)と書き、たまにdoもつけてエラーになる
  • レベル2
    • 普段はMRI 1.9.3を使用し、JRubyやRubiniusも適切なシーンで使い分ける
    • C実装のソースを読んでよくわからない組み込みのメソッドの挙動を確認する
  • レベル3
    • 1日に3回はRubyにコミットする
    • 修正済みの問題へのバグ報告を聞いたとき、どのリビジョンで修正されたか即座に思い出せる

レベル2へ

手っ取り早く移行する3の方法

  • 処理系標準変更
  • RubyからCへ
  • パッチ

処理系標準変更

  • 1.9.2は確かに便利

  • ぬるま湯から出る

      $ ruby -v
      ruby 1.9.3dev (2011-...
    

他のもどうぞ

  • rbxのfibはmriの5倍くらい速い
  • ノー互換性
    • パッチチャンス (後述)

RubyからCへ

r = Random.new
p r.rand

Random#randは...?

  • random.c
  • rb_define_method(rb_cRandom, "rand", random_rand, -1);
  • static VALUE random_rand(int argc, VALUE *argv, VALUE obj)

一発で引く

$ gem install impl
$ impl ~/git/ruby193 'Random#new'
...!

Vim連携

$ impl -c ~/git/ruby193 >> tags

あとはVimのTag検索機能で。

パッチ

  • 問題が見つからないはずがない
  • testを書いてパッチも書いて挑戦
  • よくわからなければこの部屋にいるznzさんあたりに聞く

おしまい

Q?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment