> 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.

Correct.  There are potential language directions Swift could head in that 
would force us to formalize a notion of addressable but immutable memory in our 
typing judgement, but right now that is not necessary.

If you are looking at compiler internals, note that SILGen does sometimes form 
LValues for immutable values (which it then avoids actually mutating).

John.

> 
> 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