Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby 3.0.0 コネタ集

Ruby 3.0.0 コネタ集

[Fukuoka.rb 200回 LT大会 (#202) - connpass](https://fukuokarb.connpass.com/event/206956/)での発表資料です

Kazuhiro NISHIYAMA

March 24, 2021
Tweet

More Decks by Kazuhiro NISHIYAMA

Other Decks in Programming

Transcript

  1. Ruby 3.0.0 コネタ集
    Kazuhiro NISHIYAMA
    Fukuoka.rb 200回 LT大会 (#202)
    2021-03-24
    株式会社Ruby開発
    Powered by Rabbit 2.2.1

    View full-size slide

  2. 自己紹介
    西山 和広
    Ruby のコミッター
    twitter, github など: @znz
    株式会社Ruby開発 www.ruby-dev.jp
    1/14

    View full-size slide

  3. はじめに
    LT なので内容はコネタ集です
    2/14

    View full-size slide

  4. Ractor
    関連

    View full-size slide

  5. Ractor で SEGV
    3.0.0 では SEGV
    コア実装の experimental な機能は
    SEGV バグがみつけやすいかも?
    % ruby -e Ractor.current.dup
    -e:1:in `dup': allocator undefined for Ractor (TypeError)
    from -e:1:in `'
    4/14

    View full-size slide

  6. Ractor をまたぐ Thread
    Ractor 終了時なら Thread がそのまま
    別 Ractor に移動可能
    他の制限にひっかかって問題が起きる可
    能性は未発見
    % ruby -W0 -e 'r=Ractor.new{p Thread.new{loop{}}}; p r.take'
    #
    #
    5/14

    View full-size slide

  7. Ractor as global Queue
    main Ractor を Queue 代わりに使えるかも?
    % ruby -e 'Ractor.current.send("foo"); p Ractor.receive'
    "foo"
    6/14

    View full-size slide

  8. shareable の影響あり
    ただし shareable ではないオブジェクトはコ
    ピーされてしまうので Queue 代わりには使いに
    くい
    % ruby -e 'Ractor.current.send("foo".tap{|x|p x.object_id});
    p Ractor.receive.tap{|x|p x.object_id}'
    60
    80
    "foo"
    7/14

    View full-size slide

  9. 互換性関連
    のコネタ

    View full-size slide

  10. frozen_string_literal
    frozen_string_literal: true magic
    comment 対応を 3.0.0 以降のみで確認すると対
    応漏れする可能性あり
    % ruby --enable=frozen_string_literal -e 'p "#{}".frozen?'
    false
    string interpolation (文字列補間) があると
    frozen にならなくなった
    9/14

    View full-size slide

  11. Warning[:deprecated]
    ruby -w や ruby -v で $VERBOSE = true に
    すると Warning[:deprecated] も true にな
    るが、プログラム中で $VERBOSE = true にし
    ても Warning[:deprecated] は false のま

    % ruby -e 'p Warning[:deprecated]'
    false
    % ruby -w -e 'p Warning[:deprecated]'
    true
    % ruby -e '$VERBOSE=true; p Warning[:deprecated]'
    false
    10/14

    View full-size slide

  12. ruby -T
    $SAFE 関連が消えて -T オプションが消えた
    ruby 3.0:
    % ruby -T0 -e 0
    ruby: invalid option -T (-h will show valid options) (RuntimeError)
    ruby 2.7:
    % ruby -T0 -e 0
    ruby: warning: ruby -T will be removed in Ruby 3.0
    将来何か他の意味に使われるかも?
    11/14

    View full-size slide

  13. $SAFE / $KCODE
    普通のグローバル変数になった (これも普通は使
    わない)
    % ruby -e '$KCODE = "foo"; p $KCODE'
    "foo"
    12/14

    View full-size slide

  14. TRUE / FALSE / NIL
    ついに消えたので普通の定数として利用可能 (普
    通は使わない)
    % ruby -e 'NIL = :dummy; p NIL.nil?'
    false
    13/14

    View full-size slide

  15. おわり
    Ractor はまだバグがありそうなので探
    すと面白いかも
    気付きにくい非互換もあるので複数
    ruby バージョン対応するときには注意
    長い間残っていて 3.0 で消えているもの
    があります
    14/14
    Powered by Rabbit 2.2.1

    View full-size slide