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:55:22 PDT 2014


On Tuesday, 19 August 2014 at 00:54:25 UTC, Idan Arye wrote:
> 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);
>     }

Sorry - that should have been:

      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!(dup)();
          }
          arr2[0][0]=9;
          assert(arr2[0][0] == 1);
      }


More information about the Digitalmars-d-learn mailing list