アカウント名:
パスワード:
falseや#f、nilのような特殊なシンボル以外は、あらゆる値が真扱いでいいだろ下手にtrueとか無駄な状態を作ろうとするからおかしなことになるんだよなにがオーバーフローだよ、知らねえよバカ#fじゃねえんだったら、値がゼロだろうがマイナスになろうが変数がまだ未初期化だったとしても黙って真を返して来りゃいいんだよ
西城秀樹いわく、いつかはブーリアン型に回帰すると
何で「参考になる」なんだ……
#ぶーりあんぶーりあんきっとー
けど、この実装って、オーバーヘッドでるよね?
非ゼロを全部1にfoldする必要がある_Boolのほうが効率悪くない? CPUにはたいていゼロテストの命令がある。
ちゃんと処理しておかないと、true & true がfalseになる場合があるからかな~と想像してみる。
a=false ;a++ ; // aはtrue(intで1)b=a ;b++ ; // bはtrue(intで2)
c=a&b ; // cはtrue?
それは演算を間違ってるからどっちみちバグなんじゃないかと。むしろ、booleanで&演算をしたら警告出るんじゃない? packed boolみたいな演算では使うから、微妙ではあるが、プログラマに型変換してる意識がないと、どっちみち危険だと思う。
いや、警告もエラーも出ませんよ。VC++(2015)、GCC(5.4)、Clang(3.8)でそれぞれ警告最大にしたけど、何も言われずスルーです。あと、この場合bool型変数に0/1以外が入っていると、いずれの環境でも結果がおかしくなります。
# C++には &&= などがないので、単純に禁止するわけにもいかないのでは。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
Lisper「そもそもブーリアン型って必要なの?」 (スコア:1)
falseや#f、nilのような特殊なシンボル以外は、あらゆる値が真扱いでいいだろ
下手にtrueとか無駄な状態を作ろうとするからおかしなことになるんだよ
なにがオーバーフローだよ、知らねえよバカ
#fじゃねえんだったら、値がゼロだろうがマイナスになろうが変数がまだ未初期化だったとしても黙って真を返して来りゃいいんだよ
Re:Lisper「そもそもブーリアン型って必要なの?」 (スコア:2, 参考になる)
西城秀樹いわく、いつかはブーリアン型に回帰すると
Re:Lisper「そもそもブーリアン型って必要なの?」 (スコア:2)
何で「参考になる」なんだ……
#ぶーりあんぶーりあんきっとー
Re: (スコア:0)
けど、この実装って、オーバーヘッドでるよね?
Re: (スコア:0)
それでは(コンパイラが最適化するのに)効率が悪いから _Bool が導入されてる。
Re:Lisper「そもそもブーリアン型って必要なの?」 (スコア:1)
非ゼロを全部1にfoldする必要がある_Boolのほうが効率悪くない? CPUにはたいていゼロテストの命令がある。
Re: (スコア:0)
ちゃんと処理しておかないと、true & true がfalseになる場合があるからかな~と想像してみる。
a=false ;
a++ ; // aはtrue(intで1)
b=a ;
b++ ; // bはtrue(intで2)
c=a&b ; // cはtrue?
Re: (スコア:0)
それは演算を間違ってるからどっちみちバグなんじゃないかと。むしろ、booleanで&演算をしたら警告出るんじゃない? packed boolみたいな演算では使うから、微妙ではあるが、プログラマに型変換してる意識がないと、どっちみち危険だと思う。
Re: (スコア:0)
いや、警告もエラーも出ませんよ。
VC++(2015)、GCC(5.4)、Clang(3.8)でそれぞれ警告最大にしたけど、何も言われずスルーです。
あと、この場合bool型変数に0/1以外が入っていると、いずれの環境でも結果がおかしくなります。
# C++には &&= などがないので、単純に禁止するわけにもいかないのでは。
Re: (スコア:0)