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);
}