On 12/09/2016 3:15 AM, Neurone wrote:
Hi,
Are there universal rules that I can apply to determine what types have
reference or value semantics? I know that for the basic primitive C
types (int, bool, etc) has value semantics.
In particular, I'm still trying to understand stack vs GC-managed
arrays, and slices.
Finally, I have an associative array, and I want to pass it into a
function. The function is only reading data. Would putting ref on in
function parameter pass it by reference?
Ok two questions here:
1) What constitutes value vs reference passing
2) Allocation location
So basically you have two "locations" where something can be stored, on
the stack or the heap.
Now I put it in quotes because they are both in RAM somewhere so it
doesn't matter too much. The only difference is only a subset of the
stack is readily allocatable at any single function call.
So in regarding to what gets passed by value, well that is simple.
If it is a class, you're passing a few pointers as your reference.
All primal types including pointers are passed as values.
If you use ref, you turn a type into a pointer auto magically (a
location in the stack most likely).
Just so you're aware, arrays are slices in D (excluding static arrays).
They are simply a pointer + length.
So I suppose you can think of references and slices as a container of
sorts for other values which get passed in.