Java binaries

David Piepgrass qwertie256 at gmail.com
Tue Feb 19 16:14:59 PST 2013


>> So how are C++ and C# pointers done in IL ?
>
> There are two kind of pointers in C#: managed and unmanaged. 
> Wrapped in a fixed statement (just to tell the garbage 
> collector to keep fixed references), C# pointers will behave 
> like any native language pointer. This is not the first topic 
> where I read that misconception that slices are a problem for 
> IL. From .net 2.0 (9 years ago) there is the ArraySegment<T> 
> type doing exactly what D slices do. Also, in C# arrays are 
> implicitely convertible to pointers.

IIRC, the biggest incompatibility between D and .NET is that D 
pointers can point to the stack, to unmanaged (non-GC) memory or 
to managed (GC) memory, while simultaneously having unlimited 
lifetime. In .NET, arguments that are passed by reference can 
point to GC or non-GC memory, but pointers inside objects 
(classes or boxed structs) can only point to (1) non-GC non-stack 
memory OR (2) the beginning of a GC object. The key problem: a 
single pointer cannot be used for both purposes!

D pointers and ranges can point to stack, GC or non-GC memory, 
regardless of the location of the pointer or range itself. Also, 
D pointers can point to the interior of an object and not just 
the beginning, while .NET pointers, in general, cannot.

This doesn't make a D implementation for .NET impossible, but if 
you want to run arbitrary D code on .NET, I think it would have 
to run inefficiently because it would constantly have to work 
around limitations of .NET. I think doing D in .NET efficiently 
would require a specialized version of D, or something.

Note that plain old C++ can be used in .NET because C++ pointers 
can't point to GC memory without special .NET-specific types. 
Thus, old-fashioned C++ avoids problems related to the .NET 
garbage collector.

> Anyway, I don't see any use for a D IL compiler, since probably 
> the language syntax will look 90% like C#.

How is "looking" like C# relevant? D looks 90% like C++ too, and 
D is still better. Certainly D is more powerful than C# on the 
whole.


More information about the Digitalmars-d mailing list