(FYI I am already writing a longer response, but got interrupted by visiting 
with my mother ; )). Give me a bit.

> On Dec 29, 2017, at 2:03 PM, Robert Widmann <devteam.cod...@gmail.com> wrote:
> 
> Ran into this over the summer.  My understanding is that Michael Gottesman 
> (CC’d) has been looking into pattern matching at +0.
> 
> The code in SILGenPattern needs to be reworked, but I found this problem 
> intersects with the really old dynamic casting entry points in SILGen too 
> which would seem to complicate a “simple fix”.  It’d be good to hear what 
> plans, if any, there are to address this. It would be a real win to clean all 
> of this up.
> 
> ~Robert Widmann 
> 
> 2017/12/28 14:27、Chris Lattner via swift-dev <swift-dev@swift.org>のメール:
> 
>> <moving to swift-dev, where most of the perf optimization people lurk>
>> 
>> This is a great question, I’m not sure what the answer is: maybe it is a 
>> simple case missed by the arc optimizer?
>> 
>> -Chris
>> 
>> 
>> 
>>> On Dec 27, 2017, at 9:19 PM, Félix Cloutier via swift-evolution 
>>> <swift-evolut...@swift.org> wrote:
>>> 
>>> Running this on my MBP with 10 as the parameter: 
>>> https://gist.github.com/zneak/ae33bb970a08632cfb2925e2049f9e7a 
>>> 
>>> I get a runtime of about 10 seconds, 45% of which is spent in 
>>> retain/release calls according to Instruments (!!), and at least half of 
>>> that from Expr.count. Looking at the IR, Swift generously sprinkles 
>>> retain/release calls through the outlined copy method:
>>> 
>>>     • `self` is retained at the beginning of `count`
>>>     • The values that you get out of destructuring are retained
>>>             • Of course, when you get `count` on these, they are retained 
>>> again
>>> 
>>> Of course, Expr.count cannot modify itself or its subexpressions because 
>>> the functions are not mutating; in fact, no function in that program can 
>>> mutate an enum case. Why, then, is Swift retaining/releasing `self` and the 
>>> values obtained from destructured patterns? They can't go away. Shouldn't 
>>> we be getting guaranteed references instead of owning references?
>>> 
>>> That seems to hit pattern-matching-heavy programs with indirect cases 
>>> pretty hard, and it's pretty frustrating because that seems to be about the 
>>> nicest way to write this program, and there's no workaround from the 
>>> developer's perspective. I don't think that this is a fatal flaw of 
>>> refcounting, but unless I'm missing something, that's sub-par behavior.
>>> 
>>> Félix
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolut...@swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> 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