rabbit-slide-znz-language-update-2018-ruby 2018.08.26
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.md +23 -0
- data/Rakefile +17 -0
- data/config.yaml +20 -0
- data/language-update-2018-ruby.md +170 -0
- data/pdf/language-update-2018-ruby-language-update-2018-ruby.pdf +0 -0
- metadata +64 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 269748b1afd7026c9a1b47ab3ac833dd14a0899be40ce0c98990bda6c42cc3dd
|
4
|
+
data.tar.gz: '0084c682748bdc76b919ce905eb8b91e95a617785f724ce4e228f205970fa7de'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bd109557571d759fce5f6674bc478b7f796141f1d81f86cd4493ebb94d57fe436917c3d235f442db880400b3978ed998f1928794b0b9e2aab8ecd24a6a0c6f70
|
7
|
+
data.tar.gz: '0682f399654b7ff50199801110db69b031318676963942bc75908842585290d7e0fe1b44605d6c5853ffa167c38e3ebe4e53e3c68c8e47bfcb92d4f0e7ae6b72'
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
language-update-2018-ruby.md
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Language Update 2018 - Ruby
|
2
|
+
|
3
|
+
[Learn Languages 2018](https://connpass.com/event/95443/) の Language Update の Ruby です。
|
4
|
+
|
5
|
+
## 作者向け
|
6
|
+
|
7
|
+
### 表示
|
8
|
+
|
9
|
+
rake
|
10
|
+
|
11
|
+
### 公開
|
12
|
+
|
13
|
+
rake publish
|
14
|
+
|
15
|
+
## 閲覧者向け
|
16
|
+
|
17
|
+
### インストール
|
18
|
+
|
19
|
+
gem install rabbit-slide-znz-language-update-2018-ruby
|
20
|
+
|
21
|
+
### 表示
|
22
|
+
|
23
|
+
rabbit rabbit-slide-znz-language-update-2018-ruby.gem
|
data/Rakefile
ADDED
@@ -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
|
data/config.yaml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
id: language-update-2018-ruby
|
3
|
+
base_name: language-update-2018-ruby
|
4
|
+
tags:
|
5
|
+
- ruby
|
6
|
+
presentation_date: 2018/08/26
|
7
|
+
version: 2018.08.26
|
8
|
+
licenses: []
|
9
|
+
slideshare_id: language-update-2018-ruby
|
10
|
+
speaker_deck_id: language-update-2018-ruby
|
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,170 @@
|
|
1
|
+
# Language Update 2018 - Ruby
|
2
|
+
|
3
|
+
author
|
4
|
+
: Kazuhiro NISHIYAMA
|
5
|
+
|
6
|
+
content-source
|
7
|
+
: Learn Languages 2018
|
8
|
+
|
9
|
+
date
|
10
|
+
: 2018/08/26
|
11
|
+
|
12
|
+
allotted-time
|
13
|
+
: 10m
|
14
|
+
|
15
|
+
theme
|
16
|
+
: lightning-simple
|
17
|
+
|
18
|
+
# 自己紹介
|
19
|
+
|
20
|
+
- 西山 和広
|
21
|
+
- Ruby のコミッター
|
22
|
+
- twitter, github など: @znz
|
23
|
+
|
24
|
+
# agenda
|
25
|
+
|
26
|
+
- リリース間隔 について
|
27
|
+
- 2.4.0, 2.5.0 での変更点
|
28
|
+
- 2.4.0 での大きな非互換
|
29
|
+
- 2.5.0 での主な非互換
|
30
|
+
- 2.6.0 での大きな話
|
31
|
+
|
32
|
+
# LLoT 以降のリリースなど
|
33
|
+
|
34
|
+
- 2016-08-27 LLoT (前回の Language Update)
|
35
|
+
- 2016-12-24 2.4.0
|
36
|
+
- 2017-03-31 2.1 EOL
|
37
|
+
- 2017-12-25 2.5.0
|
38
|
+
- 2018-03-31 2.2 EOL
|
39
|
+
- 2018 クリスマス 2.6.0 リリース予定
|
40
|
+
- EOL は3年+年度末までが続いている
|
41
|
+
- 参考: <https://bugs.ruby-lang.org/projects/ruby/wiki/ReleaseEngineering>
|
42
|
+
|
43
|
+
# 2.4.0, 2.5.0 での変更点
|
44
|
+
|
45
|
+
- 速くなりました
|
46
|
+
- 機能追加されました
|
47
|
+
|
48
|
+
といった話はいつものことなので省略
|
49
|
+
|
50
|
+
# 2.4.0, 2.5.0 での変更点
|
51
|
+
|
52
|
+
- 標準添付ライブラリの gem 化が進んだ
|
53
|
+
- 2.6.0 でもさらに進む予定
|
54
|
+
- `Thread#report_on_exception` でスレッドが例外終了時のバックトレース
|
55
|
+
- 2.4.0 で追加
|
56
|
+
- 2.5.0 でデフォルト true に
|
57
|
+
|
58
|
+
# 2.4.0 での大きな非互換
|
59
|
+
|
60
|
+
- Unifying Fixnum and Bignum into Integer
|
61
|
+
- 詳細は RubyKaigi 2016 の発表を参照
|
62
|
+
- <http://rubykaigi.org/2016/presentations/tanaka_akr.html>
|
63
|
+
|
64
|
+
# Fixnum, Bignum とは?
|
65
|
+
|
66
|
+
- 実装の詳細で一般ユーザーにみせる必要はない
|
67
|
+
- Fixnum: 32bit 環境なら 31bit 以下の整数が効率よく扱える
|
68
|
+
- Bignum: 大きな整数もメモリーの許す限り扱える
|
69
|
+
- 普通のユーザーは区別する必要がないので Integer に統合
|
70
|
+
|
71
|
+
# 影響
|
72
|
+
|
73
|
+
- 利点: シンプルになる
|
74
|
+
- 教える人にとっても勉強する人によっても良い
|
75
|
+
- 欠点: 非互換
|
76
|
+
- 特に拡張ライブラリーに影響
|
77
|
+
|
78
|
+
# 非互換の例
|
79
|
+
|
80
|
+
- Sequel の DSL
|
81
|
+
- `add_column :column, Bignum` → `:Bignum`
|
82
|
+
- 影響のあった拡張ライブラリ : オブジェクトをダンプ/ロードするようなものがほとんどだった
|
83
|
+
- ext/json, msgpack, syck, yajl, oj, ox, ruby-gnome2, etc.
|
84
|
+
- 2.4.0 リリース前に対応済み
|
85
|
+
|
86
|
+
# Version Dependencies
|
87
|
+
|
88
|
+
- json に対する pessimistic (悲観的な) version dependency `(~> 1.3)`
|
89
|
+
- 1.3 以上 2.0 未満という意味
|
90
|
+
- 間接的にバージョン制限が入っていることが多かった
|
91
|
+
- 問題点
|
92
|
+
- json 1.x の最新 (当時) 1.8.3 は ruby 2.4 非対応
|
93
|
+
- 対応済みの json 2.0.x がバージョン制限で入らない
|
94
|
+
|
95
|
+
# 解決
|
96
|
+
|
97
|
+
- stdlib なライブラリーはバージョン依存をつけないのが推奨
|
98
|
+
<https://www.hsbt.org/diary/20160829.html>
|
99
|
+
- 結局 json 1.8.5 がリリースされて解決
|
100
|
+
<https://www.hsbt.org/diary/20170112.html>
|
101
|
+
|
102
|
+
# 2.5.0 での主な非互換
|
103
|
+
|
104
|
+
- rescue/else/ensure が do/end ブロック内にも直接書ける
|
105
|
+
- トップレベルの定数検索は削除
|
106
|
+
|
107
|
+
```
|
108
|
+
2.4 以前:
|
109
|
+
IO::GC #=> warning: toplevel constant GC referenced by IO::GC
|
110
|
+
2.5 以降:
|
111
|
+
IO::GC #=> NameError (uninitialized constant IO::GC)
|
112
|
+
```
|
113
|
+
|
114
|
+
# backtrace の順番
|
115
|
+
|
116
|
+
2.5.0 から新しい挙動:
|
117
|
+
|
118
|
+
```
|
119
|
+
$ ruby -r time -e 'Time.parse("")'
|
120
|
+
Traceback (most recent call last):
|
121
|
+
2: from -e:1:in `<main>'
|
122
|
+
1: from .../time.rb:370:in `parse'
|
123
|
+
.../time.rb:254:in `make_time': no time information in "" (ArgumentError)
|
124
|
+
```
|
125
|
+
|
126
|
+
状況によっては以前と同じ挙動:
|
127
|
+
|
128
|
+
```
|
129
|
+
$ ruby -r time -e 'Time.parse("")' 2>&1 | cat
|
130
|
+
.../time.rb:254:in `make_time': no time information in "" (ArgumentError)
|
131
|
+
from .../time.rb:370:in `parse'
|
132
|
+
from -e:1:in `<main>'
|
133
|
+
```
|
134
|
+
|
135
|
+
- experimental なので今後の議論次第で変わるかも?
|
136
|
+
- 参考: Feature #8661 <https://bugs.ruby-lang.org/issues/8661>
|
137
|
+
|
138
|
+
# 2.6.0 の大きな変更点の一部
|
139
|
+
|
140
|
+
- safe level 廃止に向けた変更が進む
|
141
|
+
- endless range : `(1..)`
|
142
|
+
- JIT (Just-in-time) 対応が入る
|
143
|
+
|
144
|
+
# safe level 廃止に向けた変更
|
145
|
+
|
146
|
+
- `$SAFE` が 0 に戻せるようになる
|
147
|
+
- `Proc#call` で切り替わらなくなる
|
148
|
+
|
149
|
+
# endless range
|
150
|
+
|
151
|
+
- `(1..Float::INFINITY)` や `1.step` の代わりに `(1..)`
|
152
|
+
- `when (1..)` などではかっこが必要
|
153
|
+
|
154
|
+
# JIT 対応
|
155
|
+
|
156
|
+
- 実行中に gcc や clang でコンパイルする
|
157
|
+
- とりあえず仕組みが入った段階
|
158
|
+
- プログラムによっては遅くなることもある
|
159
|
+
- 高速化などは今後の課題
|
160
|
+
|
161
|
+
# まとめ
|
162
|
+
|
163
|
+
- x.y.0 リリースは毎年クリスマス
|
164
|
+
- EOL は3年+年度末までが続いている
|
165
|
+
- 2.4.0, 2.5.0 での変更点
|
166
|
+
- 2.4.0 での大きな非互換
|
167
|
+
- json gem で起きた問題の話
|
168
|
+
- 2.5.0 での主な非互換
|
169
|
+
- 2.6.0 での大きな変更点の一部
|
170
|
+
- safe level, endless range, JIT
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-znz-language-update-2018-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2018.08.26
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kazuhiro NISHIYAMA
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-08-26 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: "[Learn Languages 2018](https://connpass.com/event/95443/) の Language
|
28
|
+
Update の Ruby です。"
|
29
|
+
email:
|
30
|
+
- zn@mbf.nifty.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- ".rabbit"
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- config.yaml
|
39
|
+
- language-update-2018-ruby.md
|
40
|
+
- pdf/language-update-2018-ruby-language-update-2018-ruby.pdf
|
41
|
+
homepage: http://slide.rabbit-shocker.org/authors/znz/language-update-2018-ruby/
|
42
|
+
licenses: []
|
43
|
+
metadata: {}
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
requirements: []
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 2.7.6
|
61
|
+
signing_key:
|
62
|
+
specification_version: 4
|
63
|
+
summary: Language Update 2018 - Ruby
|
64
|
+
test_files: []
|