[swift-evolution] Disambiguate Return Type With Void

Vladimir.S svabox at gmail.com
Tue Apr 26 09:19:33 CDT 2016


Andrew, thanks for comments. Yes, right now I see your points : its not 
about mutation, but about the result type of the method/function with the 
same mutation. I fully support this idea, as Swift allows to define the 
same methods with just different types - we need handy way to call such 
functions and clear rules when each one will be selected.

"method names help distinguish mutating and non-mutating methods."..
Just some my thoughts: I'm very skeptical in general on this. Personally I 
probably prefer some kind of explicit "marker" on mutating methods(like 
foo&.sort()), as I don't fully believe in idea of clear separation based on 
naming rules. Not all, who will write open source libraries/projects, are 
native English speakers and we'll have code where it will be hard to 
distinguish based on names. Even in this swift-evolution list we have a lot 
of discussions about right naming of the methods/functions in API..

On 26.04.2016 16:04, Andrew Bennett wrote:
> Hi Vladimir, thanks for your feedback, I've put my responses inline:
>
> On Tue, Apr 26, 2016 at 10:26 PM, Vladimir.S via swift-evolution
> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>
>     Interesting suggestion, but IMO this will produce a question about new
>     naming conversion in Swift 3.0 (noun/verb, -ing/-ed, etc) because using
>     your suggestion we could want to use:
>
>     array.sort(..) // mutating
>     let array2 = array.sort(..) // non-mutating, instead of array.sorted()
>
>
> This proposal does not want to change any naming guidelines. The reasons
> for those guidelines is good, and remains the same. One reason is that
> method names help distinguish mutating and non-mutating methods.
>
> I'm happy to discuss making the proposal only apply to functions with the
> same mutability if that alleviates your concern.
>
>     Also, technically we can assign a value to Void function(yes, compiler
>     warning will be produced, but just warning, not error):
>
>     var something = array.sort(..) // mutating,currently this is valid code
>     // something  == ()
>
>
> You're right, although I don't think there would be a worthwhile loss of
> functionality if that statement chose a non-Void function, or didn't store
> the result. I'm not sure why you would want to store the Void.
>
> Note that this proposal is only to resolve ambiguity *if* there is any :)
> It won't change how functions are resolved when there is no ambiguity.
>
>
>     On 26.04.2016 13 <tel:26.04.2016%2013>:56, Andrew Bennett via
>     swift-evolution wrote:
>
>         Hey,
>
>         I thought I would post another message to this thread because I
>         think it
>         was missed when I first sent it (I made the mistake of sending it
>         at 1am
>         San Francisco time, I'm in Australia).
>
>         I appreciate any feedback :)
>
>         Thanks,
>         Andrew
>
>         On Mon, Mar 28, 2016 at 7:21 PM, Andrew Bennett <cacoyi at gmail.com
>         <mailto:cacoyi at gmail.com>
>         <mailto:cacoyi at gmail.com <mailto:cacoyi at gmail.com>>> wrote:
>
>             Swift can resolve functions based on the return type. However,
>         when the
>             result is unused a single function often can't be resolved without
>             explicitly specifying the type.
>
>             |func example() { ... } func example() -> Int { ... } example()
>         as Void
>             example() as Int |
>
>             This proposal disambiguates some cases:
>
>               * Preferring functions with a |*Void*| return type when the
>         result
>                 *is* discarded.
>               * Preferring functions with a *non-|Void|* type when the
>         result *is
>                 not* discarded.
>
>             These example will be unambiguous:
>
>             |example() // will prefer a `Void` function let x = example()
>         // will
>             prefer a non-`Void` function|
>
>             You can read the full latest version of the proposal here:
>
>
>         https://github.com/therealbnut/swift-evolution/blob/andrew-disambiguate-return-type/proposals/0000-disambiguate-return-type.md
>
>             This is the original version
>
>         <https://github.com/therealbnut/swift-evolution/blob/59d0f0b9bdabcfd675f36824232a8efa4a5f9152/proposals/0000-disambiguate-return-type.md>
>         of
>             the proposal.
>
>
>
>
>         _______________________________________________
>         swift-evolution mailing list
>         swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>         https://lists.swift.org/mailman/listinfo/swift-evolution
>
>     _______________________________________________
>     swift-evolution mailing list
>     swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>     https://lists.swift.org/mailman/listinfo/swift-evolution
>
>


More information about the swift-evolution mailing list