Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Feeding the sharks

11,419 views

Published on

RubyConf 2014 Keynote

Published in: Software, Engineering, Technology
  • Nice !! Download 100 % Free Ebooks, PPts, Study Notes, Novels, etc @ https://www.ThesisScientist.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Nice !! Download 100 % Free Ebooks, PPts, Study Notes, Novels, etc @ https://www.ThesisScientist.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hi there! Essay Help For Students | Discount 10% for your first order! - Check our website! https://vk.cc/80SakO
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Feeding the sharks

  1. 1. Powered by Rabbit 2.1.2 Feeding the Sharks Ruby Association Heroku @yukihiro_matz Yukihiro "Matz" Matsumoto
  2. 2. Powered by Rabbit 2.1.2   or
  3. 3. Powered by Rabbit 2.1.2   Clash of Types
  4. 4. Powered by Rabbit 2.1.2   OSS Community is like a shark
  5. 5. Powered by Rabbit 2.1.2   Especially developers' community
  6. 6. Powered by Rabbit 2.1.2   We have to move forward, or die
  7. 7. Powered by Rabbit 2.1.2   If we lose interest, we will go away
  8. 8. Powered by Rabbit 2.1.2   To somewhere else, more interesting
  9. 9. Powered by Rabbit 2.1.2   We have to feed the community
  10. 10. Powered by Rabbit 2.1.2   We have to attract the community
  11. 11. Powered by Rabbit 2.1.2   Somehow
  12. 12. Powered by Rabbit 2.1.2   By showing how to earn money
  13. 13. Powered by Rabbit 2.1.2   Rails!
  14. 14. Powered by Rabbit 2.1.2   By enlightening people
  15. 15. Powered by Rabbit 2.1.2   Philosophy
  16. 16. Powered by Rabbit 2.1.2   By showing the future
  17. 17. Powered by Rabbit 2.1.2   The possible future
  18. 18. Powered by Rabbit 2.1.2   Past Keynotes of RubyConf
  19. 19. Powered by Rabbit 2.1.2   I gave presentations about the future
  20. 20. Powered by Rabbit 2.1.2   RubyConf 2001
  21. 21. Powered by Rabbit 2.1.2   The first RubyConf in Tampa
  22. 22. Powered by Rabbit 2.1.2   Virtual Machine
  23. 23. Powered by Rabbit 2.1.2   Virtual Machine (1.9 2007)
  24. 24. Powered by Rabbit 2.1.2   RubyConf 2002
  25. 25. Powered by Rabbit 2.1.2   In Seattle
  26. 26. Powered by Rabbit 2.1.2   M17N Native thread Generational GC
  27. 27. Powered by Rabbit 2.1.2   M17N (1.9 2007) Native thread (1.9 2007) Generational GC (2.1 2013)
  28. 28. Powered by Rabbit 2.1.2   RubyConf 2003
  29. 29. Powered by Rabbit 2.1.2   In Austin
  30. 30. Powered by Rabbit 2.1.2   Local variable scope Multiple assignment Keyword argument Method combination Selector namespace Optional static type
  31. 31. Powered by Rabbit 2.1.2   Local variable scope (--) Multiple assignment(1.9 2007) Keyword argument (2.0 2013) Method combination (2.0 2013) Selector namespace (2.0 2013) Optional static type (--)
  32. 32. Powered by Rabbit 2.1.2   RubyConf 2004
  33. 33. Powered by Rabbit 2.1.2   In Washington DC
  34. 34. Powered by Rabbit 2.1.2   My yougest daughter was born
  35. 35. Powered by Rabbit 2.1.2   Brad Cox gave a keynote
  36. 36. Powered by Rabbit 2.1.2   Koichi gave his first talk on YARV
  37. 37. Powered by Rabbit 2.1.2   RubyConf 2005
  38. 38. Powered by Rabbit 2.1.2   In San Diego
  39. 39. Powered by Rabbit 2.1.2   Stabby lambda (->) Real multi-value Traits
  40. 40. Powered by Rabbit 2.1.2   Stabby lambda (1.9 2007) Real multi-value (--) Traits (--)
  41. 41. Powered by Rabbit 2.1.2   RubyConf 2006
  42. 42. Powered by Rabbit 2.1.2   In Denver
  43. 43. Powered by Rabbit 2.1.2   Bikeshed argument encouraged
  44. 44. Powered by Rabbit 2.1.2   No new ideas
  45. 45. Powered by Rabbit 2.1.2   RubyConf 2007
  46. 46. Powered by Rabbit 2.1.2   In Charlotte
  47. 47. Powered by Rabbit 2.1.2   1.9 introduced
  48. 48. Powered by Rabbit 2.1.2   No new ideas
  49. 49. Powered by Rabbit 2.1.2   RubyConf 2008
  50. 50. Powered by Rabbit 2.1.2   In Portland
  51. 51. Powered by Rabbit 2.1.2   Philosophy explained
  52. 52. Powered by Rabbit 2.1.2   No new ideas
  53. 53. Powered by Rabbit 2.1.2   RubyConf 2009
  54. 54. Powered by Rabbit 2.1.2   In San Francisco
  55. 55. Powered by Rabbit 2.1.2   Power of DSL explained
  56. 56. Powered by Rabbit 2.1.2   RubyKaigi 2009
  57. 57. Powered by Rabbit 2.1.2   Complex literal Rational literal True division (1/2 => 1/2) Bitmap marking Symbol GC
  58. 58. Powered by Rabbit 2.1.2   Complex literal (2.1 2013) Rational (2.1 2013) True division (--) Bitmap marking (2.0 2013) Symbol GC (2.2 2014)
  59. 59. Powered by Rabbit 2.1.2   RubyConf 2010
  60. 60. Powered by Rabbit 2.1.2   In New Orleans
  61. 61. Powered by Rabbit 2.1.2   Mix (traits) Module#prepend Refinement Rite (mruby)
  62. 62. Powered by Rabbit 2.1.2   Mix (--) Module#prepend (2.0 2013) Refinement (2.0 2013) mruby (2012)
  63. 63. Powered by Rabbit 2.1.2   RubyConf 2011-2013
  64. 64. Powered by Rabbit 2.1.2   New Orleans, Denver and Miami
  65. 65. Powered by Rabbit 2.1.2   No new ideas
  66. 66. Powered by Rabbit 2.1.2   After all,
  67. 67. Powered by Rabbit 2.1.2   Some may become true, some may not
  68. 68. Powered by Rabbit 2.1.2   False rate 7/22 ≒ 32%
  69. 69. Powered by Rabbit 2.1.2   2001-2005 Exciting (but uncertain) ideas
  70. 70. Powered by Rabbit 2.1.2   2006-2008 Nothing new, but philosophy
  71. 71. Powered by Rabbit 2.1.2   2009-2013 Improving implementation
  72. 72. Powered by Rabbit 2.1.2   We need fuel to move on
  73. 73. Powered by Rabbit 2.1.2   It's about time start talking about:
  74. 74. Powered by Rabbit 2.1.2   Ruby 3.0
  75. 75. Powered by Rabbit 2.1.2   Ruby 2.2
  76. 76. Powered by Rabbit 2.1.2   May happen in next 10 years
  77. 77. Powered by Rabbit 2.1.2   Concurrency JIT Static typing
  78. 78. Powered by Rabbit 2.1.2   Concurrency
  79. 79. Powered by Rabbit 2.1.2   JIT (LLVM?)
  80. 80. Powered by Rabbit 2.1.2   Static typing
  81. 81. Powered by Rabbit 2.1.2   Static typing?
  82. 82. Powered by Rabbit 2.1.2   All new kids in the street
  83. 83. Powered by Rabbit 2.1.2   Scala
  84. 84. Powered by Rabbit 2.1.2   TypeScript
  85. 85. Powered by Rabbit 2.1.2   Dart
  86. 86. Powered by Rabbit 2.1.2   Go
  87. 87. Powered by Rabbit 2.1.2   Why not Ruby?
  88. 88. Powered by Rabbit 2.1.2   Clash of Types
  89. 89. Powered by Rabbit 2.1.2   Feature #9999 by Davide D'Agostino
  90. 90. Powered by Rabbit 2.1.2   Type Annotations
  91. 91. Powered by Rabbit 2.1.2   def connect(r -> Stream, c -> Client) -> Fiber ... end
  92. 92. Powered by Rabbit 2.1.2   Python PEP: 3107
  93. 93. Powered by Rabbit 2.1.2   Function Annotations
  94. 94. Powered by Rabbit 2.1.2   def connect(r: Stream, c: Client) -> Fiber: ...
  95. 95. Powered by Rabbit 2.1.2   mypy Optional static type checker
  96. 96. Powered by Rabbit 2.1.2   Benefits of static typing?
  97. 97. Powered by Rabbit 2.1.2   Performance Compile-time check Documentation
  98. 98. Powered by Rabbit 2.1.2   Performance
  99. 99. Powered by Rabbit 2.1.2   No one complains for faster Ruby
  100. 100. Powered by Rabbit 2.1.2   But do we really need static typing for speed?
  101. 101. Powered by Rabbit 2.1.2   JavaScript V8
  102. 102. Powered by Rabbit 2.1.2   LuaJIT
  103. 103. Powered by Rabbit 2.1.2   JIT
  104. 104. Powered by Rabbit 2.1.2   Specialization
  105. 105. Powered by Rabbit 2.1.2   Performace with dynamic typing
  106. 106. Powered by Rabbit 2.1.2   We don't need static typing for speed
  107. 107. Powered by Rabbit 2.1.2   Compile-time check
  108. 108. Powered by Rabbit 2.1.2   Static analysis
  109. 109. Powered by Rabbit 2.1.2   Refactoring
  110. 110. Powered by Rabbit 2.1.2   Test coverage
  111. 111. Powered by Rabbit 2.1.2   But less flexible
  112. 112. Powered by Rabbit 2.1.2   Against Duck typing
  113. 113. Powered by Rabbit 2.1.2   Documentation
  114. 114. Powered by Rabbit 2.1.2   Much better than comments
  115. 115. Powered by Rabbit 2.1.2   No contradiction
  116. 116. Powered by Rabbit 2.1.2   No investigation into details
  117. 117. Powered by Rabbit 2.1.2   That is PEP-3107's intention
  118. 118. Powered by Rabbit 2.1.2   Why not static typing?
  119. 119. Powered by Rabbit 2.1.2   Duck typing Optional DRY
  120. 120. Powered by Rabbit 2.1.2   Duck typing
  121. 121. Powered by Rabbit 2.1.2   Static typing is against duck typing
  122. 122. Powered by Rabbit 2.1.2   Guy Decoux
  123. 123. Powered by Rabbit 2.1.2   Optional
  124. 124. Powered by Rabbit 2.1.2   Optional typing is only useful with 99% coverage
  125. 125. Powered by Rabbit 2.1.2   TypeScript
  126. 126. Powered by Rabbit 2.1.2   dynamic
  127. 127. Powered by Rabbit 2.1.2   Ruby without duck typing, really Ruby?
  128. 128. Powered by Rabbit 2.1.2   Ruby should keep being Ruby, forever
  129. 129. Powered by Rabbit 2.1.2   DRY
  130. 130. Powered by Rabbit 2.1.2   Don't Repeat Yourself
  131. 131. Powered by Rabbit 2.1.2   Avoid duplication
  132. 132. Powered by Rabbit 2.1.2   Static typing is against DRY principle
  133. 133. Powered by Rabbit 2.1.2   Code & Declaration
  134. 134. Powered by Rabbit 2.1.2   Soft-typing[1]
  135. 135. Powered by Rabbit 2.1.2   [1] Soft Typing, Robert Cartwright and Mike Fagan, 1991
  136. 136. Powered by Rabbit 2.1.2   [2] Soft typing: An approach to type checking for dynamically typed languages, Mike Fagan, 1991
  137. 137. Powered by Rabbit 2.1.2   No declaration needed
  138. 138. Powered by Rabbit 2.1.2   Best-effort type checker
  139. 139. Powered by Rabbit 2.1.2   Based on duck typing
  140. 140. Powered by Rabbit 2.1.2   Type inference
  141. 141. Powered by Rabbit 2.1.2   a=1 # type of a is Integer
  142. 142. Powered by Rabbit 2.1.2   # x requires to have to_int def foo(x) print x.to_int end foo(1) # OK: 1 has to_int foo("a") # NG: "a" does not have to_int
  143. 143. Powered by Rabbit 2.1.2   Type is represented by: Set of methods name number and type of arguments Class (as set of methods)
  144. 144. Powered by Rabbit 2.1.2   Compile-time check
  145. 145. Powered by Rabbit 2.1.2   Best-effort type checker
  146. 146. Powered by Rabbit 2.1.2   Targets subset of the language
  147. 147. Powered by Rabbit 2.1.2   Restricted dynamic nature
  148. 148. Powered by Rabbit 2.1.2   For example, require define_method method_missing
  149. 149. Powered by Rabbit 2.1.2   Documentation
  150. 150. Powered by Rabbit 2.1.2   Unlike other languages
  151. 151. Powered by Rabbit 2.1.2   You don't tell compiler types
  152. 152. Powered by Rabbit 2.1.2   Compiler will guess your intention
  153. 153. Powered by Rabbit 2.1.2   And report back to you
  154. 154. Powered by Rabbit 2.1.2   And generates doc / IDE info
  155. 155. Powered by Rabbit 2.1.2   Closer communication between compiler and you
  156. 156. Powered by Rabbit 2.1.2   Soft typing means 2 languages in one
  157. 157. Powered by Rabbit 2.1.2   Statically soft typed language Dynamic typed language
  158. 158. Powered by Rabbit 2.1.2   When soft typing is not applicable
  159. 159. Powered by Rabbit 2.1.2   It fallbacks to dynamic typing
  160. 160. Powered by Rabbit 2.1.2   Strongly encouraging the former
  161. 161. Powered by Rabbit 2.1.2   First, it should be done by a static analyzer
  162. 162. Powered by Rabbit 2.1.2   For quicker error detection
  163. 163. Powered by Rabbit 2.1.2   Or for better IDE integration
  164. 164. Powered by Rabbit 2.1.2   This is just an idea
  165. 165. Powered by Rabbit 2.1.2   May or may not happen
  166. 166. Powered by Rabbit 2.1.2   But it's about time to start new things
  167. 167. Powered by Rabbit 2.1.2   That leads us Ruby 3.0
  168. 168. Powered by Rabbit 2.1.2   Prepare for the future
  169. 169. Powered by Rabbit 2.1.2   Happy hacking
  170. 170. Powered by Rabbit 2.1.2   Thank you

×