> 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