On Saturday, 27 May 2017 at 19:26:50 UTC, Ola Fosheim Grøstad
wrote:
On Saturday, 27 May 2017 at 19:01:12 UTC, Moritz Maxeiner wrote:
Here, `bar`, takes a (pointer to a) class instance as
parameter `foo`. `foo` is a single pointer, i.e. 8 bytes on a
64bit OS, with *no* special semantics.
Does the language spec say anything about the size of class
references?
Yes, is is defined as `ptrsize` and must have the exact same size
as a pointer to a struct and - more importantly - a pointer to a
stack frame[1].
If you want a smart pointer, use one, but don't suddenly make
something that isn't a smart pointer by language design change
shape into a smart pointer.
Is it specified?
Yes, see above link. Unless you make *all* stack frame pointers
smart pointers (which makes no sense whatsoever), class instances
cannot be smart pointers in the language as it is specified right
now.
The common implementation uses a GC, but does it say that an
implementation cannot use a reference counted smart pointer or
a fat pointer instead?
Sure, but then type `Foo` in the above must remain a normal
pointer, not become a smart pointer.
That really depends on the definition of the language.
Sure, and the definition requires it.
[1] https://dlang.org/spec/abi.html#delegates