2020-01-01から1年間の記事一覧

Ruby 3.0.0 preview1 がリリースと非推奨の警告がデフォルトではでなくなる予定

Ruby 3.0.0 preview1 がリリースされました。めでたい。 Ruby 3.0.0 Preview 1 Released NEWS 気になる機能はあとでまとめるとして NEWS には載ってなかった変更点をちょっと書きます。 ただし、この変更は Ruby 2.7.2 で取り込まれる予定なので Ruby 3.0.0 …

2020/09/24 今週の気になった bugs.ruby のチケット

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #16828] Introduce find patterns Ruby 3.0 ではパターンマッチに以下のようなサポートを追加する # 前方に * を使ったパター…

Ruby の Ractor で sleep sort をやってみた

簡単にやってみた。 $stdout.sync = true puts "かいし!!!" data = (1..10).to_a.shuffle pp data ractors = data.map { |i| Ractor.new(i) { |it| # バッファリングを無効化 $stdout.sync = true sleep it / 5.0 puts it } } # 待ち処理 ractors.map(&:t…

Ruby のメソッド呼び出しと変数参照について注意すること

最近、ハマっている人が何人書いたのでちょっとまとめてみます。 Ruby のメソッド呼び出し Ruby ではメソッドを呼び出す場合に他の言語と比較して『() を省略してメソッドを呼び出す事』ができます。 def hoge(a = nil) "#hoge(#{a})" end # 括弧がなくても…

2020/09/17 今週の気になった bugs.ruby のチケット

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #17171] Why is the visibility of constants not affected by private? 次のように Module#private に引数を渡さなかった場…

Ruby で明示的に名前を指定して親クラスのメソッドを呼ぶ

自身の親メソッドを呼ぶ 自身と同じ名前の親メソッドを呼ぶ場合は super が利用できます。 def value "Super#value" end end class Sub < Super def value # Super#value を呼ぶ super end end p Sub.new.value # => "Super#value" では、異なるメソッドから…

2020/09/11 今週の気になった bugs.ruby のチケット

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Bug #15412] OpenStruct error when attribute is called 'method' OpenStruct は次のように要素にアクセスする事ができる require "o…

RubyKaigi Takeout 2020 の延長線で盛り上がってた Symbol#to_s について

RubyKaigi Takeout 2020 お疲れ様でした。 今回はオンラインということではじめて参加したんですが興味深い内容の話があって楽しかったです。 特に sawanobori からのサンダル紹介、焚き火で飯を炊いて魚を焼くコミッタの日常配信はニューノーマルを感じまし…

2020/09/04 今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ Version number bumped to 3.0.0 from 2.8.0 (tentative) 開発版の Ruby が 2.8 から 3.0 になった、めでたい これでほぼほぼ 3.0 がリ…

Ruby 3.0 で変わる Module#include の挙動

今日の RubyKaigi Takeout 2020 の Ruby Committers vs the World でチラッと話が出たのでちょっとまとめでみました。 該当チケット:Bug #9573: descendants of a module don't gain its future ancestors, but descendants of a class, do - Ruby master -…

Ruby で ActiveSupport の in_groups_of を実装する

in_groups_of を Gem なしでやる方法がわからない— masuyama13 (@masuyama_13) August 31, 2020 in_groups_of っていうのは ActiveSupport にあるメソッドで each_slice と同じように任意の要素数で配列を分割するんですが、足りない分を nil で埋めるという…

2020/08/27 今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Bug #17030] Enumerable#grep{_v} should be optimized for Regexp ary.select { |e| e.match?(reg) } と比較して ary.grep(reg) の方…

2020/08/20 今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Misc #17041] DevelopersMeeting20200826Japan 来週水曜日に開発者会議があります 気になるチケットがあれば上記のチケットにコメント…

2020/08/13 今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #15504] Freeze all Range object リテラルで Range を生成すると同じ id のオブジェクトが返ってくるケースがある # これは…

Ruby でデバッグする ruby_jard というツールが凄まじくすごい

今日 Ruby Hacking Challenge in Hamada.rb に参加したときに ruby_jard という Ruby のデバッグツールを教えてもらいました。 これがかなり凄まじくすごかったのでちょっとまとめてみます。 ruby_jard とは ruby_jard とは Ruby のコードをデバッグするツー…

2020/08/06 今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #17097] map_min, map_max #map_min #map_max を追加する提案 # 以下のようなコードを %w[aa b cccc dd].max_by(&:length).le…

今時の C++ で連想配列を扱う

C++

今時と書いたんですがあんまり今時の C++ は知らないのでもっといい書き方ってありますかね? 元ネタ:いろいろな言語の連想配列系リテラル記法を比較してみた|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社 C++ の例が載って…

今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #16923] Switch reserved for numbered parameter warning to SyntaxError _1 という名前は Numbered parameter で使用されて…

Ruby で #initialize を呼ばずにクラスのインスタンスを生成する

通常はクラスからインスタンスを生成するときに .new を使用するんですが、類似するクラスメソッドに .allocate というメソッドがあります。 Class#allocate (Ruby 2.7.0 リファレンスマニュアル) .allocate も .new と同様にクラスのインスタンスを生成する…

Ruby で単項演算子を . 演算子で呼び出す

Ruby では単項演算子 ! や + などをメソッドとして再定義する事ができます。 class X # ! はそのまま ! という名前のメソッドとして定義する def ! "X#!" end # + は二項演算子と区別するために +@ と書く def +@ "X#+@" end end x = X.new p !x # => "X#!" …

今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #17043] Invokable module for custom Proc-like objects 『Proc なオブジェクト』を明示化できるモジュールの追加案 Invokab…

今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 今週は少なめ。 先週のまとめ [Bug #17017] Range#max & Range#minmax incorrectly use Float end as max Range#max と Range#minmax の戻り値に一貫…

今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #17006] Let Kernel#Hash take a block to provide the default value Hash に default_proc を渡せるようにする提案 # 既存…

今週の気になった bugs.ruby

書き溜めてはいたんですが、ブログに公開するのを忘れてました。 内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #16986] Anonymous Struct literal Struct.new(:a, :b).new(…

Ruby でメソッドの戻り値を受け取るかどうかを判定する RubyVM.return_value_is_used? が面白そう

こんな深夜に Ruby で面白そうなチケットを見かけたのでいろいろと試してみました。 チケット: [Feature #17004] Provide a way for methods to omit their return value PR : Provide a way for methods to omit their return value (rev.2) by shyouhei ·…

Ruby で 1 == true を行うと何が起きるのか

元ネタ Ruby の true と false がわかってない, いつも if 1 == true みたいなの書いて false 返されてあれ?ってなってる— ima1zumi (@ima1zumi) June 29, 2020 まあ 1 と true は別オブジェクトだからなーと思いつつ 1 == true は例外を返してほしいなーと…

今週の気になった bugs.ruby

内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Bug #11669] inconsitent behavior of refining frozen class freeze されたクラスに対して Refinements で新しいメソッドを定義する…

Ruby のクラス変数とクラスのインスタンス変数の違い

Ruby のクラス変数とクラスのインスタンス変数の違いの覚書。 クラス変数 Ruby で @@変数名 で変数を定義するとクラス変数として定義されます。 また、この変数は継承したクラスでも参照する事ができます。 class X @@class_variable = "hoge" end class Y <…

Ruby の標準ライブラリに Hash#except が追加された

Ruby の標準ライブラリに Hash#except が追加されました。 ActiveSupport にある有名なやつですね。 特に問題がなければ Ruby 2.8/3.0 で追加される予定です。 チケット Feature #15822: Add Hash#except - Ruby master - Ruby Issue Tracking System コード…

今週の気になった bugs.ruby

ちょっと遅れましたが貯めてはいました。 内容は適当です。 今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。 先週のまとめ [Feature #15973] Let Kernel#lambda always return a lambda lambda(&proc {}).lambda? の戻…