[OT] Unity migrating parts of their engine from C++ into High Performace C# (HPC#)
Meta
jared771 at gmail.com
Mon Apr 2 23:01:25 UTC 2018
On Monday, 2 April 2018 at 22:55:58 UTC, Meta wrote:
> On Monday, 2 April 2018 at 20:19:17 UTC, rumbu wrote:
>> On Monday, 2 April 2018 at 18:54:28 UTC, 12345swordy wrote:
>>>>
>>>> - Only structs are used, no classes;
>>>> - .NET collections are replaced by native collections that
>>>> manage their own memory
>>>> - No code that would trigger GC is allowed
>>>> - Compiler is aware of Unity features and is able to explore
>>>> SIMD, by doing auto-vectorization, and transparently
>>>> transform structs fields into optimal representations
>>
>>
>> The struct type in C# is more versatile than the D's
>> equivalent, mainly because of the fact that you can inherit
>> interfaces. You can have template constraints in D but this is
>> not as user friendly as a struct interface.
>>
>> So in C# you can write code like this:
>>
>> interface IRange<T>
>> {
>> void popFront();
>> bool empty();
>> T front();
>> }
>>
>> struct MyRange<T>: IRange<T>
>> {
>> //implementation
>> }
>>
>> void foo<T>(IRange<T> someRange)
>> {
>> //do something with someRange even it's a struct
>> //this includes code completion and other IDE specific
>> stuff.
>> }
>>
>>
>> In D, template constrains are not very clean and they not have
>> IDE support:
>>
>> void foo(T)(T someRange) if (isInputRange!T)
>> {
>>
>> }
>
> Worth mentioning is that doing this necessarily causes the
> struct to be boxed. I would not be surprised if they ban
> structs inheriting from interfaces.
To clarify, the struct will be boxed when passing it to a
function that accepts an IFoo, or if you do `IFoo foo =
someStruct` or the like.
More information about the Digitalmars-d
mailing list