2014-06-19(木) [長年日記]
■ Rubyの定数はできるだけfreezeさせようと思った
もう10数年もRuby使ってるのに、すげー初歩的なミスに気づかず2日もムダにしてしまった。典型的な「mutableな定数」問題。
CONST = 'foo' def bar(opt) str = CONST str << opt baz(str) end
みたいなメソッドbarがマルチスレッドの奥底で何度も呼び出されて、そのたびにCONSTの中身が変わってしまっているのに気づかず、スレッドの競合かなにかに違いないと決めつけて延々と別のところを調べていたという。「CONST = 'foo'.freeze」って書いておけばすぐわかったはずなので、今後本当に定数として使いたいときはfreezeすることにする。
(最近のrubyの実装でこのあたりのトピックがあった気がするけど思い出せない)
■ 小田急線の脱線事故で帰宅難民化しそうになった
「そろそろ帰ろうかなー」と思ってマシンを落とす直前に、小田急で脱線事故というニュースが飛び込んできた。乗客が乗ってなかったから怪我人なしというのは不幸中の幸いだけど、現場が相模大野ということは我が家の徒歩圏内が全滅ってことじゃないか、うわー。
とはいえさすがに都心からの帰宅で代替ルートに困ることはあまりない。表参道から田園都市線に乗り換えて中央林間から歩けば、まぁいい運動になる程度の距離で済む。でも小田急の代替になった田園都市線の混雑がどんな悲惨な状況になるのかは想像するまでもないので、けっきょく9時ごろまでオフィスに残って、ぼちぼち空いたころを狙って帰ってきた。
急行はそれでも激混みだったので、各停に座ってきたからさらに時間がかかったけれど。まぁその日のうちに帰れて良かったよ。