The Future of Ruby Matz

Razor

2019/08/28 发布于 技术 分类

rubyconf2019 

文字内容
1. The Future of Ruby(3) Heroku Ruby Association Yukihiro "Matz" Matsumoto まつもとゆきひろ @yukihiro_matz Powered by Rabbit 2.2.1
2. 您好 Powered by Rabbit 2.2.1
3. RubyConf China Powered by Rabbit 2.2.1
4. Ruby Powered by Rabbit 2.2.1
5. Ruby is Good Powered by Rabbit 2.2.1
6. Productive Flexible Fun Powered by Rabbit 2.2.1
7. Ruby is Bad Powered by Rabbit 2.2.1
8. "Ruby is Dead" Powered by Rabbit 2.2.1
9. "Ruby is Less Popular" Powered by Rabbit 2.2.1
10. TIOBE Index Powered by Rabbit 2.2.1
11. 11th out of 150 languages Powered by Rabbit 2.2.1
12. Redmonk Index Powered by Rabbit 2.2.1
13. 8 out of 20 languages Powered by Rabbit 2.2.1
14. Ruby is Good Enough Powered by Rabbit 2.2.1
15. Big Sites Use Ruby Github Airbnb Instacart Cookpad Powered by Rabbit 2.2.1
16. Ruby is Fast Enough Powered by Rabbit 2.2.1
17. For Most of the Cases Powered by Rabbit 2.2.1
18. If You Reach The Limit, It's OK Powered by Rabbit 2.2.1
19. Twitter Story Powered by Rabbit 2.2.1
20. Twitter Powered by Rabbit 2.2.1
21. Ruby1.8 Powered by Rabbit 2.2.1
22. Ruby1.9+ is Far Faster Powered by Rabbit 2.2.1
23. And The Limit is Moving Powered by Rabbit 2.2.1
24. Ruby2 Improves Performance Powered by Rabbit 2.2.1
25. Powered by Rabbit 2.2.1
26. Hype Cycle Powered by Rabbit 2.2.1
27. Powered by Rabbit 2.2.1
28. Let's Face It Powered by Rabbit 2.2.1
29. Ruby is not Perfect Powered by Rabbit 2.2.1
30. Some Issues Powered by Rabbit 2.2.1
31. Performance Multi-Cores Bigger Team/Project Powered by Rabbit 2.2.1
32. Performance Powered by Rabbit 2.2.1
33. Multi-Cores Powered by Rabbit 2.2.1
34. Bigger Team/Project Powered by Rabbit 2.2.1
35. OSS community cannot stop Powered by Rabbit 2.2.1
36. We Keep Improvement Powered by Rabbit 2.2.1
37. Even Further in Ruby3 Powered by Rabbit 2.2.1
38. Ruby3 the Future Powered by Rabbit 2.2.1
39. But How We Can Improve? Powered by Rabbit 2.2.1
40. Performance Concurrency Static Analysis Powered by Rabbit 2.2.1
41. Static Analysis Powered by Rabbit 2.2.1
42. Static Typing Powered by Rabbit 2.2.1
43. As the Project Grows Powered by Rabbit 2.2.1
44. Test Becomes a Burden Powered by Rabbit 2.2.1
45. Test Increases Its Size Powered by Rabbit 2.2.1
46. Test Execution Takes More Time Powered by Rabbit 2.2.1
47. Tests are Not DRY Powered by Rabbit 2.2.1
48. Don't' Repeat Yourself Powered by Rabbit 2.2.1
49. We Do Write Tests Anyway Powered by Rabbit 2.2.1
50. But Want to be More Productive Powered by Rabbit 2.2.1
51. What Other Languages Try Powered by Rabbit 2.2.1
52. PHP: Type Hinting Powered by Rabbit 2.2.1
53. Python3: Type Annotation Powered by Rabbit 2.2.1
54. JavaScript: TypeScript Powered by Rabbit 2.2.1
55. What Should We Do? Powered by Rabbit 2.2.1
56. Adding Type Annotation? Powered by Rabbit 2.2.1
57. Like PHP or Python? Powered by Rabbit 2.2.1
58. No Powered by Rabbit 2.2.1
59. I Hate Type Annotations Powered by Rabbit 2.2.1
60. It's Not DRY Powered by Rabbit 2.2.1
61. We Won't Add Type Hinting Powered by Rabbit 2.2.1
62. Because It's Not Needed Powered by Rabbit 2.2.1
63. The Plan for Ruby3 Powered by Rabbit 2.2.1
64. Static Type Checking Components Powered by Rabbit 2.2.1
65. Type Definition Syntax (.rbs) Type Definitions for Libraries Type Profiler Static Type Checker Powered by Rabbit 2.2.1
66. Type Definition Syntax Powered by Rabbit 2.2.1
67. Soutaro Matsumoto Powered by Rabbit 2.2.1
68. This is Compromise Powered by Rabbit 2.2.1
69. Separated Files to describe Types Powered by Rabbit 2.2.1
70. Argument Types Return Value Type Class / Module (Generic) Interface Powered by Rabbit 2.2.1
71. class Foo def foo: -> void def to_s: -> String (Integer) -> String end Powered by Rabbit 2.2.1
72. A Tool to Parse rbs File Powered by Rabbit 2.2.1
73. github.com/soutaro/ruby-signature Powered by Rabbit 2.2.1
74. Type Definitions for Libraries Powered by Rabbit 2.2.1
75. Standard Libraries Powered by Rabbit 2.2.1
76. Gems (TBD) Powered by Rabbit 2.2.1
77. Type Profiler Powered by Rabbit 2.2.1
78. Yusuke Endoh Powered by Rabbit 2.2.1
79. The Key Component of Static Analysis Powered by Rabbit 2.2.1
80. Abstract Interpretation Powered by Rabbit 2.2.1
81. def foo(a) a + 2 end foo(15) Powered by Rabbit 2.2.1
82. def foo(a) a + 2 end foo(15) # a is int # int has '+': OK # foo is called with int Powered by Rabbit 2.2.1
83. Type Profiler Collect Type Information Detect Type Conflict of Type Information Generate rbs Files Powered by Rabbit 2.2.1
84. Type Profiler Level 1 Type Checker rbs Generator Powered by Rabbit 2.2.1
85. You can Refine Generated rbs Files Powered by Rabbit 2.2.1
86. We May Also Provide the YARD to rbs Converter Powered by Rabbit 2.2.1
87. Static Type Checker Powered by Rabbit 2.2.1
88. Sorbet from Stripe Steep Powered by Rabbit 2.2.1
89. Use rbs Type Definitions Powered by Rabbit 2.2.1
90. Different Characteristic Powered by Rabbit 2.2.1
91. Sorbet Powered by Rabbit 2.2.1
92. github.com/sorbet/sorbet Powered by Rabbit 2.2.1
93. Sorbet Fast (in C++) (Mostly) Nominal Supports type annotation DSL rbs Support is Coming Powered by Rabbit 2.2.1
94. Steep Powered by Rabbit 2.2.1
95. github.com/soutaro/steep Powered by Rabbit 2.2.1
96. Steep Written in Ruby Structural Typing Flexible Powered by Rabbit 2.2.1
97. Healthy Competition Powered by Rabbit 2.2.1
98. What will Happen with These? Powered by Rabbit 2.2.1
99. Your ordinary Ruby programs will be statically type checked Powered by Rabbit 2.2.1
100. Without any type annotations in your Ruby programs Powered by Rabbit 2.2.1
101. If you refine type definition files, you will have better checking Powered by Rabbit 2.2.1
102. Wouldn't That Be Cool? Powered by Rabbit 2.2.1
103. We Are Working on It Powered by Rabbit 2.2.1
104. And Result is Promising (at least from my POV) Powered by Rabbit 2.2.1
105. Performance Powered by Rabbit 2.2.1
106. No Language can be Fast Enough Powered by Rabbit 2.2.1
107. Ruby2 Improves Performance Powered by Rabbit 2.2.1
108. Powered by Rabbit 2.2.1
109. Even Further in Ruby3 Powered by Rabbit 2.2.1
110. We Need More Performance Powered by Rabbit 2.2.1
111. Bigger Services Powered by Rabbit 2.2.1
112. Anxiety Powered by Rabbit 2.2.1
113. We need to address bottlenecks Powered by Rabbit 2.2.1
114. Memory CPU I/O Powered by Rabbit 2.2.1
115. Memory is the First Bottleneck Powered by Rabbit 2.2.1
116. GC Improvement Powered by Rabbit 2.2.1
117. Generational GC (2.1) Incremental GC (2.2) Transient Heap (2.6) Object Compaction (2.7?) Powered by Rabbit 2.2.1
118. Resolve CPU Bottleneck Powered by Rabbit 2.2.1
119. JIT Powered by Rabbit 2.2.1
120. Just-in-Time Compiler Powered by Rabbit 2.2.1
121. MJIT (2.6) Powered by Rabbit 2.2.1
122. For CPU Intensive Task Powered by Rabbit 2.2.1
123. optcarrot (NES emulator) Powered by Rabbit 2.2.1
124. Ruby2.6 Runs 2.8x Faster than Ruby2.0 Powered by Rabbit 2.2.1
125. Ruby2.7 Runs Even Faster Powered by Rabbit 2.2.1
126. For Rails apps Powered by Rabbit 2.2.1
127. MJIT Runs Slower Powered by Rabbit 2.2.1
128. Memory Bottleneck Too Many Methods I/O Intensive Powered by Rabbit 2.2.1
129. Lighter Compilation Powered by Rabbit 2.2.1
130. MIR: the lightweight JIT (by Vlad) Powered by Rabbit 2.2.1
131. 3 tier JIT Powered by Rabbit 2.2.1
132. VM→MIR→MJIT Powered by Rabbit 2.2.1
133. JIT may not be useful for Web Apps Powered by Rabbit 2.2.1
134. JIT would be useful for Research Computing Powered by Rabbit 2.2.1
135. The Other Way to Improve Performance Powered by Rabbit 2.2.1
136. Concurrency Powered by Rabbit 2.2.1
137. Concurrency is Hard Powered by Rabbit 2.2.1
138. I Regret Adding Threads Powered by Rabbit 2.2.1
139. Hard to Use Correctly Hard to Use Efficiently Hard to Debug Powered by Rabbit 2.2.1
140. We Need Better Abstraction Powered by Rabbit 2.2.1
141. Guilds (Isolates) AutoFiber (AsyncWhatever) We Need Better Abstraction Powered by Rabbit 2.2.1
142. Guilds for CPU Bottlenecks Powered by Rabbit 2.2.1
143. AutoFiber for I/O Bottlenecks Powered by Rabbit 2.2.1
144. Easy to Use Powered by Rabbit 2.2.1
145. Easy to Debug Powered by Rabbit 2.2.1
146. Easy to Perform Powered by Rabbit 2.2.1
147. Go or Elixir use Single Entity Powered by Rabbit 2.2.1
148. We Need Better Names Powered by Rabbit 2.2.1
149. Guilds (or Isolate?) AutoFibers (or just change Threads?) Powered by Rabbit 2.2.1
150. Your Opinions are Welcome Powered by Rabbit 2.2.1
151. Improvements Are Inspired by Functional Programming Languages Powered by Rabbit 2.2.1
152. Static Typing Powered by Rabbit 2.2.1
153. Concurrency Models Powered by Rabbit 2.2.1
154. And Even More Powered by Rabbit 2.2.1
155. Numbered Block Parameters Powered by Rabbit 2.2.1
156. From Scala, Clojure, Groovy Powered by Rabbit 2.2.1
157. [1,2,3].map{_1 * 2} Powered by Rabbit 2.2.1
158. Other Options Powered by Rabbit 2.2.1
159. it (Groovy, Kotlin) @, @1, @2.. %0, %1, %2..@ Powered by Rabbit 2.2.1
160. Pattern Matching Powered by Rabbit 2.2.1
161. Not Regular Expression Powered by Rabbit 2.2.1
162. From Many FP Languages Powered by Rabbit 2.2.1
163. case JSON.parse(json, symbolize_names: true) in {name: "Alice", children: [name: "Bob", age: age]} p age in _ p "no Alice" end Powered by Rabbit 2.2.1
164. if person[:name] == "Alice" children = person[:children] if children.length == 1 && children[0][:name] == "Bob" p children[0][:age] end end Powered by Rabbit 2.2.1
165. Chaining (Pipeline) Operator Powered by Rabbit 2.2.1
166. From F#, Elixir Powered by Rabbit 2.2.1
167. 1..100 > map{ x rand(x)} > sort > reverse > take 5 > display Powered by Rabbit 2.2.1
168. # instead of (1..100) .map{ x rand(x)} .sort .reverse .take(5) .display Powered by Rabbit 2.2.1
169. Pipeline Operator in F# (and ML) Powered by Rabbit 2.2.1
170. let ( >) x f = f x add primary argument at the last Powered by Rabbit 2.2.1
171. Pipeline Operator in Elixir Powered by Rabbit 2.2.1
172. macro add primary argument as the first argument Powered by Rabbit 2.2.1
173. The Concept of Pipeline Powered by Rabbit 2.2.1
174. Add Primary Argument to the Call Powered by Rabbit 2.2.1
175. Pipeline Operator in Ruby Powered by Rabbit 2.2.1
176. Add Primary Argument to the Call Powered by Rabbit 2.2.1
177. Add Primary Argument as the Receiver Powered by Rabbit 2.2.1
178. alternative syntax different operator precedence (like blocks) less parentheses Powered by Rabbit 2.2.1
179. I gave up Powered by Rabbit 2.2.1
180. Note that it's before 2.7 Powered by Rabbit 2.2.1
181. I had to experiment Powered by Rabbit 2.2.1
182. At least, we get some ideas Powered by Rabbit 2.2.1
183. Allow comments in method chains Right assignment => (?) Powered by Rabbit 2.2.1
184. # instead of (1..100) .map{ x rand(x)} .sort #.reverse .take(5) .display Comments in method chains Powered by Rabbit 2.2.1
185. # instead of (1..100) .map{ x rand(x)} .sort .reverse .take(5) => top_five Right assignment Powered by Rabbit 2.2.1
186. We Need to Survive Powered by Rabbit 2.2.1
187. To Provide Benefit to Our Users Powered by Rabbit 2.2.1
188. To Sustain Our Lives Powered by Rabbit 2.2.1
189. We Will Keep Moving Forward Powered by Rabbit 2.2.1
190. With You Powered by Rabbit 2.2.1
191. To Make You (and Us) Happy Powered by Rabbit 2.2.1
192. To Make the World Better Place Powered by Rabbit 2.2.1
193. Thank you Powered by Rabbit 2.2.1