読者です 読者をやめる 読者になる 読者になる

ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

Ruby 2.1.0がリリースされたそうですが

ちなみにリリース日はクリスマスとのことです。気になったのをいくつかピックアップしてご紹介。

新しく分数と複素数リテラルが追加された

1/2r # 1/2(Rational(1, 2))
0.333_333_333r # Rational(333_333_333, 1_000_000_000)
1.2i # 1.2i(Complex(0, 1.2))

有理数については小数を与えた場合、それを有限小数と見立てた場合の既約分数になります。これは今までもそうでしたね。rとiを同時に指定すると有理数の虚数となります。

def式の戻り値がSymbolになった

今まではnilでした。こうすると「private def hoge()」みたいなのが書けるようになります。

private def hoge; end
TypeError: nil is not a symbol
from (pry):2:in `private'

ちなみに2.0.0までだと上のようになります。

ガベージコレクションの刷新

RGenGCというあたらしいガベージコレクションを使うようになりました。世代別GCをもう少し発展させたものらしいですが、この辺の戦略について書くにはもう少し勉強が必要そうです。
RGenGCの発表資料を読んだ - oupoの日記

Refinementの正式実装

Ruby2.0で実装される予定でしたが先送りされたものです*1。モンキーパッチやオープンクラスによる拡張の影響を限定する機能だそうで、using ModuleNameというふうにすると特定のスコープでのみその拡張が有効になるのだとか。モンキーパッチによる野放図な拡張を防ぐ効果があると期待されていたようですが、リリース直前にいろいろわけあって中途半端なことになっていたようです。しかし、今回のアップデートにてはれて正式実装となりました。
Rubyist Magazine - Refinementsとは何だったのか

Array#to_h

[[key, value], [key, value], .. ]というかんじの、2つの要素を持った配列の配列をハッシュに変換します。同じ値のkeyが複数あるときはいちばん最後に現れたvalueに置き換えられます。

気になったのはこんなところ。他にもいろいろ改善点があります。
Ruby2.1.0のリリースノート(英語)

*1:2.0.0でも警告が出るものの限定的に使えるらしい