[swift-evolution] [Pitch] Add the DefaultConstructible protocol to the standard library
Xiaodi Wu
xiaodi.wu at gmail.com
Wed Dec 28 16:24:58 CST 2016
On Wed, Dec 28, 2016 at 5:21 PM, Anton Zhilin <antonyzhilin at gmail.com>
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.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161228/c3379ad8/attachment.html>
More information about the swift-evolution
mailing list