diary

I like Hatena Star with a text selection.

2020-06-09

ja.stackoverflow.com

Stack Overflowに面白そうな質問があったから回答してみた。

Kernelモジュールのメソッドはprivateメソッドとして各オブジェクトに定義されているのは、関数形式でメソッドを呼び出した時に直感的になるためかなあと予想している。

class A
  def foo
    # ここでputsを呼び出せるということは、putsはAクラスのインスタンスメソッドである必要がある。
    puts 'x'
  end
end

# でもこれでputsを呼び出せるのは変、つまりputsがprivateメソッドだと辻褄が合う
A.new.puts 'x'

github.com

久々にrails/railsにPRをした。ちなみにPRをするのは2回目で、前回はちょうど5年前。次は2025年にPRを投げるぞ。

PRにも書いたのだけど、このパッチが本当に必要なのか全然分からなかった。 それでPRを出すか迷っていたのだけど悩んでも仕方ないなとPRしてみたところ、速攻でmergeされた。

しかも、config.active_support.bareというオプションのために必要という解説までしてもらってひとつ賢くなった。PRしてよかったー。


github.com

rails/railsに投げたPRで教えてもらったドキュメントを読んでいて、ついでにその日本語版も読んでいたら、なんか訳がしっくりこなかったのでPRした。

いまいち「Active Support Within a Ruby on Rails Application」の意味をつかめなくてしばらく悩んでいたのだけど、前の章の「Stand-Alone Active Support」と対になっていることに気がついたので、そんな感じで訳した。


qiita.com

rails/railsにPRを投げる時に便利なテンプレートがあるという話だけ覚えていてどこにあるかすっかり忘れてしまっていたのだけど、「rails pull request bundler inline」などとググって発見した。


bugs.ruby-lang.org

rbs prototype runtimeで遊んでたらRubyのバグを踏み抜いてしまった。次のコードが止まらなくなる。

module M
  def x
  end
end

module M2
  include M
  private :x
end

::Object.prepend(M2)

# infinite loop
p Object.instance_method(:x)

実際にはActive Supportのfork_tracker.rbを読み込んだあとに、任意のクラス.instance_method(:fork)で止まらなくなっていた。 https://github.com/rails/rails/blob/df50341fe8e03229308a0389bc14a654bbae666c/activesupport/lib/active_support/fork_tracker.rb

原因を突き止めるのが中々大変だった。printデバッグを仕込みつつ、止まらなくなったらC-zしてkill -9していた。


https://gist.github.com/pocke/2ed43fdbc11fa0df72d098a65127fea4

Active Recordの型定義をrbs prototype runtimeを使って生成してみた。 まだ「とりあえず生成するコマンドを動かすことができた」レベルで、実験的にこの定義を読み込むことすらしていない。

これを動かすために、上で書いたRailsのバグやRubyのバグと戦っていたのでした。

あとautoloadが中々に強敵だった。autoloadが定義された定数はまだ存在しないので、ObjectSpace.each_object(Module)とかしても手に入らない。 ただModule#constantsには反映されるっぽいので、それを辿ってとりあえず全部のconstをconst_getしてみる、というコードを書いた。 しかしautoloadが必ずしも成功するとは限らないので、const_getrescueしてエラーは握りつぶす、みたいなコードを書いていた。むずかしいね。


もういちど読む 山川世界史

もういちど読む 山川世界史

  • 発売日: 2013/04/26
  • メディア: Kindle

日本史を読み終わったので、今は世界史を読んでいる。


これも読んでいる。Twitterruby-jpかで紹介されていたのをほしい物リストに突っ込んでいた気がする。

読みやすい文章で、すぐ読み終わりそう。Kindleだと本の分厚さが分からなくて少し不便。

途中数式が出てきて、「あーこれ適当なプログラミング言語で書かれていたらサッと理解できるのにー」と思いながら読み飛ばした。

恋する小惑星をちょうど並行して見ているからか、本の内容がめっちゃ面白く感じる。


最近ずっと「姫のためなら死ねる」を読んでいる。そろそろ既刊の10巻を読み終わりそう。めっちゃいい。

清少納言のクズ力が高くていい。定子様かわいい。貴子様のキャラ好き。よい百合。

巻を追うごとに良くなっている気がする。

これを機に平安文化を勉強したい気がする。