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

May the Source Be with You - 高見龍"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

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 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]