On Wednesday, 20 August 2014 at 00:13:32 UTC, ketmar via Digitalmars-d wrote:
On Tue, 19 Aug 2014 23:58:57 +0000
Andrew Godfrey via Digitalmars-d <[email protected]> wrote:

In either case, we are "passing a reference by value".
yes. but passing null class will not allow to call it's methods, and
passing null array will. i.e.

  auto foo (MyClass a) { return a.length; }

will crash if length is not a static method (and it can't be static) and foo is called like this: foo(null). but the same call will work for
'int[]'.

so user can assume that 'int[]' is something similar to class, and it's perfectly ok to use int[] methods, and '~=' is just the overloaded
method, which should change contents of passed dynarray. again,
overloaded '~=' will work for class (more or less), but will
inevitably fail (i.e. will not change passed arg) for dynarray.

and it's clear that 'a = new MyClass()' creates new object. and it's
not clear at all that 'a ~= 42' creates new object too. it's
counterintuitive.

that's why i think that we need new term.

Well, this is just one case of a general confusion that classes and dynamic arrays already share, by virtue of having hidden reference semantics (i.e. the "." operator dereferences in some cases and not in others, sometimes surprising novices).

You can see this in the existing array doc (http://dlang.org/arrays)
where it describes the "sizeof" property for dynamic arrays.
sizeof returns the size of the "dynamic array reference". A novice might expect it to return the size of the pointed-to array, to act more like the static-array case.

Reply via email to