> On Dec 28, 2016, at 2:24 PM, Xiaodi Wu via swift-evolution 
> <[email protected]> wrote:
> 
> On Wed, Dec 28, 2016 at 5:21 PM, Anton Zhilin <[email protected] 
> <mailto:[email protected]>> wrote:
> What about “Rust way”?
> 
> protocol Default {
>     static var `default`: Self { get }
> }
> 
> protocol Setupable {
>     mutable func setup(with params: Params)
> }
> 
> func setupArray<T>(type: T.Type, params: Params) -> [T]
>     where T: Default & Setupable
> {
>     return (1...42).map { i in
>         var next = T.default
>         next.setup(with: params)
>         return next
>     }
> }
> default is literally a “default” value. For primitives like Int, Char, Bool, 
> Float etc. it is all zeros. For structs with Default fields, it’s all 
> defaults—unless some special semantics is given to them. For complex types, 
> it’s an “empty” value, the most sane value before any setup or specification.
> 
> 
> The objection is not about the spelling. The point here is that such a 
> protocol does not make sufficient semantic guarantees to enable any 
> interesting generic algorithms not possible without it. As I pointed out, 
> Rust explicitly makes no guarantees as to what the default value is and tells 
> you that you must not care; "most sane" does not cut it as a guarantee.

Right.  

Anton, perhaps I missed it, but I haven’t seen any concrete rationale for your 
proposal.  Can you give some specific code examples that become simpler with a 
default constructible protocol?  Perhaps you’re getting pushback because there 
is a better way to solve the problem you’re facing.

-Chris
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to