> On Dec 18, 2015, at 6:07 PM, Chris Lattner <[email protected]> wrote: > > >> On Dec 18, 2015, at 5:23 PM, Joe Groff via swift-evolution >> <[email protected] <mailto:[email protected]>> wrote: >> >> For Swift 3, we're planning to phase out 'var' parameters in functions, and >> we're also making it so that language keywords are valid argument labels. >> With both of these changes pending, I have a hard time not reading: >> >> func foo(inout x: Int) >> >> as an argument labeled `inout` instead of an unlabeled argument bound to >> `x`. Once `var` is phased out, `inout` would also be the only remaining case >> where quoting is necessary to use a name as an argument label. The `inout` >> keyword has always struck me as weird, since it violates >> definition-follows-use—maybe we should replace it with the `&` sigil, >> mirroring its usage in call sites. > > -1 > > “inout” is intended to communicate (or at least hint at) the copy-in / > copy-out behavior of the argument. It is also there to enable other > parameter modifiers, which can enable other more advanced parameters models > in the future (e.g. rust-style borrowing).
If we added those kinds of knobs, they'd almost certainly be @attributes IMO. A borrow model isn't really a core interface change the way `inout` is; it's a set of additional restrictions on use that let the compiler avoid unwanted retaining and copying. -Joe
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
