An lvalue is something that can be assigned to / changed. The terminology comes 
from assignment statements: in “foo = bar”, “foo” is a left-value (lvalue) and 
“bar" is a right-value (rvalue). The difference is that the lvalue is a named 
location that can take on a new value and an rvalue is just a plain value.

See: https://en.wikipedia.org/wiki/Value_(computer_science)#lrvalue 
<https://en.wikipedia.org/wiki/Value_(computer_science)#lrvalue>

In Swift’s AST, you’ll see @lvalue as the type coming from a declaration 
reference (declref) for var’s and for inout parameters inside a method 
implementation. You’ll see function application require @lvalue types for inout 
parameters (most of which will be the implicit first parameters of ‘mutating’ 
functions - the thing to be mutated). A load converts an expression from an 
lvalue to being an rvalue, and a store takes an lvalue and a new rvalue to be 
put there.

Hope this helps!
        - Greg

> On May 24, 2016, at 9:48 AM, Tim Bodeit via swift-dev <swift-dev@swift.org> 
> wrote:
> 
> I couldn’t find any documentation about lvalues in Swift. Can anybody give me 
> a short explanation of what exactly an lvalue is?
> 
> In C++ all variables, including those marked with the const modifier seem to 
> be lvalues. It seems to me, that this is not the case for let constants in 
> Swift.
> 
> I compared the output of swiftc -dump-ast for 
> let i = 42
> let j = i+1
> and
> var i = 42
> let j = i+1
> 
> Where i was respectively accessed as:
> 
> (declref_expr type='Int' location=lvaluetest.swift:2:9 
> range=[lvaluetest.swift:2:9 - line:2:9] 
> decl=lvaluetest.(file).i@lvaluetest.swift <mailto:i@lvaluetest.swift>:1:5 
> direct_to_storage specialized=no)
> 
> (load_expr implicit type='Int' location=lvaluetest.swift:2:9 
> range=[lvaluetest.swift:2:9 - line:2:9]
>   (declref_expr type='@lvalue Int' accessKind=read 
> location=lvaluetest.swift:2:9 range=[lvaluetest.swift:2:9 - line:2:9] 
> decl=lvaluetest.(file).i@lvaluetest.swift <mailto:i@lvaluetest.swift>:1:5 
> direct_to_storage specialized=no))
> 
> Is my assumption correct, that let constants are not lvalues?
> 
> Cheers,
> 
> Tim
> _______________________________________________
> swift-dev mailing list
> swift-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to