From: Didier.Remy@inria.fr (Didier Remy)
To: sumii@lute.is.s.u-tokyo.ac.jp (Eijiro Sumii)
Cc: caml-list@inria.fr, sumii@lute.is.s.u-tokyo.ac.jp
Subject: Re: dynamic method look-up?
Date: Mon, 6 Apr 1998 18:57:17 +0200 (MET DST) [thread overview]
Message-ID: <199804061657.SAA26885@pauillac.inria.fr> (raw)
In-Reply-To: <199804021049.TAA20435@lute.is.s.u-tokyo.ac.jp> from "Eijiro Sumii" at Apr 2, 98 07:49:36 pm
> the assembly code generated by ocamlopt seems to contain an ascii
> string "foo" and to use it at runtime.
Yes it does. But the string "foo" is only used at load time to create some
runtime tables.
> Is the method `foo' dynamically looked up before its invocation?
1. The offset at which the method is stored is not always known statically
(this is difficult with multiple inheritance and separate compilation).
2. However, there are just a few (fix number) of indirections through a
dictionary to find the exact code to execute. (This is nothing like
searching for the method in an A-list.)
> If it is, isn't there a
> more efficient way than dynamic method look-up to implement method
> invocation?
The actual schema is not inefficient. It could still be improved using
static analyses to find methods calls to objects whose classes are
statically known (as is currently done for functions).
> (something like index passing in Ohori's polymorphic
> record calculus [1],
The compilation method of [1] relies on the types of records to uniquely
determine their representation. It does not apply to Ocaml that also allows
subtyping. Subtyping changes the types of objects without changing their
representation in a way that contradicts the previous condition. Roughtly,
({a = 1; b = 2} :> {a : int}) has the same time as {a = 1} but should
clearly have a different representation.
Indeed, it is important that subtyping behaves as the identity to keep
sharing, since in particular objects may have mutable fields.
> or implicitly generating and passing some
> fuctions like a coercion function and a put function in Hofmann &
> Pierce's positive subtyping [2])
I am not sure that [2] can help here. Moreover, we just do not want to pass
coercion functions, which would destroy sharing.
Didier.
prev parent reply other threads:[~1998-04-07 11:24 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-04-02 10:49 Eijiro Sumii
1998-04-06 16:57 ` Didier Remy [this message]
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=199804061657.SAA26885@pauillac.inria.fr \
--to=didier.remy@inria.fr \
--cc=caml-list@inria.fr \
--cc=sumii@lute.is.s.u-tokyo.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