From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 914ACBBAF for ; Mon, 10 Aug 2009 15:43:05 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgwBADvBf0pCbwQZkGdsb2JhbACaTgEBAQEJCQwHEwS0KoQYBYInD4dY X-IronPort-AV: E=Sophos;i="4.43,353,1246831200"; d="scan'208";a="32269987" Received: from out1.smtp.messagingengine.com ([66.111.4.25]) by mail3-smtp-sop.national.inria.fr with ESMTP; 10 Aug 2009 15:43:02 +0200 Received: from compute2.internal (compute2.internal [10.202.2.42]) by gateway1.messagingengine.com (Postfix) with ESMTP id 38A516ECD; Mon, 10 Aug 2009 09:43:01 -0400 (EDT) Received: from heartbeat1.messagingengine.com ([10.202.2.160]) by compute2.internal (MEProxy); Mon, 10 Aug 2009 09:43:01 -0400 X-Sasl-enc: avTw311jDJJI696I8XKmNEUwY6FHNlZX6BVH9/9nk73W 1249911780 Received: from [192.168.1.12] (ALyon-157-1-30-124.w86-193.abo.wanadoo.fr [86.193.245.124]) by mail.messagingengine.com (Postfix) with ESMTPSA id 706C82DC26; Mon, 10 Aug 2009 09:43:00 -0400 (EDT) Message-ID: <4A80225A.3060606@ens-lyon.org> Date: Mon, 10 Aug 2009 15:36:26 +0200 From: Martin Jambon User-Agent: Thunderbird 2.0.0.17 (X11/20081008) MIME-Version: 1.0 To: Elnatan Reisner Cc: Alain Frisch , Caml Mailing List Subject: Re: [Caml-list] Re: ocaml sefault in bytecode: unanswered questions References: <000301ca184b$032b8cc0$0982a640$@chollet@free.fr> <000701ca184d$29507e90$7bf17bb0$@metastack.com> <001001ca18c7$37b22220$a7166660$@chollet@free.fr> <001501ca18cc$d59a61a0$80cf24e0$@metastack.com> <001201ca18e9$c4456810$4cd03830$@chollet@free.fr> <4A7ED53B.90607@frisch.fr> <32623A80-A2C3-4AE4-B9FA-3FC0888494BD@cs.umd.edu> <4A7F1EEF.2050301@frisch.fr> <1249910539.27080.10.camel@veruca.cs.umd.edu> In-Reply-To: <1249910539.27080.10.camel@veruca.cs.umd.edu> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Spam: no; 0.00; ens-lyon:01 ocaml:01 bytecode:01 0200,:01 frisch:01 mutable:01 symmetric:01 toplevel:01 arrays:01 recursive:01 pointers:01 bool:01 val:01 2009:98 2009:98 Elnatan Reisner wrote: > On Sun, 2009-08-09 at 21:09 +0200, Alain Frisch wrote: >> On 8/9/2009 8:56 PM, Elnatan Reisner wrote: >>> My other issue is that the description of (==) for mutable structures >>> doesn't specify that it is symmetric; reading the documentation >>> literally only implies that e1 is a substructure of e2. Even just adding >>> 'and vice versa' might clean this up: >>> |e1 == e2| is true if and only if physical modification of |e1| also >>> affects |e2 and vice versa| >> It depends on what 'physical modification' and 'affect' mean. Clearly, >> the documentation means toplevel modifications of the values (i.e. >> modifying fields for record values, or elements for arrays or strings). >> If one includes deep modifications, then your extended criterion does >> not work either (think about two mutually recursive records). > > You're right; thanks for pointing this out. But what does this mean for > physical equality? What does it really mean? Does [e1 == e2] mean e1 and > e2 are the same entity in memory---i.e., they are equal as C pointers? > >> Note that (=) sometimes terminates for cylic values. >> >> # type t = A of t | B of t;; >> type t = A of t | B of t >> # (let rec x = A x in x) = (let rec x = B x in x);; >> - : bool = false > > Again, thanks for pointing this out. But can (=) ever evaluate to true > on cyclic structures? Yes: let rec x = `A x;; let o = object val x = x end;; o = o;; -> true Martin -- http://mjambon.com/