From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id JAA31263 for caml-redistribution; Fri, 15 Oct 1999 09:31:48 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id BAA13237 for ; Fri, 15 Oct 1999 01:26:30 +0200 (MET DST) Received: from mail5.microsoft.com (mail5.microsoft.com [131.107.3.121]) by nez-perce.inria.fr (8.8.7/8.8.7) with SMTP id BAA08963 for ; Fri, 15 Oct 1999 01:26:24 +0200 (MET DST) Received: from 157.54.9.108 by mail5.microsoft.com (InterScan E-Mail VirusWall NT); Thu, 14 Oct 1999 16:17:09 -0700 (Pacific Daylight Time) Received: by INET-IMC-05 with Internet Mail Service (5.5.2650.21) id <462Z0JA3>; Thu, 14 Oct 1999 16:17:08 -0700 Message-ID: <783D93998201D311B0CF00805FEAA07B7E8F6C@RED-MSG-42> From: Manuel Fahndrich To: "'skaller'" Cc: caml-list@inria.fr Subject: RE: Proposal for study: Add a categorical Initial type to ocaml Date: Thu, 14 Oct 1999 16:16:54 -0700 X-Mailer: Internet Mail Service (5.5.2650.21) Sender: weis I did not word what I meant correctly. In the case of initial values, errors can occur anywhere in the code, namely, whenever I access an uninitialized value. Since these values can live in records, and the records can be passed around, the error can occur anywhere. Now, with a well-defined and encapsulated use of Obj.magic, such errors can be avoided. E.g. in the extensible array case, I can write the module in such a way that no matter what code I write outside of that module (not using Obj.magic), it cannot result in an error. -Manuel -----Original Message----- From: skaller [mailto:skaller@maxtal.com.au] Sent: Thursday, October 14, 1999 3:44 PM To: Manuel Fahndrich Cc: caml-list@inria.fr Subject: Re: Proposal for study: Add a categorical Initial type to ocaml Manuel Fahndrich wrote: > > skaller wrote: > > [...] > > > Like I've been saying, with option you can turn it off, with > Obj.magic, the implementor ought to be damned sure he's doing things right. > But with these special "uninitialized value" sorts of things, people like > me who've gotten used to good type systems keep looking over their > shoulders because they're afraid it might turn around and bite > them in the butt. > >> How is this different from Obj.magic? Can't that bite you >> in the ass too? > >>> The difference is that in the first case of uninitialized values, they can >>> crop up anywhere in your program, since they get propagated. Using Obj.magic >>> within a special module such as resizable arrays confines the danger to that >>> module. The programmer can make sure (through extensive code reviews of a >>> finite piece of code) that outside the module, things cannot go awry. No. It is the other way around. Obj.magic values can get propagated, and so cause a problem. The special initial can NOT be propagated. Any attempt to copy such a value raises an exception. Ensuing this does not happen is also a matter of hiding within a modular abstraction, but at least an exception will help detect such localised errors. -- John Skaller, mailto:skaller@maxtal.com.au 1/10 Toxteth Rd Glebe NSW 2037 Australia homepage: http://www.maxtal.com.au/~skaller downloads: http://www.triode.net.au/~skaller