> Le 15 mai 2017 à 10:55, John McCall <rjmcc...@apple.com> a écrit :
> 
>> On May 15, 2017, at 3:00 AM, Florent Bruneau via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> I may simply have missed something, but I'm not sure to understand why the 
>> proposal adds user-facing restrictions instead of using a fallback from 
>> static to dynamic enforcement in case of violation of the NRR/NPCR rules 
>> (maybe with an additional warning).
> 
> Three reasons.
> 
> The first is that it's much simpler for both users and the compiler if there 
> is a bright-line rule guaranteeing that static enforcement will be used.  A 
> programmer trying to understand "why is this slower" or "why is this problem 
> only checked at runtime" should not have to understand the language 
> implementation well enough to examine their code and e.g. deduce that the 
> problems is that they made an un-inlineable call during an access within a 
> closure and the compiler couldn't prove that that didn't lead to a re-entrant 
> access and so it fell back to dynamic enforcement.  Paring back dynamic 
> enforcement to the same cases where we need to allocate variables on the heap 
> is far more straightforward to explain and understand.
> 
> The second is closely related, which is that it preserves the ability to have 
> a subset of the language which doesn't need dynamic allocation or 
> enforcement.  This sort of performance and semantic guarantee is important in 
> a number of situations, from audio programming to low-level systems work.  
> You could imagine having a special scope, or even a compiler flag, that 
> mandates staying within that subset.  But you wouldn't want that flag to 
> change the dynamic behavior of the program or rely for correctness on an 
> assumption that the entire program, libraries included, are compiled with the 
> flag.  And that ties in with the next point.
> 
> The final reason is that, when compilers get conservative, they get very 
> conservative.  For example, we can only tell that the NPCR is being violated 
> by looking at the function that takes the closures, not the one that creates 
> them; but it's the latter function which decides what enforcement to use for 
> its captured variables.  Statically detecting NPCR violations, therefore, 
> basically requires the ability to inline every function to which we passed 
> them — we don't actually have to do the inlining, but we do have to be able 
> to see their definitions, which in many cases is not possible.  And most of 
> the heuristics you might imagine we could use to statically prove that a 
> closure can't be recursively invoked aren't actually valid.  So 
> conservatively falling back on dynamic enforcement in closures really means 
> doing it pervasively.
> 
> When you take those reasons and balance them against the patterns that are 
> being restricted here — and really, they're still legal, you just have to 
> mark one of the closures as escaping —it's not really a difficult choice.

Thanks for the details, this really helps understanding the choice you made. I 
can only +1 the proposal.

>> 
>>> Le 13 mai 2017 à 04:29, Ben Cohen <ben_co...@apple.com> a écrit :
>>> 
>>> Hello Swift community,
>>> 
>>> The review of revisions to SE-0176: Enforce Exclusive Access to Memory 
>>> begins now and runs through May 17, 2017.
>>> 
>>> Most of this proposal was previously accepted.  An implementation issue has 
>>> been discovered with the use of dynamic enforcement on inout parameters.  
>>> The proposal implementors suggest adopting a stronger rule governing the 
>>> use of non-escaping closures which will also allow Swift to make firm 
>>> guarantees about the use of static enforcement when a variable does not 
>>> escape.  The core team tentatively supports this new rule but believes it 
>>> is a substantial enough revision that it requires a separate review period.
>>> The proposal is available here: 
>>> https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to-memory.md
>>> 
>>> Since this is a review of revisions only, you may find these two relevant 
>>> commits easier:
>>> https://github.com/apple/swift-evolution/commit/d61c07df2f02bee6c00528e73fbe33738288179a
>>> https://github.com/apple/swift-evolution/commit/5205a61f9cdca918d896269521bf89cb11e4aa12
>>> 
>>> Reviews are an important part of the Swift evolution process. All reviews 
>>> should be sent to the swift-evolution mailing list at:
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>> 
>>> or, if you would like to keep your feedback private, directly to the review 
>>> manager. When replying, please try to keep the proposal link at the top of 
>>> the message:
>>> 
>>> Proposal link:
>>> 
>>> 
>>> https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to-memory.md
>>> 
>>> 
>>> Reply text
>>> 
>>> Other replies
>>> What goes into a review?
>>> 
>>> The goal of the review process is to improve the proposal under review 
>>> through constructive criticism and, eventually, determine the direction of 
>>> Swift. When writing your review, here are some questions you might want to 
>>> answer in your review:
>>> 
>>>     • What is your evaluation of the proposal?
>>>     • Is the problem being addressed significant enough to warrant a change 
>>> to Swift?
>>>     • Does this proposal fit well with the feel and direction of Swift?
>>>     • If you have used other languages or libraries with a similar feature, 
>>> how do you feel that this proposal compares to those?
>>>     • How much effort did you put into your review? A glance, a quick 
>>> reading, or an in-depth study?
>>> More information about the Swift evolution process is available at:
>>> 
>>> https://github.com/apple/swift-evolution/blob/master/process.md
>>> 
>>> Thank you,
>>> 
>>> _______________________________________________
>>> swift-evolution-announce mailing list
>>> swift-evolution-annou...@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution-announce
>> 
>> -- 
>> Florent Bruneau
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 

-- 
Florent Bruneau

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

Reply via email to