From: Rob Pike
Date: Wed, 15 Apr 2009 03:10:49 +0000 (-0700)
Subject: add a section about order of evaluation
X-Git-Tag: weekly.2009-11-06~1837
X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c956e909136df153750b1409697763d17b5ce63a;p=gostls13.git
add a section about order of evaluation
DELTA=32 (29 added, 2 deleted, 1 changed)
OCL=27197
CL=27469
---
diff --git a/doc/go_spec.html b/doc/go_spec.html
index 1eb6c7a588..2e5aa626c5 100644
--- a/doc/go_spec.html
+++ b/doc/go_spec.html
@@ -26,8 +26,6 @@ Todo's:
[ ] cleanup: 6g allows: interface { f F } where F is a function type.
fine, but then we should also allow: func f F {}, where F is a function type.
[ ] decide if and what to write about evaluation order of tuple assignments
-[ ] decide if and what to write about evaluation order of composite literal
- elements (single expressions, (key:value) pairs)
Wish list:
[ ] enum facility (enum symbols that are not mixable with ints) or some other
@@ -126,6 +124,8 @@ Closed:
a for loop that is following, and can break L be used inside it?
[x] there is some funniness regarding ';' and empty statements and label decls
[x] cleanup convert() vs T() vs x.(T) - convert() should go away?
+[x] decide if and what to write about evaluation order of composite literal
+ elements (single expressions, (key:value) pairs)
-->
@@ -162,7 +162,7 @@ Expression = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term = production_name | token [ "..." token ] | Group | Option | Repetition .
Group = "(" Expression ")" .
-Option = "[" Expression ")" .
+Option = "[" Expression "]" .
Repetition = "{" Expression "}" .
@@ -2983,6 +2983,33 @@ Also it may be possible to make typed constants more like variables, at the cost
overflow etc. errors being caught.
+Order of evaluation
+
+
+When evaluating the elements of an assignment or expression,
+all function calls, method calls and
+communication operations are evaluated in lexical left-to-right
+order. Otherwise, the order of evaluation is unspecified.
+
+
+
+For example, while evaluating the arguments for this call
+to function f
,
+
+
+f(g(), h() + x[i()], <-c)
+
+
+the call to g()
happens before the call to h()
,
+which happens before the call to i()
, all of
+of which happen before receiving the value from the channel
+c
.
+However, the order of those events compared to the evaluation of
+f
, the evaluation of x
, and the indexing
+of x
by the return value of
+i()
is not specified.
+
+
Statements