アカウント名:
パスワード:
age = ++age;じゃないと、age 増えないよね
#たまたま、同じ不具合を直したばっかりなので
「永遠の〇〇歳」の実装例って奴だろ。
未定義≒処理系依存なので、さかのぼってみるのはどうだろう。
C言語の未定義と処理系定義はまったく違う。
なるほど。JIS X 3010をちょっと覗いてみたけど、用語としては「処理系定義の動作」「未定義の動作」「未規定の動作」があって、今回のは未規定の動作にあたる、でよいのかな。実装上の選択肢はあるけれど天変地異が起こったりはしない、と。
# なんか翻訳で用語がばらついてると落とし穴になりそう
「未定義」(undefined): 何がおきるか、規格はまったく関知しないもの。「未規定」(unspecified): 実装(挙動)は何種類か考えられるけど、そのどれにするかについて規格は関知しないもの。「処理系定義」(implementation defined): 未規定のもののうち、言語処理系がどういう挙動を示すか明記したもの。この3つについて、翻訳でばらついてるようなものは見たことないですね。翻訳がばらつくような腐った書籍だと、そもそも未定義って言葉が出てくるとも思えないし。
で、「age=age++;」は「副作用完了点までの間にageを2回変更している」ため「未定義の動作」です。「ageは1増えるか、変わらないか、そのどちらか」ではなく、もし「ageが元の値より減る」ような挙動を示したとしても、C言語の規格上は
JIS X 3010 が結構最近のつもりでいたので、それ以前に複数の翻訳で訳語がばらけたんじゃないかと思っていたのですが、JIS X 3010 は 1993/10/01が制定なんですね。# 用語じゃなく訳語なことに気が付いた。
で、話の流れから「未規定」のほうかと思っていたら「未定義」のほうですか!(TODO: ここに恐ろしいものの片鱗)やはり一般人は規格の細かいところにこだわるよりは、怪しいところに近づかないのがいいみたい…
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲを呼ぶ -- ある傍観者
細かいことですが (スコア:0)
age = ++age;
じゃないと、age 増えないよね
#たまたま、同じ不具合を直したばっかりなので
Re: (スコア:0)
「永遠の〇〇歳」の実装例って奴だろ。
Re: (スコア:0)
未定義≒処理系依存なので、さかのぼってみるのはどうだろう。
Re: (スコア:0)
C言語の未定義と処理系定義はまったく違う。
Re: (スコア:0)
なるほど。JIS X 3010をちょっと覗いてみたけど、用語としては
「処理系定義の動作」「未定義の動作」「未規定の動作」があって、
今回のは未規定の動作にあたる、でよいのかな。
実装上の選択肢はあるけれど天変地異が起こったりはしない、と。
# なんか翻訳で用語がばらついてると落とし穴になりそう
Re: (スコア:1)
「未定義」(undefined): 何がおきるか、規格はまったく関知しないもの。
「未規定」(unspecified): 実装(挙動)は何種類か考えられるけど、そのどれにするかについて規格は関知しないもの。
「処理系定義」(implementation defined): 未規定のもののうち、言語処理系がどういう挙動を示すか明記したもの。
この3つについて、翻訳でばらついてるようなものは見たことないですね。
翻訳がばらつくような腐った書籍だと、そもそも未定義って言葉が出てくるとも思えないし。
で、「age=age++;」は「副作用完了点までの間にageを2回変更している」ため「未定義の動作」です。
「ageは1増えるか、変わらないか、そのどちらか」ではなく、もし「ageが元の値より減る」ような挙動を示したとしても、C言語の規格上は
Re:細かいことですが (スコア:0)
JIS X 3010 が結構最近のつもりでいたので、それ以前に複数の翻訳で訳語が
ばらけたんじゃないかと思っていたのですが、JIS X 3010 は 1993/10/01が制定なんですね。
# 用語じゃなく訳語なことに気が付いた。
で、話の流れから「未規定」のほうかと思っていたら「未定義」のほうですか!
(TODO: ここに恐ろしいものの片鱗)
やはり一般人は規格の細かいところにこだわるよりは、怪しいところに近づかないのがいいみたい…