[swift-evolution] [Pitch] Add the DefaultConstructible protocol to the standard library
Tim Vermeulen
tvermeulen at me.com
Mon Dec 26 11:01:38 CST 2016
Then why is Int() allowed, and why does that return 0?
> on Sun Dec 25 2016, Xiaodi Wu<swift-evolution at swift.org>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.
> Well, I challenge that premise. There are actually very few that depend
> on it AFAICT, and for those that do, there's often no obvious semantics.
> For example, for numbers, should default construction produce the
> additive identity (0) or multiplicative identity (1), and why?
>
> > 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
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> --
> -Dave
>
>
>
>
More information about the swift-evolution
mailing list