[m-dev.] [m-users.] Comparison in the reference manual

Julien Fischer jfischer at opturion.com
Mon Nov 16 09:38:28 AEDT 2015

Hi Mark,

On Mon, 16 Nov 2015, Mark Brown wrote:

> Moved to developers list...
> On Mon, Nov 9, 2015 at 10:09 AM, Paul Bone <paul at bone.id.au> wrote:
>> While answering a question on IRC I tried to find the relevant part in the
>> reference manual for comparison.  Specifically that the order of functors in
>> a type declaration is significant.  But I could not find it.
> Regarding the more general question, the standard orderings for char
> and string are documented as system-dependent in the corresponding
> library modules.
> I'm quite sure ints and floats were intended to have the mathematical
> ordering, with the usual caveats about floating point equality; I know
> I have written code that relies on this. But it's undocumented and
> thus undefined, strictly speaking.
> Tuples are undocumented. Comparison for pred and func types can't be
> implemented, so the point is moot.
> I'm wondering, can the language define a bit more than it has thus
> far?

I think that's a good idea; I suspect most users have been assuming more
than that language actually guarantees anyway.

> The idea would be to provide some useful theorems, while being
> careful not to constrain implementations too much. Here are some
> suggestions:
> int: Define it as having the mathematical ordering, and require
> implementations to disallow overflowing literals. The latter is so you
> don't have 9223372036854775808 < 0 being true. (You may still have
> 9223372036854775807 + 1 < 0, since the + operation is undefined on
> overflow.)
> float: We can at least say that < and > never contradict the
> mathematical ordering, even if = can due to lack of precision. Can we
> assume implementations may use +/- infinity?

If we are assuming IEEE 754 floats, yes.   For all of our current
backends that is definitely yes.

> Otherwise a caveat on overflowing float literals may be needed.
> (Incidentally, for an overflowing float literal I get an error from
> the C compiler about infinity being undeclared.)

Do you mean along the lines of bug #146?  (The intended fix is that
the compiler should replace overflowing float literals with calls to
float.infinity/0 or -float.infinity/0.)

> char: Are these officially unicode now?


> We could define them as having the code point ordering.
> string: There are probably good reasons to keep this ordering
> undefined. But maybe we could say something about the ascii subset?
> tuples: These exist as a convenience to the user. Would defining them
> as having the obvious ordering be likely ever to cause problems for
> implementations?

No, I can't see that it would cause any problems.


More information about the developers mailing list