[swift-evolution] [Discussion] Difference between static and lazy variables regarding evaluation of closure

Vladimir.S svabox at gmail.com
Tue May 31 15:34:10 CDT 2016

On 31.05.2016 22:37, Chris Lattner wrote:
> 1) Introduce a new declmodifier named something like “atomiclazy”.
> 2) Disallow global and static variables, unless they are explicitly marked
> atomiclazy (compiler would provide a fixit hint to suggest this).
> 3) Replace the atomiclazy magic with a property behavior when they exist.
> In this model, you’d presumably have the choice about atomiclazy or lazy
> when setting up either a static or a local property.

OK, I like this direction. I.e. instead of changing current behavior of 
static/global variables, we require explicit decoration for them with 
`atomiclazy` and so their behavior becomes self-documented and it is clear 
from definition that this behavior is different than just `lazy`. One can't 
expect that `atomiclazy` is the same as `lazy`.

This appends some complexity to the language to syntax but also add clarity 
and self-documentation to behavior of defined static/global variables.

As I understand, we need this `atomiclazy` only if static variable has 
initialization block like here:

class A {
     static atomiclazy var p : Int = {10}()

but this will not require atomiclazy :

class A {
     static var p = 10

Opinions on this?

More information about the swift-evolution mailing list