前日の宣伝になってしまうんですが明日の RubyKaigi 2022 で動的に RBS を生成してみた話をします。 Let's collect type info during Ruby running and automaticall - RubyKaigi 2022 内容としては上に書いてある通りなんですが Ruby の実行中に型情報を収…
今週は Numbered Parameters の _1 を it に置き換えるチケットがありました。 前回のまとめ [Raises Exception for Range#last(n) with Float::INFINITY] Range の終端が Float::INFINITY の場合に無限ループする (6..Float::INFINITY).last(1) # => infini…
今週は lazy.take(0) した時に期待した挙動にならないというバグ報告がありました。 前回のまとめ [Bug #18972] String#byteslice should return BINARY (aka ASCII-8BIT) Strings String#byteslice の戻り値のエンコーディングが BINARY 文字列でないという…
今週はメモ化を行う API を Ruby のコア機能に入れる議論がありました。 前回のまとめ [eature #18934] Proposal: Introduce method results memoization API in the core メモ化する API を Ruby のコア機能に導入しようという提案 メモ化とは1回目のメソッ…
今週は **nil を許容する提案などがありました。 前回のまとめ [Feature #18959] Handle gracefully nil kwargs eg. **nil 以下のように『値が存在している時のみ』 Hash に値を追加したいケースがある { some: 'value', **({ id: id } if id.present?), # i…
今週は Enumerator.product が新しく追加されました。 前回のまとめ [Bug #18953] Array#uniq doesn't evaluate the given block when the size of the array is one 配列の要素が1つの場合に Array#uniq のブロックが呼ばれないんだけどこれは期待する挙動…
今週は CRuby のインデントが全てスペースに展開されるチケットがありました。 前回のまとめ [Bug #18883] parse.y: trailing comma cannot coexist with star 末尾に , がある時に * 付きの多重代入がうまく動作しないというバグ報告 x, y = 1, 2 # OK => x…
今週は Time.new に 24時 を指定してタイムゾーンを渡した時に意図しない結果が返ってくるバグチケットがありました。 前回のまとめ [Bug #18929] ruby master looks slower than 3.1 on a micro benchmark of short-lived objects 次のように短命なオブジェ…
今週は :"@=".inspect の結果が Ruby で評価できない文字列を返すというバグ報告がありました。 前回のまとめ [Bug #18905] :"@=".inspect is non-evaluatable :"@=".inspect の結果が Ruby で評価できない文字列を返すというバグ報告 # :@= を返すが p :"@=…
今週は Ractor.make_shareable(obj) 時に obj.make_shareable を呼び出せるようにする提案がありました。 前回のまとめ [Bug #18896] Shellwords.escape(nil) returns "empty" string Ruby には UNIX Bourne シェルの単語分割規則に従った文字列分割と文字列…
今週は Module#autoload で意図しない定数が定義された時に対応するチケットがありました。 前回のまとめ [Feature #18815] instance_{eval,exec} vs Proc#>> 次のように Proc#>> した結果は instance_eval / instance_exec に適さない measure = proc { p "…
今週はトップレベルで include したあとにクラス定義すると予期しないクラスを再オープンするというバグ報告がありました。 前回のまとめ [Feature #18832] Do not have class/module keywords consider ancestors of Object 次のように include M した後に …
前回のまとめ [Bug #18826] Symbol#to_proc inconsistent, sometimes calls private methods #tap に & 渡しでメソッドを呼び出す場合に private や protected メソッドを呼び出す事ができるバグ報告 class Test protected def referenced_columns puts "hel…
今週は標準ライブラリをパターンマッチに対応させる提案がありました。 前回のまとめ [Feature #18821] Expose Pattern Matching interfaces in core classes Ruby のいくつかの標準ライブラリをパターンマッチに対応させるチケット 提案されているのは以下…
今週は除算の切り上げを行う Numeric#ceildiv を追加する提案がありました。 前回のまとめ [Feature #18809] Add Numeric#ceildiv 「除算の切り上げ」を実現する Numeric#ceildiv を追加する提案 「除算の切り上げ」とは、最も近い整数に切り上げられる除算…
今週は Refinements で protected されたメソッドが呼び出せないバグ報告がありました。 前回のまとめ [Bug #18806] protected methods defined by refinements can't be called Refinements で定義された protected がメソッドが呼び出せないというバグ報告…
今週はパターンマッチの #deconstruct を拡張する提案がありました。 前回のまとめ [Feature #18788] Support passing Regexp options as String to Regexp.new Regexp.new の第二引数にオプションを渡すことができる Regexp.new('foo', Regexp::IGNORECASE …
[Bug #18768] Inconsistent behavior of IO, StringIO and String each_line methods when return paragraph and chomp: true passed 以下のように String#each_line StringIO#each_line File#each_line に特定の引数を渡したときの挙動に一貫性がないという…
元々のきっかけは以下のように Ruby で UTF-8 の波文字を SJIS に変換しようとしたらエラーになってしまいました。 # UTF-8 の 〜 文字を SJIS に変換するとエラーになる # error: `encode': U+301C from UTF-8 to Windows-31J (Encoding::UndefinedConversi…
今週は Array#undigits の提案がありました。 前回のまとめ [Feature #18762] Add an Array#undigits that compliments Integer#digits Integer#digits と対になる Array#undigits を追加する提案 Integer#digits は位取り記数法で表記した数値を配列を返す …
今週は右代入を TracePoint でフックする場合のバグ報告がありました。 前回のまとめ [Bug #18753] lineno= is not returning an integer ARGF.send(:lineno=, 1) の戻り値が nil になっているというバグ報告 # これは 1 を返す p (ARGF.lineno=1) # => 1 # …
今週はレシーバに対して Kernel#p が呼び出せるようにする提案がありました。 前回のまとめ [Feature #18736] self-p for method chain 次のようにメソッドチェーンの間にレシーバを出力したいという要望チケット class Object def sp(method=nil, *args, &b…
今週は Kernel#then に引数を渡せるようにする提案がありました。 前回のまとめ [Feature #18690] Allow Kernel#then to take arguments Kernel#then に引数を追加する提案 通常はレシーバをブロックの引数として受け取るが 1.5.then{|x| Math.atan(x)} #the…
今週は MatchData#[] のバグ報告などがありました。 前回のまとめ [Bug #18670] MatchData#[start, length] pads nil values when negative start is given MatchData#[] にマイナス値を渡すと nil で埋めされた配列を返すバグ報告 # [-1, 5] は最後の値から…
Ruby 3.2.0 Preview1 が出ました。 RUby 3.1.0 Preview1 が去年の11月に出たことを考えると Ruby 3.2 の Preview1 は出るのが早かったですね? Ruby 3.2.0 Preview 1 リリース Ruby 3.2.0 Preview1 の新機能としては WASIベースのWebAssemblyサポート と Reg…
Ruby は定期的に Unicode の新しい規格に対応しているんですがその時になにが行われているのかが気になったので調べてみました。 この記事では『Ruby の Unicode 14.0.0 対応がなにを行っているか』を追っていきたいと思います。 ちなみに Unicode 14.0.0 は…
今週は正規表現マッチするときのタイムアウトを導入するチケットがマージされました。 前回のまとめ [Feature #17837] Add support for Regexp timeouts 正規表現を比較する時にタイムアウトの概念を導入するチケット 色々と議論があったが最終的にはタイム…
今週は注釈付き代入演算子を提案するチケットなどがありました。 前回のまとめ [Feature #18626] 注釈付き代入演算子 ()= の提案 以下のような注釈付き代入演算子の提案になる class Object # 代入するときの処理をフックする def self.()= (what) what.is_a…
今週はブロックの引数に関するバグチケなどチケットがありました。 [Bug #18635] Enumerable#inject without block/symbol will return values or raise LocalJumpError ブロック引数のない Enumerable#inject を呼び出すと『値が返ってくるか例外が発生する…
メタプロRuby本を参考にしつつ Ruby の呼び出し可能オブジェクトについてまとめてみました。 呼び出し可能オブジェクトとは Ruby のブロックは『呼び出すメソッドに対して何かしらの処理を外から渡す』記法になります。 # 『配列の要素を2倍にする』という処…