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