[m-dev.] 4 tag bits

Michael Day mikeday at yeslogic.com
Fri Jul 8 17:30:41 AEST 2016


Hi Zoltan,

> The real question is: would this buy us anything worthwhile? How frequent
> are types that have more than 16 functors in which two or more functors
> would get 5+ bit alignment? In my experience, almost all types with
> that many functors are enums.

Indeed. It's an interesting thought experiment, but it's applicability 
to actual programs seems limited.

Some JavaScript implementations have used NaN-boxing to distinguish 
between 64-bit pointers and 64-bit doubles:

https://wingolog.org/archives/2011/05/18/value-representation-in-javascript-implementations

In Prince we have a type like this:

:- type js_value
     --->    undefined
     ;       null
     ;       bool(bool)
     ;       number(number)
     ;       string(js_string)
     ;       object(js_object).

:- type number
     --->    int(int)
     ;       float(float).

Technically the int values are not really necessary, as JavaScript 
doesn't have a primitive int type. So we could simplify it:

:- type js_value
     --->    undefined
     ;       null
     ;       bool(bool)
     ;       number(float)
     ;       string(js_string)
     ;       object(js_object).

Some hypothetical compiler cleverness could notice that this type is 
either a float, a tagged pointer, or an enum, and pack it in a NaN if 
necessary. But it would have complications and overhead that would 
probably make it a bad idea to apply too liberally.

Michael

-- 
Prince: Print with CSS!
http://www.princexml.com


More information about the developers mailing list