From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id NAA12320; Wed, 6 Nov 2002 13:54:31 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id NAA12445 for ; Wed, 6 Nov 2002 13:54:30 +0100 (MET) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id gA6CsS523589; Wed, 6 Nov 2002 13:54:28 +0100 (MET) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id NAA12211; Wed, 6 Nov 2002 13:54:28 +0100 (MET) Date: Wed, 6 Nov 2002 13:54:28 +0100 From: Xavier Leroy To: Basile STARYNKEVITCH Cc: caml-list@inria.fr Subject: Re: [Caml-list] dynamic runtime cast in Ocaml Message-ID: <20021106135428.A8640@pauillac.inria.fr> References: <15817.713.977123.557926@hector.lesours> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0i In-Reply-To: <15817.713.977123.557926@hector.lesours>; from basile@starynkevitch.net on Wed, Nov 06, 2002 at 12:53:45PM +0100 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk > I am sometimes lacking the dynamic cast (with a runtime test) in > Ocaml. Assuming that I have the usual point and colored_point classes > (as in the 3.06 Manual), I want to deal with point array-s and test if > the 3rd point is in fact a colored point. > Is there some type-theoritical issues here? There was a long thread on this topic on this list not long ago. Several approaches were discussed: using datatypes (Point of point | CPoint of cpoint), extensible datatypes (via the type "exn" of exceptions), etc. See also Coca-ML: http://www.pps.jussieu.fr/~emmanuel/Public/Dev/coca-ml/index-en.html This said, my opinion on downcasts is that they are a low-level, dangerous feature that is best replaced by advanced, statically-typed constructs like OCaml provides. (Some day, I'll have a bumper sticker custom-made that reads "Caml programmers do it statically".) In my (admittedly limited) experience with Java, 95% of downcasts in Java code fall in one of the following scenarios: - when using container classes (program puts a Foo in a Hashtable, reads it back as Object, needs downcast to Foo); - when using binary methods (equal(), compare()) - to encode sum types (a Foo is a Bar or a Gee). The OCaml type system is able to type-check all three scenarios statically, using parameterized classes, "mytype" specialization, and datatypes / variants (respectively). The remaining 5% of downcasts were kludges where the programmer managed to ruin a perfectly good class hierarchy by sprinkling type tests everywhere, rather than subclassing and redefining virtual methods adequately in classic OO fashion. To be fair, I may have missed some legitimate uses of downcasts in complicated situations. But I believe these legitimate uses are uncommon enough that it is best to find another way to express the desired behavior, rather than extend OCaml with downcasts. That you can do self-modifying code in assembler, Duff's device in C, or downcasts in Java doesn't mean that you want to do it in OCaml as well :-) - Xavier Leroy ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners