Upgrade to Pro — share decks privately, control downloads, hide ads and more …

May the source be with you

Dbfa12cd7e1ff8b06a588609369d6e49?s=47 高見龍
December 08, 2012

May the source be with you

Learn more about Ruby through reading Ruby source code.

Dbfa12cd7e1ff8b06a588609369d6e49?s=128

高見龍

December 08, 2012
Tweet

More Decks by 高見龍

Other Decks in Programming

Transcript

  1. May the Source Be with You Chimpr Learning Ruby by

    Reading Ruby Source Code 12年12月8日星期六
  2. 12年12月8日星期六

  3. I’m a Flash guy ≈ 8 years 12年12月8日星期六

  4. also a Ruby guy ≈ 4 years 12年12月8日星期六

  5. but not a C guy, yet! 12年12月8日星期六

  6. Ruby > Rails 12年12月8日星期六

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

    12年12月8日星期六
  8. a SHOW-OFF person! 12年12月8日星期六

  9. Learning Ruby by Reading Ruby Source Code 12年12月8日星期六

  10. - why read source code? - how o sart? -

    anything ineresting? - wrie a simple Ruby Exension with C. 12年12月8日星期六
  11. Why read source code? 12年12月8日星期六

  12. see how the Ruby Core Team wrie Ruby 12年12月8日星期六

  13. fun :) 12年12月8日星期六

  14. "once you sart 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日星期六
  15. pre-requirement? 12年12月8日星期六

  16. C language 12年12月8日星期六

  17. curiosity and enthusiasm 12年12月8日星期六

  18. What if I don’t have any skill of C? 12年12月8日星期六

  19. Just learn it :) 12年12月8日星期六

  20. How o Sart? 12年12月8日星期六

  21. get Ruby source code download from Ruby websie: http://www.ruby-lang.org/en/ or

    from github: https://github.com/ruby/ruby 12年12月8日星期六
  22. Ruby Source Code: - *.c + *.h - *.rb (Sdlib)

    12年12月8日星期六
  23. Tools - Vim 12年12月8日星期六

  24. Ruby 1.9.2 p290 12年12月8日星期六

  25. Quick Browsing.. :) 12年12月8日星期六

  26. what's a Ruby object? 12年12月8日星期六

  27. sart from basic structure, like Object, Class, String, Array, Hash,

    Basic... 12年12月8日星期六
  28. Object = RObject, Class = RClass, String = RString, Array

    = RArray, Hash = RHash, Basic = RBasic 12年12月8日星期六
  29. “ruby.h” 12年12月8日星期六

  30. “object.c” 12年12月8日星期六

  31. Init_XXXX 12年12月8日星期六

  32. class.c#350-354 all Class’s class is Class! 12年12月8日星期六

  33. class.c#556 rb_define_module() 12年12月8日星期六

  34. class.c#1170 rb_define_method() 12年12月8日星期六

  35. Object.c#2556~2560 Integer(), Float(), String(), Array() are all global methods 12年12月8日星期六

  36. = 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日星期六
  37. “new” 12年12月8日星期六

  38. class A def initialize puts "hello" end end a =

    A.new 12年12月8日星期六
  39. object.c#2624 new -> rb_class_new_instance -> rb_obj_alloc -> rb_obj_call_init 12年12月8日星期六

  40. o_s v.s o_str 12年12月8日星期六

  41. String.c#7488 rb_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日星期六

  42. Array.c#4504 rb_define_alias(rb_cArray, "to_s", "inspect"); but no `to_str` 12年12月8日星期六

  43. proc.c#2105 how to execute a Proc? - proc.call - proc[]

    - proc === 123 - proc.yield 12年12月8日星期六
  44. object.c#2592 - attr - attr_reader - attr_writer - attr_accessor 12年12月8日星期六

  45. push v.s << 12年12月8日星期六

  46. array.c#709 (<<) VALUE rb_ary_push(VALUE ary, VALUE item){ rb_ary_modify(ary); return rb_ary_push_1(ary,

    item); } 12年12月8日星期六
  47. array.c#742 (push) static VALUE rb_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日星期六
  48. gc.c#3214-3215 Object’s ID 12年12月8日星期六

  49. gc.c#2865-2867 How Symbol works? 12年12月8日星期六

  50. people = { "Eddie" => ["green", "eddie@digik.com.tw"], "Joanne" => ["yellow",

    "hello@yahoo.com"] } people.map { |name, (color, email)| puts [name, email] } 12年12月8日星期六
  51. people = { "Eddie" => ["green", "eddie@digik.com.tw"], "Joanne" => ["yellow",

    "hello@yahoo.com"] } people.map { |name, (_, email)| puts [name, email] } parse.y#8277-8299 shadowing_lvar_gen() 12年12月8日星期六
  52. vm_eval.c#224 method_missing 12年12月8日星期六

  53. ineresting naming :) 12年12月8日星期六

  54. ext/ripper/ripper.c#15890 rb_intern, rb_intern2, rb_intern3 12年12月8日星期六

  55. array.c#325 rb_ary_new, rb_ary_new2, ary_new, rb_ary_new3, rb_ary_new4 12年12月8日星期六

  56. Simple Ruby Exension from Scrach 12年12月8日星期六

  57. Conclusion 12年12月8日星期六

  58. from basic structure 12年12月8日星期六

  59. and don’t be afraid 12年12月8日星期六

  60. References 12年12月8日星期六

  61. Rubyソースコード完全解説 by 青木峰郎 http://i.loveruby.net/ja/rhg/book/ 12年12月8日星期六

  62. Ruby Under a Microscope by Pat Shaughnessy http://patshaughnessy.net/ruby-under-a-microscope 12年12月8日星期六

  63. still not finish.. 12年12月8日星期六

  64. Ian Ruotsala 12年12月8日星期六

  65. Chimpr Hope can become a Jedi Master someday :) 12年12月8日星期六

  66. おわり thank you all :) 12年12月8日星期六

  67. any question? 12年12月8日星期六

  68. 高見見龍龍 Conacts photo by Eddie Websie Blog Plurk Facebook Google

    Plus Twiter 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://twiter.com/#!/eddiekao eddie@digik.com.tw +886-928-617-687 12年12月8日星期六