Uniform function call syntax: Difference between revisions

Content deleted Content added
Moved "rust usage of the term" to the end of the article, as an incorrect use does not deserve being above the fold.
Line 4:
== C++ proposal ==
It has been proposed (as of 2016) for addition to C++ by [[Bjarne Stroustrup]]<ref>{{cite web|title="UFCS proposal"|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4174.pdf|format=PDF|website=Open-std.org|accessdate=1 October 2017}}</ref> and [[Herb Sutter]]<ref name="auto"/>, to reduce the ambiguous decision between writing [[free function (c++)|free function]]s and member functions, to simplify the writing of [[generic programming|templated code]]. Many programmers are tempted to write member functions to get the benefits of the member function syntax (e.g. "[[dot-autocomplete]]" to list [[member function]]s);<ref>{{cite web|title=using intellisense|url=https://msdn.microsoft.com/en-us/library/hcw1s69b.aspx|website=Msdn.microsoft.com|accessdate=1 October 2017}}</ref> however, this leads to excessive [[Coupling (computer programming)|coupling]] between [[Class (computer programming)|classes]].<ref>{{cite web|title="How Non-Member Functions improve encapsulation|url=http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197|website=Drdobbs.com|accessdate=1 October 2017}}</ref>
 
== Rust usage of the term ==
Until 2018 it was common to use this term when actually referring to the ''[https://doc.rust-lang.org/book/2018-edition/ch19-03-advanced-traits.html?highlight=trait,function,call#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name Fully Qualified Syntax for Disambiguation].'': In Rust many traits can implement functions with the same name for a given type, so a mechanism is required to tell the compiler which one it should use.
 
Member functions can also be used as free functions by accessing them through the type.
 
The term UFCS is incorrect for these uses, as it allows using methods as (namespaced) free functions, but not using free functions as methods.
 
== Examples ==
Line 60 ⟶ 53:
v5 = v1.add(v2).add(v1)
</source>
 
== Rust usage of the term ==
Until 2018 it was common to use this term when actually referring to the ''[https://doc.rust-lang.org/book/2018-edition/ch19-03-advanced-traits.html?highlight=trait,function,call#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name Fully Qualified Syntax for Disambiguation].'': In Rust many traits can implement functions with the same name for a given type, so a mechanism is required to tell the compiler which one it should use.
 
Member functions can also be used as free functions by accessing them through the type.
 
The term UFCS is incorrect for these uses, as it allows using methods as (namespaced) free functions, but not using free functions as methods.
 
==See also==