[swift-dev] AST – Understanding @lvalue

John McCall rjmccall at apple.com
Tue May 24 12:04:58 CDT 2016


> On May 24, 2016, at 9:48 AM, Tim Bodeit via swift-dev <swift-dev at 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 at lvaluetest.swift <mailto:i at 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 at lvaluetest.swift <mailto:i at 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 at swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20160524/7f551ef7/attachment.html>


More information about the swift-dev mailing list