Whence came UFCS?

Sameer Pradhan pradhan at cemantix.org
Fri Jul 27 03:41:29 UTC 2018


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



More information about the Digitalmars-d mailing list