Whence came UFCS?
Meta
jared771 at gmail.com
Fri Jul 27 20:06:56 UTC 2018
On Friday, 27 July 2018 at 03:41:29 UTC, Sameer Pradhan wrote:
> During our Boston D Meetup today, we went through and
> deconstructed Walter's wonderfully elegant blog post from 2012
> called "Component Programming in D"
>
> http://www.drdobbs.com/article/print?articleId=240008321&siteSectionName=architecture-and-design
>
> I stumbled upon this gem (and another score or so articles on
> the digital mars site) a few days back, while following various
> hyperlinks, within and around the blog on Walter's take on what
> was C's biggest mistake which has been getting a lot of
> comments over the past few days.
>
> This post which I have been trying to digest bit-by-bit over
> the past few days, made me realize why I fell in love with D in
> the first place. To top it all, Steven played a lightening talk
> from 2018, called "values as types" by Andreas
> (https://youtu.be/Odj_5_pDN-U?t=21m10s) which is a parody on
> C++ and is so utterly ludicrous, we could not stop laughing.
> Anyway, back to the point.
>
> During the same period, but independent of the thread on C's
> mistake, I found that Kotlin has something called "Extension
> Functions" and "Extension Properties"
> (https://kotlinlang.org/docs/reference/extensions.html) via.
> the following article on Medium
>
> https://medium.com/@magnus.chatt/why-you-should-totally-switch-to-kotlin-c7bbde9e10d5
>
> Specifically Item #14.
>
> What I saw/read seemed eerily familiar. Almost like a "wolf in
> sheeps clothing". The example screamed of UFCS. Then, later,
> while reading the above Kotlin documentation, I saw a reference
> being made to similar functionality in C# and Gosu (apparently
> a programming language that I have never heard of before today)
> called Extensions.
>
> Furthermore, I found that Project Lombok
> (https://projectlombok.org/features/experimental/ExtensionMethod) has tried to make this idiom/functionality available in Java through a @ExtensionMethod annotation. This also almost exactly represent UFCS functionality, though much more cludgy, I must say.
>
> Therefore, after reading the word "Extension" in three
> different contexts, I started wondering and various questions
> came to mind, starting with---Whence came UFCS?
>
> a. Did Walter and/or Andrei invent it independently of C#?
> b. Was it called UFCS in some other language?
> c. Were they not aware of Extensions when they coined UFCS?
> d. Are UFCS and Extensions really one and the same thing?
> e. If not, what is/are the difference(s)? And is this why a
> different term/acronym was coined?
>
> As far as I can tell a Google search on UFCS leads to only
> material on D and a Wikipedia entry mentioning Stroustrup and
> Sutter's proposal from 2016 to extend C++ to have this
> facility. It is likely that the Wikipedia article is severely
> incomplete in its historical connections as there is no mention
> of C# or that of Walter's 2012 Dr. Dobbs post which already
> lists it towards the end---in the list of features that D has
> which allows the creation of elegant components---among other
> dozen or so features.
>
> In the end I thought I might as well dump my thoughts on the D
> forum and hear straight from the horse's (or horses')
> mouth(s)---so to speak.
>
> --
> Sameer
I remember reading an article that Andrei wrote a long time ago
that cited an older language as the inspiration for UFCS, but it
was probably from around 2007 where UFCS for arrays was already
well-established (I never knew that it was actually a bug at one
point). I don't remember what that language was unfortunately.
More information about the Digitalmars-d
mailing list