In the new D release why use free functions instead of properties?

Idan Arye via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Aug 18 17:54:23 PDT 2014


On Monday, 18 August 2014 at 21:17:11 UTC, Jonathan M Davis wrote:
> On Monday, 18 August 2014 at 21:02:09 UTC, Gary Willoughby 
> wrote:
>> In the new D release there have been some changes regarding 
>> built-in types.
>>
>> http://dlang.org/changelog.html?2.066#array_and_aa_changes
>>
>> I would like to learn why this has been done like this and why 
>> it is desired to be free functions rather than properties?
>
> Probably because they never should have been properties in the 
> first place. Properties are supposed to emulate variables, 
> whereas something like dup is clearly an action. So, it's 
> clearly not supposed to be a property. However, because D 
> doesn't require parens on a function with no arguments, you can 
> still call it without parens. Some of the changes probably also 
> help with cleaning up the AA internals, which is sorely needed.
>
> - Jonathan M Davis

Also std.algorithm's heavy usage of passing delegates as template 
arguments makes it more elegant to use free functions:

     import std.algorithm;
     import std.compiler;

     void main()
     {
         int[][] arr=[[1,2],[3,4]];
         static if (version_minor<=65){
             auto arr2=arr.map!(a => a.dup)();
         }else{
             auto arr2=arr.map!(a.dup)();
         }
         arr2[0][0]=9;
         assert(arr2[0][0] == 1);
     }


More information about the Digitalmars-d-learn mailing list