[mercury-users] .NET Mercury type representation.
Fergus Henderson
fjh at mercury.cs.mu.oz.au
Sat Mar 1 00:53:37 AEDT 2003
On 28-Feb-2003, Richard A. O'Keefe <ok at cs.otago.ac.nz> wrote:
> I am not familiar with C#. Here's how I would do it in Java.
> abstract class T { abstract int tag(); }
> class T_F extends T { int tag() { return 0; } int x1; object x2; }
> class T_G extends T { int tag() { return 1; } int x2; }
>
> Personally I just wish that .NET choose to make algebraic types
> directly representable in the framework.
>
> The mapping of algebraic types onto Java shown above is pretty direct:
> a class for each type with a subclass for each constructor. If there
> is only one constructor, the "type" and "constructor" classes fuse and
> there is no tag() method.
> No wasted space. The Java tag represents the Mercury tag.
> Isn't such a mapping possible for C#?
Yes, that would be possible in C# (or in IL, the .NET CLR intermediate
language -- we compile to IL, not to C#).
That representation is more space-efficient than our current representation.
It is a little less time-efficient, because getting the tag requires a
virtual function call (which typically requires two loads, an indirect
jump, and a return) rather than just loading a field. But nevertheless
this might well be a better trade-off overall than our current scheme.
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
The University of Melbourne | of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-users mailing list
post: mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-users-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the users
mailing list