caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Michael Vanier <mvanier@cs.caltech.edu>
To: garrigue@kurims.kyoto-u.ac.jp
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Re: OCAML Downcasting?
Date: Tue, 21 Sep 2004 12:27:19 -0700 (PDT)	[thread overview]
Message-ID: <20040921192719.92B859BD95@orchestra.cs.caltech.edu> (raw)
In-Reply-To: <20040921.170339.118021840.garrigue@kurims.kyoto-u.ac.jp> (message from Jacques GARRIGUE on Tue, 21 Sep 2004 17:03:39 +0900 (JST))


> Date: Tue, 21 Sep 2004 17:03:39 +0900 (JST)
> From: Jacques GARRIGUE <garrigue@kurims.kyoto-u.ac.jp>
> 
> There are two important differences between ocaml and other
> OO-languages that have downcasting.
> 
> - inheritance is not subtyping. The subtyping relation being
>   structural, a full fledge typecast would not only require to keep
>   type information at runtime, but to embark a large part of the
>   compiler to check subtyping. This might also be incredibly slow.
> 
>   As a result, downcast is only reasonable when we have both
>   inheritance and subtyping. You're suddenly losing a large part of
>   the language.

But java has interfaces (subtypes), and classes can implement interfaces
(making them subtypes of the interface) without inheritance.  Furthermore,
the class identity can be retrieved from an instance of an interface by
using the instanceof operator.

> 
>   Worse, even if you have a module interface
>      class b :
>        object
>          inherit a
>          ....
>        end
>   in ocaml this does _not_ mean that b inherits from a, just that it
>   has at least a's methods and fields.
>   So the semantics of downcast would not allow abstraction.

I don't understand the point you're trying to make here, but it seems like
a is effectively equivalent to an interface in java (at least from your
description).

> - classes may have type parameters. Assume a situation like
>     class ['a] a = object ... end
>   Then we cannot downcast any runtime object to "a", because we don't
>   know what is its type parameter. Again, downcast would not mix well
>   with other features of the language.

Java now has generics (type parameters), and I assume that it has to get
around this situation somehow.

> 
> So, while this is somehow unfortunate, there is no downcast in ocaml.
> 

I'm sure there are good reasons for this, but I don't find the arguments
you've presented above persuasive.  Not that I'm trying to hold java up as
a shining example of the Right Thing; I'd much rather program in ocaml than
java any day of the week.  But the lack of downcasting has frustrated me in
the past (it's my #1 gripe about ocaml, with the lack of support for
native-code shared libraries at #2).

Mike

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


  parent reply	other threads:[~2004-09-21 19:27 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <ci7tcf$qqf$1@wolfberry.srv.cs.cmu.edu>
     [not found] ` <ci9ggm$i6p$1@wolfberry.srv.cs.cmu.edu>
2004-09-21  8:03   ` Jacques GARRIGUE
2004-09-21  8:43     ` Damien Pous
2004-09-21  9:15       ` Jacques GARRIGUE
2004-09-21  9:29         ` skaller
2004-09-21  9:49           ` Jacques GARRIGUE
2004-09-21  9:34         ` Stefano Zacchiroli
2004-09-21  9:56           ` Jacques GARRIGUE
2004-09-21 19:27     ` Michael Vanier [this message]
2004-09-21 21:38       ` Brian Hurt
2004-09-21 22:06         ` Michael Vanier
2004-09-21 22:32           ` Brian Hurt
2004-09-22  1:04           ` skaller
2004-09-21 22:20         ` Marcin 'Qrczak' Kowalczyk
2004-09-22  2:26           ` skaller
2004-09-22  6:31             ` Marcin 'Qrczak' Kowalczyk
2004-09-22  9:03               ` sejourne_kevin
2004-09-22 10:29               ` Richard Jones
2004-09-22 18:39                 ` Brian Hurt
2004-09-22 10:50               ` skaller
2004-09-22 12:03               ` Alain Frisch
2004-09-22 12:50               ` Cláudio Valente
2004-09-22 13:15                 ` Marcin 'Qrczak' Kowalczyk
2004-09-22 15:50                   ` skaller
2004-09-22 18:42               ` Brian Hurt
2004-09-22 18:44                 ` Marcin 'Qrczak' Kowalczyk
2004-09-22 19:18                   ` Brian Hurt
2004-09-22  0:50         ` skaller
2004-09-22  1:30       ` Jacques GARRIGUE
2004-09-22  2:59         ` skaller

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=20040921192719.92B859BD95@orchestra.cs.caltech.edu \
    --to=mvanier@cs.caltech.edu \
    --cc=caml-list@inria.fr \
    --cc=garrigue@kurims.kyoto-u.ac.jp \
    /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;
as well as URLs for NNTP newsgroup(s).