Core vs Library

Jarrett Billingsley kb3ctd2 at yahoo.com
Mon Apr 14 13:46:50 PDT 2008


"Walter Bright" <newshound1 at digitalmars.com> wrote in message 
news:fu0bb5$1sa1$1 at digitalmars.com...

>> 1: Yes, in .Net languages the core types are aliases to structs in 
>> System, not the other way around.
>
>
> I don't buy it. The C# compiler somewhere in it knows what an int is, 
> after all, divides aren't done by a subroutine somewhere, they're done by 
> a hardware instruction.
>
> If you don't agree, show me how System.Int32 can be implemented without 
> referring to a core int type.

It's not that the C# compiler knows what an int is, it's how the .net 
runtime represents them.  As far as the C# type system is concerned, 'int' 
and 'System.Int32' are one and the same.  If you could do "typeof(5)" in C# 
it'd yield System.Int32.  System.Int32 is a value type, one of the builtin 
types in the .net runtime.  Being a value type, it is allocated on the 
stack, passed by copy, all the things you'd expect.

When a .net high-level language compiler (like the C# compiler) emits code, 
it's emitting CLR, not x86.  If it emits a "div" instruction with two values 
of type System.Int32 as its parameters, the JIT compiler then has the 
opportunity to optimize that down to a single x86 "idiv" instruction rather 
than making a subroutine call.  However, System.Int32s, being object types, 
can still participate in object-like behavior - they can have methods and 
such.

Remember that codegen in .net languages is a 2-step process, and as such, 
the high-level language compiler is not really the one that has to deal with 
low-level representation, even of basic types like int.

> The struct can be optimized if it is based upon *core* types that can be 
> optimized.

OK. 





More information about the Digitalmars-d mailing list