Rabbit Slide Show

Ruby 3.0.0 コネタ集

2021-03-24

Description

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

Text

Page: 1

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

Page: 2

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

Page: 3

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

Page: 4

Ractor
関連

Page: 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 `<main>'
4/14

Page: 6

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

Page: 7

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

Page: 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

Page: 9

互換性関連
のコネタ

Page: 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

Page: 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

Page: 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

Page: 13

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

Page: 14

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

Page: 15

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

Other slides