[swift-evolution] [Pitch] Add the DefaultConstructible protocol to the standard library

Adam Nemecek adamnemecek at gmail.com
Sun Dec 25 14:54:25 CST 2016


Does enabling a lot of small improvements that make APIs more ergonomic
count as practical?

On Sun, Dec 25, 2016 at 12:19 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:

> On Sun, Dec 25, 2016 at 3:07 PM, Adam Nemecek <adamnemecek at gmail.com>
> wrote:
>
>> There's a book that provides quite a bit of info on this
>>
>> https://smile.amazon.com/Elements-Programming-Alexander-
>> Stepanov/dp/032163537X?sa-no-redirect=1
>>
>> They say that DefaultConstructible is one of the essential protocols on
>> which most algorithms rely in one way or another. One of the authors is the
>> designer of the C++ STL and basically the father of modern generics.
>>
>> This protocol is important for any algebraic structure that deals with
>> the concept of appending or addition (as "zero" is one of the requirements
>> of monoid). There isn't a good short answer to your question. It's a
>> building block of algorithms. Think about why a RangeReplaceableCollection
>> can provide you with a default constructor but a Collection can't.
>>
>
> It's well and fine that most algorithms rely on the concept in one way or
> another. Yet the Swift standard library already implements many generic
> algorithms but has no DefaultConstructible, presumably because there are
> other protocols that guarantee `init()` and the algorithms being
> implemented don't need to be (practically speaking) generic over all
> DefaultConstructible types. My question is: what practical use cases are
> there for an explicit DefaultConstructible that are impractical today?
>
>
> On Sun, Dec 25, 2016 at 11:37 AM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
>>
>>> Can you give some other examples of generic algorithms that would make
>>> use of this DefaultConstructible? I'm having trouble coming up with any
>>> other than reduce.
>>> On Sun, Dec 25, 2016 at 14:23 Adam Nemecek via swift-evolution <
>>> swift-evolution at swift.org> wrote:
>>>
>>>> This protocol is present in C++ http://en.cppreference.com
>>>> /w/cpp/concept/DefaultConstructible as well as in Rust
>>>> https://doc.rust-lang.org/std/default/
>>>>
>>>> It's the identity element/unit of a monoid or a zero.
>>>>
>>>> The Swift implementation is very simple (I'm open to different names)
>>>>
>>>> protocol DefaultConstructible {
>>>>     init()
>>>> }
>>>>
>>>> A lot of the standard types could then be made to conform to this
>>>> protocol. These include all the numeric types, collection types (array,
>>>> set, dict), string, basically at least every type that currently has a
>>>> constructor without any arguments.
>>>>
>>>> The RangeReplaceableCollection protocol would inherit from this
>>>> protocol as well.
>>>>
>>>> This protocol would simplify a lot of generic algorithms where you need
>>>> the concept of a zero (which shows up a lot)
>>>>
>>>> Once introduced, Sequence could define an alternative implementation of
>>>> reduce where the initial result doesn't need to be provided as it can be
>>>> default constructed.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161225/15161512/attachment.html>


More information about the swift-evolution mailing list