Text
Page: 1
Ruby 2.3.0 の新
機能について
Kazuhiro NISHIYAMA
第70回 Ruby関⻄ 勉強会
2016-01-09
Page: 2
自⼰紹介
twitter や github では @znz
Page: 3
Ruby 関連
Ruby (CRuby) のコミッター
Ruby 関係でいろいろ
るびま (Rubyist Magazine) とか
http://magazine.rubyist.net/
るりま (Ruby リファレンスマニュア
ル) とか
http://docs.ruby-lang.org/ja/
Ruby 関連のイベントでの発表
Page: 4
Ruby 2.3.0
2015-12-25 リリース
2.3 系列最初のリリース
Page: 5
新機能を知るには?
www.ruby-lang.org のリリース
アナウンス
配布物の ファイル
それらを元に紹介を書いている
ブログ記事
Page: 6
Frozen String Literal プ
ラグマ (1)
Ruby 2.1 から が
最適化
追加の pull request が
社会問題化
新しいマジックコメントとコマ
ンドラインオプション追加
Page: 7
Frozen String Literal プ
ラグマ (2)
結果: 新しいマジックコメント追
加の pull request 増加か(?)
要経過観察
Page: 8
Frozen String Literal プ
ラグマ (3)
shebang や coding マジックコメ
ントがあれば、その後
Page: 9
Frozen String Literal プ
ラグマ (4)
でも でも良い
Page: 10
Frozen String Literal プ
ラグマ (5)
大⽂字でも良い
しかし typo していると効かない
のでしっかり動作確認しましょう
Page: 11
Frozen String Literal プ
ラグマ (6)
コマンドラインオプションでデフ
ォルトの挙動変更
Page: 12
Frozen String Literal プ
ラグマ (7)
影響を受けなくする (今までの挙動
にする) には
標準添付ライブラリには追加済み
Page: 13
Frozen String Literal プ
ラグマ (8)
Page: 14
Frozen String Literal プ
ラグマ (9)
ruby --debug=frozen-string-
literal foo.rb で実⾏すると⽂字列
の⽣成場所がわかる (ruby -d
foo.rb でも有効になる)
Page: 15
Frozen String Literal プ
ラグマ (10)
個⼈的にはおすすめは
速度が必要なファイルだけ
破壊的変更が必要なリテラルは
で mutable にする
互換性が必要なら、引き続き
Page: 16
, (1)
は変更可能な String を
返す
は freeze された String
を返す
覚え⽅: ⽔は 0 度以下で凍るから
Page: 17
, (2)
演算⼦の優先順位に注意が必要
Page: 18
, (3)
は最適化される
は最適化されない
個⼈的感想としては、広く使わ
れるかどうかはよく分からない
Page: 19
safe navigation
operator (1)
セーフナビゲーション演算⼦
⽇本語の定訳は (まだ) ない
lonely operator (ぼっち演算⼦
) とも呼ばれている
Page: 20
safe navigation
operator (2)
C#, Groovy, Swift などの に
似た機能
は採用できなかったので
開発版の途中までは だった
Active Support の に相当
Page: 21
Active Support
r52232 で修正されているように
ActiveSupport ではなく Active
Support が正式名称
http://railsguides.jp/
api̲documentation̲guidelines.h
tml#%E8%AA%9E%E8%AA%BF
Page: 22
safe navigation
operator (3)
相当
Page: 23
safe navigation
operator (4)
が常に呼ばれる
が呼ばれるかは が
かどうかによる
Page: 24
safe navigation
operator (5)
属性の代⼊形式も使える
Page: 25
safe navigation
operator (6)
が でも が呼ばれる
#11816 に議論あり
Page: 26
safe navigation
operator (7)
に相当
Page: 28
dig (2)
JSON をパースした結果など用
, ,
,
Page: 29
did̲you̲mean gem (1)
did̲you̲mean gem がバンド
ルされた
NameError と
NoMethodError の発⽣時に修
正候補表⽰
Page: 30
did̲you̲mean gem (2)
Page: 31
did̲you̲mean gem (3)
無効にするには
Page: 32
did̲you̲mean gem (4)
内部的にサポートが増えて速度的
にもほぼ問題なくなっている
Feature #10881 で
が追加
された
Feature #11777 で
が追
加されて を使わなく
なった
Page: 33
RubyVM::InstructionSeq
uence (1)
experimental feature
RubyVM::InstructionSequenc
e#to̲binary
と .load̲from̲binary
コンパイル済みバイナリを読み
書き
Page: 34
RubyVM::InstructionSeq
uence (2)
使用例として yomikomu gem
https://github.com/ko1/
yomikomu
詳細は http://atdot.net/~ko1/
diary/201512.html#d13
Page: 35
さまざまなパフォーマンス改
善 (1)
https://www.ruby-lang.org/ja/
news/2015/12/25/ruby-2-3-0-
released/ より
method entry データ構造の再
検討
新しい table data 構造
最適化
Page: 36
さまざまなパフォーマンス改
善 (2)
オブジェクトアロケーションと
メソッド呼び出しのコードにお
けるマシンコードレベルでの最
適化
よりスマートな instance
variable データ構造
Page: 37
さまざまなパフォーマンス改
善 (3)
における
exception: false キーワード引
数のサポート
Page: 38
に
キーワード引数
/
を発⽣する代わりに
/
を返す
Page: 39
NEWS
ここまでが www.ruby-lang.org
で取り上げられていた新機能 (と
その関連の話)
ここからは NEWS からその他の
新機能を抜粋
Page: 40
indented here
document (1)
の代わりに
Page: 41
indented here
document (2)
⼀番浅いインデントが削られる
Page: 42
indented here
document (3)
2.3.0 では の場合にバグあり
Page: 43
(要素を返す) のイン
デックスを返すバージョン
Page: 44
no longer
rescues exceptions
Page: 45
new Encoding::IBM037
(alias ebcdic-cp-us;
dummy)
EBCDIC は「主にIBM系のメイ
ンフレームやオフィスコンピ
ュータなどで使用されている」
(Wikipedia より)
ASCII とは非互換なので
dummy
Page: 46
(1)
,
inverse version of
Page: 50
キーが存在しない時の挙動が
と同様の
Page: 51
, , ,
(1)
包含関係を調べられる
Page: 52
, , ,
(2)
全順序ではないので は定
義されていない
Page: 53
を などでそのまま使える
ようになる
Page: 54
deprecated だが互換性のために
残している定数を参照した時に警
告を表⽰する機能
Page: 55
,
正の数か負の数かを調べるメソッ
ド
Page: 56
close すると無限の nil を push し
たかのような動作をする
Page: 57
/
Unicode のバージョンが 7.0.0
から 8.0.0 に上がった
Page: 58
に キー
ワード引数
frozen-string-literal を考慮すると
となるのが
とかける
Page: 59
,
の名前の取得・設定を⾏
うAPIが追加された
デバッグなどで識別したい時に
便利
Page: 60
での例外抑制
で
が発⽣する代わりに自動でエス
ケープされるようになった
Feature #11801 rb̲inspect
shouldn't raise error even if
calling inspect returns non
compatible strings
Page: 61
済み の の
例外抑制
と書いていたのが
だけでよくなった
Page: 62
が
deprecated
が呼ばれた時に
deprecated だと警告が出るよ
うになった
Page: 63
passive mode がデフォルトに
なった
で設
定可能
Page: 64
のデフ
ォルトが から (秒) に変
わった
Page: 65
net-telnet gem として外だしさ
れた
https://github.com/ruby/net-
telnet
bundled gem として配布には含
まれる
Page: 66
rake
rake も ruby のレポジトリに直
接含まれるのはやめて bundled
gem になった
Page: 67
と が
obsolete になった
を 2 以上に設定しようと
すると
Page: 68
⾼速化
が C 拡張で⾼速
化された
https://github.com/ruby/
ruby/pull/1164
最大約7倍
ワーストケースでも約3倍
Page: 69
まとめ
いろんな新機能が追加された
いろいろと⾼速化された
紹介しきれなかったものは
NEWS 参照
https://github.com/ruby/
ruby/blob/v2̲3̲0/NEWS