Rabbit Slide Show

Ruby 2.3.0 の新機能について

2016-01-09

Description

第70回 Ruby関西 勉強会で Ruby 2.3.0 の新機能の紹介などの話をしたときのスライドです。

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

Other slides