Sent from my iPad
> On Dec 19, 2015, at 6:38 PM, Dmitri Gribenko <[email protected]> wrote: > > On Sat, Dec 19, 2015 at 12:10 PM, Matthew Johnson via swift-evolution > <[email protected]> wrote: >> @noescape is safer because it does not require thinking about lifetime >> issues for captured objects. My hunch was that @noescape (or @autoclosure >> with implies @noescape) is also more common. I had a look through the >> standard library and this is definitely the case there. >> >> What does everyone think about making @noescape the default and introducing >> @escaping (or something similar) to annotate function arguments that do >> escape the call stack? > > @noescape provides additional guarantees and the optimizer can learn > to rely on it in future. Thus, it effectively becomes ABI, and you > can't remove in future versions of the library without breaking the > ABI. I think adding it should be an explicit decision because of > that. > That makes sense. Still, it would be a shame to have to add it manually if it is actually the right thing a significant majority of the time (Andrew has a good point about looking at app level code to assess this). One thing to consider - the compiler already detects when function arguments escape the call stack already and provides an error if they are marked @noescape. Because of this it also detects when they do not escape the call stack. I don't think it would be possible to forget @escaping when that is your purpose as you would get an error. Changing the escaping behavior of a function argument seems like a major change in functionality and thus breaking ABI is probably more acceptable in that case (I'm trying to think of a time when this would even happen - maybe making an synchronous operation asynchronous?). As the compiler already detects whether the argument escapes or not it seems like the annotation primarily serves a documentation purpose - if you can accept the idea that a change in escaping behavior is significant enough to warrant potentially breaking ABI. > Dmitri > > -- > main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if > (j){printf("%d\n",i);}}} /*Dmitri Gribenko <[email protected]>*/ _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
