> Wow there are some real doozy inout code examples in there, showing
> aliasing much more fun than my snippet.  Unfortunately I can't
> understand anything else the doc is talking about.  I guess I'll just
> say a prayer and throw salt over my shoulder if using inout.

Sorry! Here's the money quote from that document:

> ##### If you didn't catch all that...
> 
> That may have been a somewhat intense description, so here's a simple summary 
> of the rule being proposed.
> 
> If storage is passed to an inout argument, then any other simultaneous 
> attempt to read or write to that storage, including to the storage containing 
> it, will have unspecified behavior. Reads from it may see partially-updated 
> values, or even values which will change as modifications are made to the 
> original storage; and writes may be clobbered or simply disappear.
> 
> But this only applies during the call with the inout argument: the evaluation 
> of other arguments to the call will not be interfered with, and as soon as 
> the call ends, all these modifications will resolve back to a quiescent state.
> 
> And this unspecified behavior has limits. The storage may end up with an 
> unexpected value, with only a subset of the writes made to it, and copies 
> from it may unexpectedly reflect modifications made after they were copied. 
> However, the program will otherwise remain in a consistent and uncorrupted 
> state. This means that execution will be able to continue apace as long as 
> these unexpected values don't trip up some higher-level invariant.

-- 
Brent Royal-Gordon
Architechies

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

Reply via email to