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: 27
dig (1)
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: 47
(2)
Page: 48
(1)
の仲間
Page: 49
(2)
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