引数の評価順序

プログラミング言語で、関数の引数を右と左のどちらから評価するのかに関するやりとり。誰でも編集できるので、適宜足して下さい。
12
ちょまど@ ITエンジニア @chomado

int x = 0; int main() { printf("%d ", (x = 3) + (x = 4)); printf("%d\n", x); return 0; } これどうして 7 4 以外にもなり得るのかなぁ

2013-10-02 10:07:01
Sosuke MORIGUCHI @chiguri

@chomado なぜ計算が前から行われると?

2013-10-02 10:09:25
- @ka9e

@chomado 処理系依存っぽいの書いてる

2013-10-02 10:10:29
ちょまど@ ITエンジニア @chomado

@repeatedly !!そうなのですか…!処理系によって評価順が変わる、ということですか?(驚)Σ(・□・;)同じ言語なのに

2013-10-02 10:12:02
きみとぼく@がんばらない;bot @emaxser

@chomado 右から左に評価されると、後に3が入るんじゃー、

2013-10-02 10:12:03
ちょまど@ ITエンジニア @chomado

@chiguri (少なくともCでは)左から右が世界の真理だと思ってましたΣ(・□・;)

2013-10-02 10:12:45
ちょまど@ ITエンジニア @chomado

同じ言語なのに(たぶん処理系によって?)評価される順番が違う事があるって初めて知りました…!

2013-10-02 10:14:25
山本和彦 @kazu_yamamoto

複数の引数がどちらから評価されるか厳密に決まっている言語って、なにがあったかなぁ? (仕様がある言語に限る)

2013-10-02 10:18:22
methane @methane

@kazu_yamamoto http://t.co/uKPtGwTbT6 Python の場合これが適用されて左から右になるはずです。

2013-10-02 10:20:59
山本和彦 @kazu_yamamoto

.@methane お、Python は左から右ですか。直感的で、いいですねぇ。:-)

2013-10-02 10:22:33
眼力 玉壱號 @objectxplosive

.@chomado @chiguri 引数の評価順序に規定は無いのが C/C++ の真理なので引数に副作用のあるものを書くと焼かれます(最適化で評価順変わったりもするので)

2013-10-02 10:24:39
Akira Takahashi @cpp_akira

@objectxplosive それはC++03までの話ですね。C++11ではスレッドのメモリモデルとの兼ね合いで、引数の評価順序は前から順番であることが規定されました。

2013-10-02 10:25:45
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

.@kazu_yamamoto Smalltalkは左から右。QT http://t.co/fnpNyzSJ0s The <keyword argument> clauses of a <keyword message> are evaluated left to right.

2013-10-02 10:27:09
眼力 玉壱號 @objectxplosive

.@cpp_akira をを、規定されたスかφ(.. )…一昔前の奴だと引数 push の関係で後ろからの奴もありましたねえ(笑)

2013-10-02 10:28:53
山本和彦 @kazu_yamamoto

C とかが、引数の評価順序を決めてないのは、コンパイラの実装に自由度を与えるためなの? (深く考えたことがない。)

2013-10-02 10:30:19
眼力 玉壱號 @objectxplosive

.@kazu_yamamoto CommonLisp は確か左からやるという規定有りだった遠い記憶が

2013-10-02 10:33:57
山本和彦 @kazu_yamamoto

.@objectxplosive そうですか。Scheme は定義してなかったような。。。

2013-10-02 10:34:32
きしもと @ksmakoto

@kazu_yamamoto Common Lisp とか Java とか ECMAScript とか JIS Ruby とか

2013-10-02 10:35:42
山本和彦 @kazu_yamamoto

そうか、評価順序が決まっている言語は、たくさんあるんですね。でも、小心者の僕は、引数に副作用を書けませんけど。

2013-10-02 10:37:27
S (ツイートはスレッド全体をご確認ください) @esumii

@kazu_yamamoto 「複数の引数」ではなく組の要素ですが、Standard MLの操作的意味論は確かleft-to-rightだったと思います(要確認)

2013-10-02 10:37:44
眼力 玉壱號 @objectxplosive

.@kazu_yamamoto 超安直にコンパイラ作ると、右からの方が楽かもしれない(引数は全部 stack 渡しで)左からだと少し面倒かも

2013-10-02 10:43:05