English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
equality operators in OCaml
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2008-07-24 (22:32)
From: Jon Harrop <jon@f...>
Subject: Re: [Caml-list] equality operators in OCaml
From: "Raj Bandyopadhyay" <rajb@rice.edu>
> Hi OCaml folk
> I apologize if I've been asking too many questions on this list recently, 
> but I'm working on a heavy OCaml application and need help sometimes.
> I am having a disagreement with a colleague about how the equality 
> operators in OCaml work and am trying to resolve it conclusively.
> 1) I understand that the '==' operator is basically a pointer comparison 
> i.e. a==b true  iff a and b are the same entity. Is this true?

There are some complications here. Firstly, NaN has multiple representations 
that may or may not be physically equal but is always structurally unequal 
to itself. Secondly, OCaml's implicit allocation can make "same entity" 
unclear, constant subexpressions (e.g. Some 3) may or may not be hoisted.

The only place I ever use == and != is when optimizing code in such a way 
that unexpected results from those functions result in slow but still 
correct code.

> 2) Where can I find the code implementing the '==' operator in the OCaml 
> code?

Can you just compile it and look at the assembler? There are probably many 
different outputs depending upon the statically resolved types.

> 3) In case I do want to check object identity and can use the == operator, 
> would it be faster to use '==', '=' or a match statement?

I believe the == operator would be fastest. More often that not, you want < 
and > so you end up augmenting your OCaml data structures with unique IDs 

Note that physical equality does not even exist in SML and the designers of 
SML stand by that design decision. Perhaps it is best to avoid == in OCaml