On Fri, 07 Jan 2011 07:54:06 -0500, so <[email protected]> wrote:

clear as a global function is for destroying a class/struct

clear as a member can do anything.  clear is not a keyword.

clear(container) -> same as delete container, but without freeing any memory.

container.clear() -> remove all elements

This has been brought up before as a problem, I'm not sure it's that terrible, but I can see why there might be confusion.

Thanks for the example, this semantical issue was bugging me for a while (not the OOP vs whatever flamewar).

Is there a semantical difference between "function(obj)" and "obj.function()"?
If we are not clear on this simple thing, we should just stop here :)

Yes, there is a huge semantic difference. One is a member function the other is a free function. Currently, you must use function(obj) for a free function and obj.function() for a member function.

The one exception is for arrays, for which arr.fn() is translated to fn(arr).

Theoretically, we are going to get something called uniform function call syntax, where that property of arrays is spread to all types (including classes and structs), and at that point, we are going to start having conflicts. The obvious thing to do in this case is that an actual member function always overrides a free function. But this would cause confusion with things like 'clear', where a member function can override the semantic meaning of a common function.

My personal opinion is that UFC is likely going to be more trouble than it's worth (recent developments have significantly lowered the value of UFC, such as final interface functions), but it is in TDPL, so we'll see if D sticks to that plan.

-Steve

Reply via email to