さわっても熱くない花火

ちょっとした驚きを食べながら生きています

最適化って怖いよねって話

yanoshiです。計算機との対話を10年以上続けていますが未だにうまくできた試しがありません。デレ期はいつ来ますか?


さて、計算機の世界には最適化という便利な概念があります。

思考停止ワードとして有名ですが、「計算機が真の力を発揮してくれれば…きっとうまくやってくれる!」という人間の願望がこもった素晴らしい言葉だと思いませんか?(白目


人間のために作ったはずの最適化も、時には人間に牙をむくこともあります。計算機との対話はいつもうまく行きません。人間の意図をちゃんと汲みとってくれるとは限りませんからね。

今日はそんな話。




経緯

TLを眺めていたらきくらげ氏が面白そうなおもちゃを見つけていました。

当たり前ですが、

typeof null === "undefined";

falseになるはずです。ってことでこれは明らかにおかしい。



ちなみに枚方氏情報によるとNode.jsでも同じ症状が出るっぽい。ってことでやっぱり原因はV8かな。




遊ぶ

楽しそうだから私も遊んでみたんだなぁ。

f:id:yanoshi:20160622004354p:plain



















ということで、最適化がやっぱり原因っぽいねって感じ。演算子の数を増やすと処理をサボらなくなるしね。




結論

ということでバグでしたとさ。そして既にV8の最新版では修正済み。




まとめ

「このバグを踏むなら今のうち!!」

for(var i=0; i<10000; i++) {
  document.write("私はバグってます:" + ((typeof null === "undefined")?"YES!<br />":"NO...<br />"));
}
for(var i=0; i<100000; ++i) console.log(typeof null === "undefined");






闇だ…