May the Source Be with You - 高見龍"once you sart digging around in someone else’s code base,...

68
May the Source Be with You Chimpr Learning Ruby by Reading Ruby Source Code 12128日星期六

Transcript of May the Source Be with You - 高見龍"once you sart digging around in someone else’s code base,...

  • May the Source Be with YouChimpr

    Learning Ruby by Reading Ruby Source Code

    12年12月8日星期六

    http://www.flickr.com/photos/ohoski/http://www.flickr.com/photos/ohoski/

  • 12年12月8日星期六

  • I’m a Flash guy

    ≈ 8 years

    12年12月8日星期六

  • also a Ruby guy

    ≈ 4 years

    12年12月8日星期六

  • but not a C guy, yet!

    12年12月8日星期六

  • Ruby > Rails

    12年12月8日星期六

  • share Ruby learning experiences in OpenFoundry and some developer party.

    12年12月8日星期六

  • a SHOW-OFF person!

    12年12月8日星期六

  • Learning Ruby by Reading Ruby Source Code

    12年12月8日星期六

  • - why read source code?- how o sart?- anything ineresting?- wrie a simple Ruby Exension with C.

    12年12月8日星期六

  • Why read source code?

    12年12月8日星期六

  • see how the Ruby Core Team wrie Ruby

    12年12月8日星期六

  • fun :)

    12年12月8日星期六

  • "once you sart digging around in someone else’s code base, you’ll learn a lot about your own strengths and weaknesses" - Ruby Best Practice

    http://blog.rubybestpractices.com/posts/gregory/005-code-reading-stdlib.html

    12年12月8日星期六

    http://blog.rubybestpractices.com/posts/gregory/005-code-reading-stdlib.htmlhttp://blog.rubybestpractices.com/posts/gregory/005-code-reading-stdlib.htmlhttp://blog.rubybestpractices.com/posts/gregory/005-code-reading-stdlib.htmlhttp://blog.rubybestpractices.com/posts/gregory/005-code-reading-stdlib.html

  • pre-requirement?

    12年12月8日星期六

  • C language

    12年12月8日星期六

  • curiosity and enthusiasm

    12年12月8日星期六

  • What if I don’t have any skill of C?

    12年12月8日星期六

  • Just learn it :)

    12年12月8日星期六

  • How o Sart?

    12年12月8日星期六

  • get Ruby source code

    download from Ruby websie:http://www.ruby-lang.org/en/

    or from github:https://github.com/ruby/ruby

    12年12月8日星期六

    http://www.ruby-lang.org/en/http://www.ruby-lang.org/en/https://github.com/ruby/rubyhttps://github.com/ruby/ruby

  • Ruby Source Code:- *.c + *.h- *.rb (Sdlib)

    12年12月8日星期六

  • Tools- Vim

    12年12月8日星期六

  • Ruby 1.9.2 p290

    12年12月8日星期六

  • Quick Browsing.. :)

    12年12月8日星期六

  • what's a Ruby object?

    12年12月8日星期六

  • sart from basic structure, like Object, Class, String, Array, Hash, Basic...

    12年12月8日星期六

  • Object = RObject, Class = RClass,String = RString, Array = RArray, Hash = RHash, Basic = RBasic

    12年12月8日星期六

  • “ruby.h”

    12年12月8日星期六

  • “object.c”

    12年12月8日星期六

  • Init_XXXX

    12年12月8日星期六

  • class.c#350-354

    all Class’s class is Class!

    12年12月8日星期六

  • class.c#556

    rb_define_module()

    12年12月8日星期六

  • class.c#1170

    rb_define_method()

    12年12月8日星期六

  • Object.c#2556~2560Integer(), Float(), String(), Array() are all global methods

    12年12月8日星期六

  • = rb_define_module_method on kernel

    = rb_define_private_method on kernel + rb_define_singleton_method on kernel

    class.c#1332

    rb_define_global_function()

    12年12月8日星期六

  • “new”

    12年12月8日星期六

  • class A def initialize puts "hello" endend

    a = A.new

    12年12月8日星期六

  • object.c#2624new -> rb_class_new_instance -> rb_obj_alloc -> rb_obj_call_init

    12年12月8日星期六

  • o_s v.s o_str

    12年12月8日星期六

  • String.c#7488rb_define_method(rb_cString, "to_s", rb_str_to_s, 0);rb_define_method(rb_cString, "to_str", rb_str_to_s, 0);

    12年12月8日星期六

  • Array.c#4504rb_define_alias(rb_cArray, "to_s", "inspect");but no `to_str`

    12年12月8日星期六

  • proc.c#2105how to execute a Proc?- proc.call- proc[]- proc === 123- proc.yield

    12年12月8日星期六

  • object.c#2592- attr- attr_reader- attr_writer- attr_accessor

    12年12月8日星期六

  • push v.s

  • array.c#709 (

  • array.c#742 (push) static VALUErb_ary_push_m(int argc, VALUE *argv, VALUE ary) { rb_ary_modify(ary); while (argc--) { rb_ary_push_1(ary, *argv++); } return ary;}

    12年12月8日星期六

  • gc.c#3214-3215

    Object’s ID

    12年12月8日星期六

  • gc.c#2865-2867

    How Symbol works?

    12年12月8日星期六

  • people = { "Eddie" => ["green", "[email protected]"], "Joanne" => ["yellow", "[email protected]"]}

    people.map { |name, (color, email)| puts [name, email]}

    12年12月8日星期六

    mailto:[email protected]:[email protected]:[email protected]:[email protected]

  • people = { "Eddie" => ["green", "[email protected]"], "Joanne" => ["yellow", "[email protected]"]}

    people.map { |name, (_, email)| puts [name, email]}

    parse.y#8277-8299 shadowing_lvar_gen()

    12年12月8日星期六

    mailto:[email protected]:[email protected]:[email protected]:[email protected]

  • vm_eval.c#224

    method_missing

    12年12月8日星期六

  • ineresting naming :)

    12年12月8日星期六

  • ext/ripper/ripper.c#15890rb_intern, rb_intern2, rb_intern3

    12年12月8日星期六

  • array.c#325rb_ary_new, rb_ary_new2, ary_new, rb_ary_new3, rb_ary_new4

    12年12月8日星期六

  • Simple Ruby Exension from Scrach

    12年12月8日星期六

  • Conclusion

    12年12月8日星期六

  • from basic structure

    12年12月8日星期六

  • and don’t be afraid

    12年12月8日星期六

  • References

    12年12月8日星期六

  • Rubyソースコード完全解説by 青木峰郎

    http://i.loveruby.net/ja/rhg/book/

    12年12月8日星期六

    http://i.loveruby.net/ja/rhg/book/http://i.loveruby.net/ja/rhg/book/

  • Ruby Under a Microscopeby Pat Shaughnessy

    http://patshaughnessy.net/ruby-under-a-microscope

    12年12月8日星期六

    http://patshaughnessy.net/ruby-under-a-microscopehttp://patshaughnessy.net/ruby-under-a-microscope

  • still not finish..

    12年12月8日星期六

  • Ian Ruotsala

    12年12月8日星期六

    http://www.flickr.com/photos/ian_ruotsala/http://www.flickr.com/photos/ian_ruotsala/

  • Chimpr

    Hope can become a Jedi Master someday :)

    12年12月8日星期六

    http://www.flickr.com/photos/ohoski/http://www.flickr.com/photos/ohoski/http://www.flickr.com/photos/ohoski/

  • おわりthank you all :)

    12年12月8日星期六

  • any question?

    12年12月8日星期六

  • 高見見龍龍Conacts

    photo by Eddie

    Websie

    Blog

    Plurk

    Facebook

    Google Plus

    Twiter

    Email

    Mobile

    http://www.eddie.com.tw

    http://blog.eddie.com.tw

    http://www.plurk.com/aquarianboy

    http://www.facebook.com/eddiekao

    http://www.eddie.com.tw/+

    https://twiter.com/#!/eddiekao

    [email protected]

    +886-928-617-687

    12年12月8日星期六

    http://www.eddie.com.twhttp://www.eddie.com.twhttp://www.eddie.com.twhttp://www.eddie.com.twhttp://blog.eddie.com.twhttp://blog.eddie.com.twhttp://www.plurk.com/aquarianboyhttp://www.plurk.com/aquarianboyhttp://www.facebook.com/eddiekaohttp://www.facebook.com/eddiekaohttp://www.eddie.com.tw/+http://www.eddie.com.tw/+https://twitter.com/#!/eddiekaohttps://twitter.com/#!/eddiekaomailto:[email protected]:[email protected]