From: Benjamin Geer <ben@socialtools.net>
To: Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] does class polymorphism need to be so complicated?
Date: Thu, 21 Aug 2003 09:17:25 +0100 [thread overview]
Message-ID: <3F448015.8090106@socialtools.net> (raw)
In-Reply-To: <20030821092849B.garrigue@kurims.kyoto-u.ac.jp>
Jacques Garrigue wrote:
> [explanation of issues concerning method polymorphism]
Thank you for explaining this.
> To speak truly, the current syntax is based on the assumption that you
> won't define often polymorphic methods, and that defining them is a
> work for library designers, not for the average end user.
I think that one of the things that would improve life a great deal, for
people wanting to write applications in Caml, would be the existence of
many more libraries. Unfortunately, I think languages become popular
not mainly because of how expressive they are, but because of the
libraries available in them. Therefore, in order to help Caml become
more widely used, it would be a good idea to make things as easy as
possible for library authors. (That's actually why I came to this list;
I want to write libraries in Caml, to make it more generally useful for
writing applications.)
Moreover, a library user needs to handle the library's own polymorphism.
For example, suppose there were a Caml API for accessing databases,
and that this API consisted entirely of class types, intended to be
implemented by Caml 'drivers' for different databases. The library user
would get a #connection; the class implementing #connection would be
determined by the driver (and would never be known by the library user).
In this way, the user could switch to a different database by
switching to a different driver, without having to change any
application code. In order to pass around this #connection object
within the application, the library user would have to write polymorphic
methods.
> This also means that you have a number of workarounds hiding this
> heavy syntax to the end user, even when he has to define such a
> method.
>
> For instance you could be provided a virtual class printer:
>
> class virtual printer : object
> method virtual print : #printable -> unit
> method ...
> end
>
> Then you would use it as
>
> class my_printer () = object
> inherit printer
> method print obj = ...
> end
That's somewhat better, but it means that every class must be derived
from a virtual base, even when there's no other reason for it.
> P.S. Having a lighter syntax for polymorphic methods might be a good
> idea. But since we must keep it explicit enough, the improvement would
> be quite limited. The best I can think of is something like:
> method 'a. print (obj : #printable as 'a) = ...
> Maybe a bit better, but also more complicated to handle.
I think that would definitely be an improvement.
> An advantage of such a syntax is that it could also be used in normal
> "let rec" to provide polymorphic recursion.
That would be a big advantage in my view.
Ben
-------------------
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:[~2003-08-21 8:21 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-08-20 15:42 Benjamin Geer
2003-08-20 16:05 ` Brian Hurt
2003-08-20 16:19 ` Richard Jones
2003-08-20 16:25 ` Benjamin Geer
2003-08-20 17:09 ` brogoff
2003-08-20 17:25 ` Jacques Carette
2003-08-20 23:34 ` Jacques Garrigue
2003-08-21 13:27 ` Jacques Carette
2003-08-20 18:19 ` Benjamin Geer
2003-08-20 20:39 ` brogoff
2003-08-20 21:04 ` Benjamin Geer
2003-08-21 0:28 ` Jacques Garrigue
2003-08-21 8:17 ` Benjamin Geer [this message]
2003-08-21 8:58 ` Jacques Garrigue
2003-08-21 9:38 ` Benjamin Geer
2003-08-21 11:44 ` Remi Vanicat
2003-08-21 13:11 ` Richard Jones
2003-08-21 16:41 ` Remi Vanicat
2003-08-21 18:04 ` brogoff
2003-08-21 20:20 ` Benjamin Geer
2003-08-21 23:35 ` Benjamin Geer
2003-08-22 3:59 ` Jacques Garrigue
2003-08-22 7:12 ` Benjamin Geer
2003-08-21 13:38 ` Benjamin Geer
2003-08-21 0:58 ` brogoff
2003-08-20 23:40 ` Benjamin Geer
2003-08-21 1:29 ` Jacques Garrigue
2003-08-21 9:19 ` Benjamin Geer
2003-08-21 18:44 ` Chris Clearwater
2003-08-20 20:43 ` Issac Trotts
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=3F448015.8090106@socialtools.net \
--to=ben@socialtools.net \
--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