[m-rev.] for review: direct argument functor type representation

Julien Fischer juliensf at csse.unimelb.edu.au
Mon Jun 13 20:56:04 AEST 2011

On Tue, 31 May 2011, Peter Wang wrote:

> On 2011-05-26, Peter Wang <novalazy at gmail.com> wrote:
>> Branches: main
>> Implement a type representation optimisation ("direct argument functors"),
>> where a functor with exactly one argument can be represented by a tagged
>> pointer to the argument value, which itself does not require the tag bits,
>> e.g.
>> 	:- type maybe_foo ---> yes(foo) ; no.
>> 	:- type foo       ---> foo(int, int).  % aligned pointer
>> To ensure that all modules which could construct or deconstruct the functor
>> agree on the type representation, I had planned to automatically generate
>> pragmas in .int files to notify importing modules about functors using
>> the optimised representation:
>> 	:- pragma direct_arg(maybe_foo/0, [yes/1]).
> While working on the packed enumerations representation, I came across
> the undocumented `where type_is_abstract_noncanonical' syntax for solver
> types.  When an enumeration is abstract-exported, I use the following
> syntax in the implementation section of the .int file to indicate the
> number of bits required to represent the enumeration, without listing
> the functors.
>    :- type foo where type_is_abstract_enum(3).
> I think the `where' block attached to the type is cleaner than a
> separate pragma, so eventually I will change the `:- pragma direct_arg'
> to something like:
>    :- type maybe_foo
> 	--->	yes(foo)
> 	;	no
> 	where	direct_arg is [yes/1].

I agree.

mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au

More information about the reviews mailing list