Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Re: OCAML Downcasting?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: skaller <skaller@u...>
Subject: Re: [Caml-list] Re: OCAML Downcasting?
On Wed, 2004-09-22 at 08:20, Marcin 'Qrczak' Kowalczyk wrote:

> Attempts to avoid downcasts are often unmodular, they require to
> specify all possible variants in one place.

It makes no difference. You have do specify them all anyhow,
downcast or not.

> > Downcasting is a sign you're doing something wrong.
> 
> I disagree. It may be, or not. Just that OCaml doesn't support
> something doesn't imply that it must be evil.

The unstated assumption is that you want early error detection
and efficiency which static typing promises.

If you are willing to forgo these benefits -- and have
slow unreliable programs -- then you can use downcasts,
RTTI, or even code in Assmebler.

My typesetting tool Interscript uses Python for
dynamic message dispatch -- a certain class of
errors lead to exceptions being thrown which are
just ignored. This is intentional. The result
is sometimes bad output, so you have to actually
proofread the generated document to be sure
you got what you expected.

The reason is that (a) usually ignoring a
request to use a LaTeX feature in HTML is reasonable,
or vice versa. (b) termination of processing with
a weird error makes finding the problem harder
than generating bad output where you can actually
examine the consequences visually.

I.e. what I'm doing is even 'worse' than run
time error diagnosis -- I'm checking,
and then ignoring the fault :)

> Of course something is necessary to determine at runtime whether it's
> safe. I don't advocate unsafe constructs.

In the static typing world, 'safe' means errors are always
detected at compile time.

Clearly this is impossible in general, so safe is a
relative term. I consider Ocaml *unsafe* because
array bounds aren't checked at compile time.

Catching the error at run time is better than
not catching it -- but it still means the program
is unsafe.

Generally, we'd like to make programs safer where
possible. The problem with downcasting as a general
technique is that it bypasses static safety where
it is in fact desired and is available.

-- 
John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net



-------------------
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