[m-dev.] Abstract exported dummy types
Julien Fischer
jfischer at opturion.com
Thu Oct 19 12:36:34 AEDT 2017
On Thu, 19 Oct 2017, Peter Wang wrote:
>>> Note that other modules would need to be recompiled when either an exported dummy type
>>> is changed (with the second way above), or when a nonexported type is changed either
>>> from a dummy type to a nondummy type or vice versa. So the two ways above have similar
>>> performance implications; the difference being that the second is in a way more "honest"
>>> about the costs (and the benefits) of exposing the dummy-ness of the type.
>>
>> Is it possible to not apply the dummy type optimization to abstract
>> exported types (i.e. the dummy type optimization would not apply in both
>> the defining module and any importing ones)?
>
> The compiler could silently disable the dummy type optimization on
> abstract exported types, or require a pragma from the programmer to
> disable the dummy type optimization on that type explicitly.
>
> But I would still prefer if users could define their own abstract
> exported dummy types, by adding a pragma in interface files.
>
> We currently have "where type_is_abstract_enum" to expose something
> about the representation of values of an abstract type while maintaing
> the abstraction barrier, and I think we'll want something for
> fixed-width integer types, too. Exposing the dumminess of a type seems
> like just another aspect of the same idea.
There are two cases here:
1. (as in Mantis 441)
:- interface.
:- type fio(T).
:- implementation.
:- type fio(T) ---> fio(T).
2.
:- interface
:- type fio(T).
:- implementation.
:- type fio(T) ---> fio.
(1) is only dummy if T is dummy (e.g. fio(unit)), (2) is always dummy.
Ideally, you would want the dummy type optimization to always apply to
case (2).
Julien.
More information about the developers
mailing list