diary

I like Hatena Star with a text selection.

2020-02-14

twitter.com

昨晩からこれが気になっている。 状態Sを状態Tに変化させるような手順fと、状態Sを状態Uに変化させるような手順gがある時に、状態Sに手順hを実行し続けて状態Sに戻るまでにTとUの両方を経由するような手順hがあることを示せば芋づる式に証明できそうな気がする。

と言っていたら面白そうな本をruby-jpで教えてもらった。物理本しかないけど、ポチろうかなあ…


qiita.com

github.com

git diffでpagerを表示したくないなと調べていたら、どうやらgitコマンドに--no-pagerオプションを渡すと良いらしい。 git diff --helpしても出てこなかったのでググったら見つかった。なるほどなあ


github.com

rubocop-rake の v0.5.1 をリリースした。修正内容は↑のPRのbug fixのみ。

PRはだいぶ前に作ってたんだけど、1晩ぐらい放置して何も言われなかったらmergeしようと思っていて、mergeするのをすっかり忘れていた。


https://github.com/ruby/ruby/blob/2efb38e766b6fc304bb933d696c7500425d178a1/compile.c#L2832-L2861

Rubyのrangeの最適化を眺めていて、両端がIntegerじゃなくても、両端がStringであれば最適化されるのに気がついた。

ただ、どうやらwhen節の条件文などに置いてある状況じゃないと最適化されないっぽい。なんでだろう?

# 最適化されない
x = 'a'..'z'


case x
# 最適化される
when 'a'..'z'
end

あと、frozen string literalのときはputstringputobjectになると知った。

$ ruby --dump=insns -e '"a"'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,3)> (catch: FALSE)
0000 putstring                    "a"                                 (   1)[Li]
0002 leave


$ ruby --dump=insns --enable-frozen-string-literal -e '"a"'
== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,3)> (catch: FALSE)
0000 putobject                    "a"                                 (   1)[Li]
0002 leave

github.com

そういえば放置していたのでコメントをした