PHPのおそるべきバグレポート 34
ストーリー by hylom
ほかの言語のバグレポートでもこういうのはあるのだろうか 部門より
ほかの言語のバグレポートでもこういうのはあるのだろうか 部門より
insiderman 曰く、
PHPの作者、Rasmus Lerdorf氏がプレゼンで「File useful bug reports」として紹介したバグレポートが面白いと話題になっている(PHPはバグレポートがバグッてる。だがそれがいい。)。
Webアプリの問題をPHPのバグとしてレポートしている、GOTOの実装をバグと主張するもの、ただの文句、仕様の変更を一方的にバグとして元に戻せと主張するものなど、どれも斜め上のものである。
ちなみに、レポートされるバグの3分の1はバグではないとのこと。
仕様の変更を一方的にバグとして元に戻せと主張する (スコア:5, 興味深い)
タイムリーなことに、ちょっと前にSquirrelMail を PHP5.4 に対応させた [srad.jp]のですが、原因を一言出言うと「htmlspecialchars の仕様変更のせいで、Shift_JISやEUC-JPで表示するサイトでは、エンコーディングを明示的に指定しないhtmlspecialcharsの結果が空になる」というものです。
機械的な置換で容易に修正対応はできましたが、そんな泥臭いパッチをSquirrelMailの方に投げる気にもなれず、もうまさにPHPの仕様の変更を「仕様バグ」だと主張したい気分です…
EUC-JP/Shift_JISのサイトは、PHP5.3を使い続けるか、UTF-8になんとか移行するか、どちらかがまあ建設的な対応でしょうね。
ていうか、mbstring を入れてる場合、内部に internal_encoding という設定があるんだから、文字エンコーディングに関係する処理で internal_encodingを無視するのは仕様バグ以外の何者でもないだろうに…
Re:仕様の変更を一方的にバグとして元に戻せと主張する (スコア:3)
似たような感じで、
"09223372036854775808" == "9223372036854775808"
の結果がマイナーバージョンアップで変更されました。 [php.net]
実害はないしバグレポートもされてるのに、なんだかな、と思います、
Re:仕様の変更を一方的にバグとして元に戻せと主張する (スコア:1)
「===」では試した?
というか元々PHPでは数値比較以外では「==」は使っちゃ駄目って常識だよね。
(多言語から移ってきた人はまずここの比較演算子の糞仕様で苦労する。)
Re: (スコア:0)
"09223372036854775808" === "9223372036854775808" // 文字列比較
これでFALSEが返ってくるのはそうだけど、
"09223372036854775808" == "9223372036854775808" // 数値比較 (と思わせて、LONG型に変換できないから文字列比較)
これで、以前はTRUEだったので、FALSEにしちゃいました…。
もしかしたら、今後、余白が入った文字列比較で、
" TEST" === "TEST" // 文字列比較
の結果がTRUEになる日が来たりするのだろうか…。
Re: (スコア:0)
元仕様も未定義なうえ振る舞いを変更したことも明記されていない物を仕様変更と言うのは
Re:仕様の変更を一方的にバグとして元に戻せと主張する (スコア:4, 興味深い)
いや、htmlspecialchars のリファレンス [php.net]には
と仕様変更が明記されていますよ。その後に
というもっととんでもない大嘘が書かれてたりしますが…
日本以外でも、欧州の、ISO-8859-1で、英語以外のラテン文字(0xA0~0xFEの文字)を使ってるサイトを作っている人も同じようにはまるはず。
でも、PHPの開発コミュニティはこれを「既存のコードに影響を及ぼさない変更」だと信じてるんでしょうねぇ…
Re:仕様の変更を一方的にバグとして元に戻せと主張する (スコア:1)
元仕様も未定義なうえ振る舞いを変更したことも明記されていない物を仕様変更と言うのは
じゃあ、やっぱりPHPがバグなんだよ。
# 元ネタに習い、糞野郎とでも付けておきましょうか?
Re:仕様の変更を一方的にバグとして元に戻せと主張する (スコア:1)
まぁ、specialchars なんていう、仕様・定義を参照したら選びそうにない名前な時点でお察し。
Re: (スコア:0)
問題を抱える個々人に言うつもりはありませんが、
これだけ多くの問題点が指摘されている言語で、
これだけ需要があるんですから、
PHPの分派を作ろうという人々が現れないんですかね。
Re: (スコア:0)
PHPのそういうところを気にする人は、PythonなりRubyなりに行ってしまうんかなと思います
Re: (スコア:0)
Rubyも行き当たりばったりな言語だけど
Re: (スコア:0)
Rubyは将来の方向性は行き当たりばったり感があるけど、==の仕様とか細かいところはだいぶましな感じ。
Re: (スコア:0)
じゃあもうPHPの分派はあり得ないということですね
わかりました
Re: (スコア:0)
エンコーディングを明示的に指定すればいいじゃん
Re: (スコア:0)
エンコーディングを明示してないアプリが悪い。
徳丸本に書いてあるだろ。それすらしてない糞アプリなんて使わない方が良い。
Re: (スコア:0)
IEみたいに閉じタグを補完してくれないのはバグだと言うような話ですな。
Re: (スコア:0)
公式サイトからして閉じタグ書くとバグる [php.net]とか言ってる連中ですよ。
いや解るんですがどこまで Laziness なんだと
# phpではなるべくシングルクォートとダブルクォートを使い分けてますがPerlでは連結演算子使いまくります(何
そもそも (スコア:2, おもしろおかしい)
仕様が意図不明なんだから、バグの指摘なんてできないよ!
Re:そもそも (スコア:2, 興味深い)
異常値にfalseが帰ってきてたのが突然とあるバージョンから0になったり-1になったりNULLになったりするのがなんだって言うんですか!
Re:そもそも (スコア:1)
PHP Userはそれを仕様と言う。
# の?
# それとも仕様などそもそも存在しないから感じろ、ってこと?
Re: (スコア:0)
「GOTOの追加は仕様バグだ」という指摘は真っ当なものじゃないかと。
何か合理的な説明ができる人がいれば別だけどさ。
finally の代わり (スコア:1)
まぁ、全部オブジェクト指向で書けば良いのかもしれないけど、関数内で後始末の処理をしたい時に、finally が無いのでその代わりに、という要望はあるかなぁ、と。
と思ったら、実践されている方 [hatena.ne.jp]がいらっしゃった。
Re:そもそも (スコア:1)
perlやrubyとかの redo とかをつかったクソなコードを移植するときとかには有効だよ^^
do{ }while(0);で無理もできるけど空ループが増えたりしていまいちだし。
ようは使いようでしょ。
by rti.
Re: (スコア:0)
飛び先が関数内とかに束縛される言語であれば、余程の超絶コードでなければgotoも問題無いんですが、
PHPという環境ではちょっとヤバそうな香りがしますね…
Re: (スコア:0)
標準関数の引数の一貫性の無さにぶち切れそうになるのは私だけですかね・・・
# 慣れましたけど・・・
Re: (スコア:0)
歴史的な理由によりどうたらこうたら
Re: (スコア:0)
オンラインゲームなんて細かい仕様かいてないのにバグだって、みんな結構指摘してるよね。
みんな脳内仕様があるに違いない
Re: (スコア:0)
http://www.playonline.com/ff11/polnews/news15267.shtml [playonline.com]
戦闘中にPTを解散するのはシステムの意図に反する行為です。何処にも仕様として明記されてませんし実際に普通のクライアント使ってもPTを解散できますが、だから何だって言うんです!
Re: (スコア:0)
タイミングを決めてうまく解散しないとDUPできないわけだが...。なんでパーティの解散だけをことさらあげつらって言うかな。最初は不具合と気づかなかっただろうが、それに続く900人ほどのお調子者はわかっていてやったに決まっているじゃない。
Re: (スコア:0)
それがおまえの脳内仕様か?
レポートされるバグの3分の1はバグではないとのこと (スコア:0)
ずいぶん優秀なバグレポートのような気がする…
Re: レポートされるバグの3分の1はバグではないとのこと (スコア:1)
ゲームの開発とかやってると感想文ばかり上がってくるよな。
解説ぷりーず (スコア:0)
参照先を読んだのだが、どこが「エスプリの利いたこと」なんだ?単に話がかみ合ってないだけで互いのイライラ感が伝わるだけなんだが。
訳文だからか?英語ネイティブでないので英語読んでもおいらにはもっと伝わらんだろうが・・・
そもそもPHPの作者が返事しているの一部じゃん。
しかしPHPはあちこちでぼろ糞にけなされているのに、ここまで使われているのが不思議。
お気楽お手軽なのはよいと思うけどね。