💎

Ruby 3.2 - 無くなったクラスや定数

2022/12/04に公開

Ruby 3.2 アドベントカレンダーの4日目の記事です。

https://qiita.com/advent-calendar/2022/ruby32


無くなったクラスや定数

Fixnum / Bignum

Feature #12005: Unify Fixnum and Bignum into Integer - Ruby master - Ruby Issue Tracking System

Ruby 2.4 から Fixnum と Bignum は deprecated になって Integer の別名になった。

Warning[:deprecated] = true
Fixnum  #=> Integer
#=> warning: constant ::Fixnum is deprecated
Bignum  #=> Integer
#=> warning: constant ::Bignum is deprecated

Ruby 3.2 でとうとう無くなった。

Fixnum
#=> uninitialized constant Fixnum (NameError)
Bignum
#=> uninitialized constant Bignum (NameError)

無くなるまで長かったな…。

Random::DEFAULT

Ruby 2.7 までは Random::DEFAULT はデフォルトの乱数生成器(?よくわかってない)の Random オブジェクトを返していたんだけど、スレッドセーフじゃないとかで Ruby 3.0 で Random::DEFAULT は deprecated になって Random を返すようになった。

Warning[:deprecated] = true
Random::DEFAULT  #=> Random
#=> warning: constant Random::DEFAULT is deprecated

Ruby 3.2 で無くなった。

Random::DEFAULT
#=> uninitialized constant Random::DEFAULT (NameError)

Struct::Group / Struct::Passwd

require 'etc' すると何故か Struct::GroupStruct::Passwd が作られてたんだけど、実体は Etc::GroupEtc::Passwd だった。

Ruby 3.0 からは deprecated になってた。

Warning[:deprecated] = true
require 'etc'
Struct::Group   #=> Etc::Group
#=> warning: constant Struct::Group is deprecated
Struct::Passwd  #=> Etc::Passwd
#=> warning: constant Struct::Passwd is deprecated

Ruby 3.2 で無くなった。

require 'etc'
Struct::Group   #=> Etc::Group
#=> uninitialized constant Struct::Group (NameError)
Struct::Passwd  #=> Etc::Passwd
#=> uninitialized constant Struct::Passwd (NameError)

ていうかなんで Struct 配下に存在してたんだろ。

Discussion