rabbit-slide-znz-rubykansai85-ruby26 2019.02.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6ddbd795577b9a2ae6513d87145c003d13b5fbb94c94bd777ee76d9962d99fe4
4
+ data.tar.gz: 0c9feacbb2ebae217e47bdc13247189e67dc5c6da3aef033a8e09c1343eca81b
5
+ SHA512:
6
+ metadata.gz: e6c6d26f96af302b8ef83c4980fa5d6d534867d991906def46f543ddc5483c7e263b95d61c8d155ab9e13f1fcf72197a2905bbd52ac074d0743c4d25c759ecfb
7
+ data.tar.gz: edae4988ea5e9a1f955126909bd6d2f7ee011335ccad8b6687e2ad4df6339927cf5ae772d1d473f260fd352511025c4a8a3da27f649445dbb2f6503c6bb81d31
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ ruby-2.6-update.md
@@ -0,0 +1,24 @@
1
+ # Ruby 2.6 Update
2
+
3
+ [第85回 Ruby関西 勉強会](https://rubykansai.doorkeeper.jp/events/85497)の発表資料です。
4
+
5
+ ## 作者向け
6
+
7
+ ### 表示
8
+
9
+ rake
10
+
11
+ ### 公開
12
+
13
+ rake publish
14
+
15
+ ## 閲覧者向け
16
+
17
+ ### インストール
18
+
19
+ gem install rabbit-slide-znz-rubykansai85-ruby26
20
+
21
+ ### 表示
22
+
23
+ rabbit rabbit-slide-znz-rubykansai85-ruby26.gem
24
+
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("YOUR THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: rubykansai85-ruby26
3
+ base_name: ruby-2.6-update
4
+ tags:
5
+ - ruby
6
+ presentation_date: 2019/02/16
7
+ version: 2019.02.16
8
+ licenses: []
9
+ slideshare_id:
10
+ speaker_deck_id:
11
+ ustream_id:
12
+ vimeo_id:
13
+ youtube_id:
14
+ author:
15
+ markup_language: :markdown
16
+ name: Kazuhiro NISHIYAMA
17
+ email: zn@mbf.nifty.com
18
+ rubygems_user: znz
19
+ slideshare_user: znzjp
20
+ speaker_deck_user: znz
@@ -0,0 +1,291 @@
1
+ # Ruby 2.6 Update
2
+
3
+ author
4
+ : Kazuhiro NISHIYAMA
5
+
6
+ content-source
7
+ : 第85回 Ruby関西 勉強会
8
+
9
+ date
10
+ : 2019/02/16
11
+
12
+ institution
13
+ : 株式会社Ruby開発
14
+
15
+ allotted-time
16
+ : 40m
17
+
18
+ theme
19
+ : lightning-simple
20
+
21
+ # 自己紹介
22
+
23
+ - 西山 和広
24
+ - Ruby のコミッター
25
+ - twitter, github など: @znz
26
+ - 株式会社Ruby開発 www.ruby-dev.jp
27
+
28
+ # ITアイランドセミナー in 姫島2019
29
+
30
+ - 2019-03-15(金)〜16(土) 大分県姫島
31
+ - <https://connpass.com/event/115052/>
32
+ - <https://www.ruby-dev.jp/seminar/himeshima/2019>
33
+
34
+ # OSS Gate
35
+
36
+ - OSS Gate大阪ワークショップ2019-03-09
37
+ <https://oss-gate.doorkeeper.jp/events/86154>
38
+ - 「OSSの開発に参加する」を実際に体験するワークショップ
39
+ - 実際にOSSの開発に参加する人(「ビギナー」)と「ビギナー」をサポートする人(「サポーター」)を募集中
40
+
41
+ # agenda
42
+
43
+ - 2.6.0 での変更の紹介
44
+ - 2.6.0 での問題
45
+ - 2.6.1 での問題
46
+ - 2.6.2, 2.6.3 の予定
47
+
48
+ # オススメ記事
49
+
50
+ - プロと読み解く Ruby 2.6 NEWS ファイル - クックパッド開発者ブログ
51
+ <https://techlife.cookpad.com/entry/2018/12/25/110240>
52
+
53
+ # 2.6.0 での変更の紹介
54
+
55
+ # $SAFE がプロセスグローバルに
56
+
57
+ - `Proc#call` で保存されなくなった
58
+ - スレッドローカル (Fiber ローカル) ではない
59
+ - マルチスレッドプログラムでスレッドセーフに扱えなくなった
60
+ - `$SAFE = 1` から `$SAFE = 0` で戻せるようになった
61
+
62
+ # 終端なしの Range
63
+
64
+ ```ruby
65
+ ary[1..] #=> ary[1..-1] と同じ
66
+
67
+ (1..).each {|index| ... } # 1 から無限にループ
68
+
69
+ # each_with_index を 0 でなく 1 から始める
70
+ ary.zip(1..) {|elem, index| ... }
71
+ ```
72
+
73
+ # キーワード引数とオプション引数のコーナーケースを禁止
74
+
75
+ ```ruby
76
+ def foo(h = {}, key: :default)
77
+ p [h, key]
78
+ end
79
+
80
+ foo(:key => 1, "str" => 2)
81
+ #=> [{"str"=>2}, 1] (2.5 まで)
82
+ #=> non-symbol key in keyword arguments:
83
+ # "str" (ArgumentError) (2.6)
84
+ ```
85
+
86
+ # ローカル変数の shadowing 警告を削除
87
+
88
+ 以下のような例で `shadowing outer local variable` 警告がでなくなった
89
+
90
+ ```ruby
91
+ user = users.find {|user| cond(user) }
92
+ ```
93
+
94
+ # バックトレース表示
95
+
96
+ プロセス終了時のバックトレースで cause のバックトレースも表示されるようになった
97
+
98
+ ```
99
+ $ ruby -e 'def a;b;rescue;raise "in a";end;def b;raise "in b";end;a'
100
+ Traceback (most recent call last):
101
+ 2: from -e:1:in `<main>'
102
+ 1: from -e:1:in `a'
103
+ -e:1:in `b': in b (RuntimeError)
104
+ 2: from -e:1:in `<main>'
105
+ 1: from -e:1:in `a'
106
+ -e:1:in `rescue in a': in a (RuntimeError)
107
+ ```
108
+
109
+ # flip-flop が deprecated
110
+
111
+ 条件式としての範囲式
112
+ <https://docs.ruby-lang.org/ja/2.6.0/doc/spec=2foperator.html#range_cond>
113
+
114
+ ```ruby
115
+ 5.times{|n|
116
+ if (n==2)..(n==3)
117
+ p n
118
+ end
119
+ }
120
+ #=> 2
121
+ # 3
122
+ ```
123
+
124
+ # to_h がブロックを受け取るように
125
+
126
+ ```
127
+ # 従来の to_h の使い方
128
+ ["Foo", "Bar"].map {|x| [x.upcase, x.downcase] }.to_h
129
+ #=> {"FOO"=>"foo", "BAR"=>"bar"}
130
+
131
+ # 新しい用法
132
+ ["Foo", "Bar"].to_h {|x| [x.upcase, x.downcase] }
133
+ #=> {"FOO"=>"foo", "BAR"=>"bar"}
134
+ ```
135
+
136
+ # Array#filter, Array#filter!, Enumerable#filter
137
+
138
+ - `Array#select`, `Array#select!`, `Enumerable#select` の別名
139
+ - (ruby 1.6 までの `Array#filter` は今の `Array#map!` と同じ)
140
+ - (ruby 1.8 から 2.5 には `Array#filter` はない)
141
+
142
+ # Dir#each_child, Dir#children
143
+
144
+ `.`, `..` を含まない `Dir.each_child`, `Dir.children` のインスタンスメソッド版
145
+
146
+ # Enumerable#chain
147
+
148
+ ```ruby
149
+ a1 = %w(1 2)
150
+ a2 = %w(3 4)
151
+ a3 = %w(5 6)
152
+ [a1, a2, a3].each{|ary| ary.each{|e| p e}} # 多重ループ
153
+ (a1+a2+a3).each{|e| p e} # 配列の時のみ
154
+ a1.chain(a2, a3).each{|e| p e}
155
+ (a1.each + a2.each + a3.each).each{|e| p e}
156
+ a1.chain(a2.reverse_each, a3).each{|e| p e} # each を持てば繋げられる
157
+ ```
158
+
159
+ # Enumerator::ArithmeticSequence
160
+
161
+ - 等差数列を提供するためのクラス
162
+ - Python のスライスに相当
163
+ - いろんなライブラリが対応していけばより便利に
164
+
165
+ ```ruby
166
+ 3.step(by: 2, to: 10)
167
+ (3..10)%2
168
+ ```
169
+
170
+ # Exception#full_message の引数追加
171
+
172
+ - `:highlight`, `:order`
173
+ - ruby 2.5.1 にもバックポート済み
174
+
175
+ # open のモードに x 追加
176
+
177
+ `File::EXCL` の代わりに使える `x` 追加 (C11 由来)
178
+
179
+ # Kernel#then
180
+
181
+ `Kernel#yield_self` の別名
182
+
183
+ # Kernel#Integer などに :exception
184
+
185
+ ```
186
+ Integer('hello')
187
+ #=> `Integer': invalid value for Integer(): "hello" (ArgumentError)
188
+ Integer('hello', exception: false) #=> nil
189
+ p system("ruby -e raise") #=> false
190
+ p system("ruby -e raise", exception: true)
191
+ #=> `system': Command failed with exit 1: ruby -e raise (RuntimeError)
192
+ ```
193
+
194
+ # system, exec などの close_others
195
+
196
+ - デフォルトが false に
197
+ - ruby 本体が開く fd は以前と変わらず `FD_CLOEXEC` を設定
198
+ - 拡張ライブラリが開く fd やプロセス起動時に継承した fd に影響
199
+
200
+ # KeyError.new, NameError.new
201
+
202
+ - :receiver, :key 追加
203
+ - Ruby レベルでも設定可能に
204
+ - `did_you_mean` との相性が良くなる
205
+
206
+ # 関数合成オペレータ
207
+
208
+ `Proc#<<`, `Proc#>>`
209
+
210
+ ```ruby
211
+ plus2 = -> x { x + 2 }
212
+ times3 = -> x { x * 3 }
213
+
214
+ times3plus2 = plus2 << times3
215
+ p times3plus2.(3) #=> 3 * 3 + 2 => 11
216
+ p times3plus2.(4) #=> 4 * 3 + 2 => 14
217
+
218
+ plus2times3 = times3 << plus2
219
+ p plus2times3.(3) #=> (3 + 2) * 3 => 15
220
+ p plus2times3.(5) #=> (5 + 2) * 3 => 21
221
+ ```
222
+
223
+ # String#split がブロック対応
224
+
225
+ ```ruby
226
+ "foo/bar/baz".split("/") {|s| p s } #=> "foo", "bar", "baz"
227
+ ```
228
+
229
+ # 2.6.0 での問題
230
+
231
+ # 2.6.0 の Net::HTTP のバグ
232
+
233
+ - 詳細: <https://mensfeld.pl/2019/01/exploring-a-critical-netprotocol-issue-in-ruby-2-6-0p0-and-how-it-can-lead-to-a-security-problem/>
234
+
235
+ # 2.6.0 の Net::HTTP のバグ
236
+
237
+ - <https://bugs.ruby-lang.org/issues/15468>
238
+ - マルチバイト文字の扱いの問題
239
+ - `String#byteslice` を使うべきところで `String#[]` を使っていた
240
+ - 使い方によってはセキュリティ問題が起きる
241
+ - 2.6.1 では修正済み
242
+
243
+ # 2.6.1 での問題
244
+
245
+ # 2.6 で bundler が default gem に
246
+
247
+ default gem とは?
248
+
249
+ - default gem : 標準添付ライブラリーだが gem で新しいバージョンに更新可能
250
+ - bundled gem : ruby と一緒にインストールされる gem (アンインストールも可能)
251
+
252
+ # bundler の不具合
253
+
254
+ - Ruby 2.6.1 の Bundler の不具合のお知らせ
255
+ <https://www.hsbt.org/diary/20190205.html#p02>
256
+
257
+ # bundler の不具合
258
+
259
+ - <https://bugs.ruby-lang.org/issues/15582>
260
+ - 1.17.2 そのままなら問題ない
261
+ - 2.0.1 や 1.7.3 をインストールすると壊れる
262
+ - <https://bugs.ruby-lang.org/issues/15469>
263
+ - default gem (csv, json など) の別バージョンが使えない
264
+
265
+ # bundler: 対処方法
266
+
267
+ - 2.6.2 を待つ
268
+ - `gem update --system`
269
+ - rbenv + ruby-build なら以下のようにパッチを適用しつつインストール
270
+
271
+ ```
272
+ curl -sSL \
273
+ https://bugs.ruby-lang.org/attachments/download/7631/15582-bundler-gemspec.patch \
274
+ https://bugs.ruby-lang.org/attachments/download/7635/r15469-bundler-final.patch |
275
+ rbenv install --patch 2.6.1
276
+ ```
277
+
278
+ # 2.6.2, 2.6.3 の予定
279
+
280
+ # 今後のリリース予定
281
+
282
+ - 2.6.2 で Unicode 12.0 対応予定 (3月?)
283
+ - 2.6.3 で Unicode 12.1 対応 (新元号対応) 予定 (4月?)
284
+ - (別リリースが挟まってバージョンがずれる可能性はある)
285
+
286
+ # もっと先の話
287
+
288
+ - 2.3 から入った `frozen_string_literal` は 3.0 ではデフォルトにならない
289
+ - キーワード引数が分離されるはず (`*rest` と `**kwrest` が混ざらなくなる)
290
+ - パターンマッチが入るかも
291
+ <https://bugs.ruby-lang.org/issues/14912>
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-znz-rubykansai85-ruby26
3
+ version: !ruby/object:Gem::Version
4
+ version: 2019.02.16
5
+ platform: ruby
6
+ authors:
7
+ - Kazuhiro NISHIYAMA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: "[第85回 Ruby関西 勉強会](https://rubykansai.doorkeeper.jp/events/85497)の発表資料です。"
28
+ email:
29
+ - zn@mbf.nifty.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.md
36
+ - Rakefile
37
+ - config.yaml
38
+ - pdf/rubykansai85-ruby26-ruby-2.6-update.pdf
39
+ - ruby-2.6-update.md
40
+ homepage: http://slide.rabbit-shocker.org/authors/znz/rubykansai85-ruby26/
41
+ licenses: []
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubygems_version: 3.0.1
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Ruby 2.6 Update
62
+ test_files: []