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.
@@ -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
@@ -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
@@ -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: 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
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: []