[OT] Unity migrating parts of their engine from C++ into High Performace C# (HPC#)

Laeeth Isharc Laeeth at laeeth.com
Tue Apr 3 01:33:06 UTC 2018


On Tuesday, 3 April 2018 at 01:31:12 UTC, Laeeth Isharc 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)
>> {
>>
>> }
>
> You can do that in D too - see Atila's concepts library.

interface IFoo {
     int foo(int i, string s) @safe;
     double lefoo(string s) @safe;
}

@implements!(Foo, IFoo)
struct Foo {
     int foo(int i, string s) @safe { return 0; }
     double lefoo(string s) @safe { return 0; }
}

// doesn't compile
/*
@implements!(Oops, IFoo)
struct Oops {}
*/



More information about the Digitalmars-d mailing list