Passing dynamic arrays

Daniel Gibson metalcaedes at gmail.com
Mon Nov 8 13:08:50 PST 2010


Walter Bright schrieb:
> Daniel Gibson wrote:
>> Daniel Gibson schrieb:
>>> Daniel Gibson schrieb:
>>>> Walter Bright schrieb:
>>>>> Daniel Gibson wrote:
>>>>>> BTW: What were the reasons to pass static arrays by value in D2 
>>>>>> (while in D1 they're passed by reference)?
>>>>>
>>>>> It makes things like vectors (i.e. float[3]) natural to manipulate. 
>>>>> It also segues nicely into hopeful future support for the CPU's 
>>>>> vector instructions.
>>>>
>>>> Why can't that be done when the static arrays are passed by reference?
>>>
>>> Ah I guess you mean something like "alias float[3] vec3", so one may 
>>> expect vec3 to behave like a value type (like when you define it in a 
>>> struct) so it's passed by value.
>>> That does make sense, even though I'm not sure what's more important: 
>>> consistency between different kinds of arrays or expectations towards 
>>> typed defined from static arrays. ;-)
>>>
>>> I still don't get the part with the CPU's vector instructions though. 
>>> I don't have any assembly knowledge an no experience with directly 
>>> using CPU's vector instructions, but the example of a C function 
>>> wrapping SSE instructions from the wikipedia article[1], which 
>>> multiplies two arrays of floats, loads the arrays by reference and 
>>> even stores the result in one of them.
>>
>> Hrm forgot the link:
>> [1] http://en.wikipedia.org/wiki/Vector_processor
> 
> You don't write an add function by using references to ints. The vector 
> instructions treat them like values, so a value type should correspond 
> to it.

Ok, thanks for explaining :-)


More information about the Digitalmars-d mailing list