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