On Wed, Dec 28, 2016 at 5:21 PM, Anton Zhilin <[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.

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

Reply via email to