digitalmars.D.learn - In the new D release why use free functions instead of properties?
- Gary Willoughby (5/5) Aug 18 2014 In the new D release there have been some changes regarding
- Jonathan M Davis (9/14) Aug 18 2014 Probably because they never should have been properties in the
- Idan Arye (16/33) Aug 18 2014 Also std.algorithm's heavy usage of passing delegates as template
- Idan Arye (15/52) Aug 18 2014 Sorry - that should have been:
- Gary Willoughby (5/61) Aug 19 2014 This kind of makes sense for `dup` because that could be applied
- Dicebot (5/9) Aug 19 2014 I am pretty sure this is just one of steps for "librarization" of
- monarch_dodra (7/24) Aug 19 2014 Actually, the new free functions *are* properties. All that you
- Jonathan M Davis (5/10) Aug 19 2014 Yuck. It shouldn't even be a breaking change to make them
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?
Aug 18 2014
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
Aug 18 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: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); }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
Aug 18 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: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); }On Monday, 18 August 2014 at 21:02:09 UTC, Gary Willoughby wrote: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); }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
Aug 18 2014
On Tuesday, 19 August 2014 at 00:55:24 UTC, Idan Arye wrote:On Tuesday, 19 August 2014 at 00:54:25 UTC, Idan Arye wrote:This kind of makes sense for `dup` because that could be applied across types but what about rehash, byKey, byValue, keys, values, etc of AA's? Surely these will only be used by AA's? Is this more about speed optimisation?On Monday, 18 August 2014 at 21:17:11 UTC, Jonathan M Davis wrote: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); }On Monday, 18 August 2014 at 21:02:09 UTC, Gary Willoughby wrote: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); }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
Aug 19 2014
On Tuesday, 19 August 2014 at 16:04:15 UTC, Gary Willoughby wrote:This kind of makes sense for `dup` because that could be applied across types but what about rehash, byKey, byValue, keys, values, etc of AA's? Surely these will only be used by AA's? Is this more about speed optimisation?I am pretty sure this is just one of steps for "librarization" of AA implementation and minimizing special handling for it in compiler. Not that valuable on its own, just one of many small steps towards hard goal.
Aug 19 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:Actually, the new free functions *are* properties. All that you just declared is valid, but we never got around to doing it. Walter (If I remember correctly) was opposed. So right now, even if "dup" is a free function, "myArray.dup()" is still invalid. :(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
Aug 19 2014
On Tuesday, 19 August 2014 at 16:28:54 UTC, monarch_dodra wrote:Actually, the new free functions *are* properties. All that you just declared is valid, but we never got around to doing it. Walter (If I remember correctly) was opposed. So right now, even if "dup" is a free function, "myArray.dup()" is still invalid.Yuck. It shouldn't even be a breaking change to make them functions unless code is specifically testing dup vs dup(). We really should make that change IMHO. - Jonathan M Davis
Aug 19 2014