From: Walid Taha <taha@cs.rice.edu>
Cc: <caml-list@inria.fr>
Subject: Re: [Caml-list] dynamic runtime cast in Ocaml
Date: Wed, 6 Nov 2002 21:28:59 -0600 (CST) [thread overview]
Message-ID: <Pine.GSO.4.33.0211062127230.18638-100000@frosty.cs.rice.edu> (raw)
In-Reply-To: <20021106135428.A8640@pauillac.inria.fr>
Were nested quantifiers (either existentials or universals) considered in
the context of OCaml? If not, are there plans to add them? Thanks.
Walid.
On Wed, 6 Nov 2002, Xavier Leroy wrote:
|> 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
|
-------------------
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
next prev parent reply other threads:[~2002-11-07 3:30 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-06 11:53 Basile STARYNKEVITCH
2002-11-06 12:54 ` Xavier Leroy
2002-11-07 2:01 ` Michael Vanier
2002-11-07 8:11 ` Jacques Garrigue
2002-11-07 3:28 ` Walid Taha [this message]
2002-11-07 7:22 ` Jacques Garrigue
2002-11-07 14:49 ` Walid Taha
2002-11-08 15:26 ` Alain Frisch
2002-11-11 9:26 ` Jacques Garrigue
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.GSO.4.33.0211062127230.18638-100000@frosty.cs.rice.edu \
--to=taha@cs.rice.edu \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox