caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
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


  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;
as well as URLs for NNTP newsgroup(s).