Email list hosting service & mailing list manager

Efficiency of generic programming Andre van Tonder (06 Oct 2005 19:02 UTC)
Re: Efficiency of generic programming Michael Sperber (07 Oct 2005 06:19 UTC)
Re: Efficiency of generic programming Andre van Tonder (07 Oct 2005 14:27 UTC)
Re: Efficiency of generic programming Michael Sperber (10 Oct 2005 19:37 UTC)
Re: Efficiency of generic programming Andre van Tonder (10 Oct 2005 20:03 UTC)

Re: Efficiency of generic programming Andre van Tonder 07 Oct 2005 14:27 UTC

On Fri, 7 Oct 2005, Michael Sperber wrote:

> Andre van Tonder <xxxxxx@now.het.brown.edu> writes:
>
>> I have a concern with the efficiency of the current interface for reflection.
>> Some simple, and rather important or canonical, generic operations will be
>> rather less efficient than they could be.
>
> Specifically, it is really meant for structurally reflective
> operations, such as interpreters and introspection, rather than the
> efficient implementation of anything.

I would not suggest major changes.  I think just having an o(1) way of
obtaining the record length would be sufficient to address the things I have in
mind, and would be very cheap to add to the spec.

Note that in the absence of an o(1) record-length, interpreters and
introspection will also be slower, which may matter to some people.

>> - Polymorphic copying and update will be slow:
>
> In particular, polymorphic copying and update really fall outside its
> purview---they wouldn't work on opaque record types, anyway.  Maybe
> you can elaborate why and where you want these?

- Algorithms for generic unification over arbitrary records, generic tree/
   graph algorithms where the nodes may be arbitrary record values,
   implementing ML-like functors, etc...

- Polymorphic copying might matter to people interested in object systems
   Examples: OCaml OO.copy
             Java object.clone

- From a functional point of view, functional record update is
   arguably more fundamental than in-place mutation, which is included in the
   SRFI.
   I believe that e.g. OCaml has polymorphic functional update.

- Functional update encourages functional style programming.

- Since I am not really an expert, I would refer to Wand, Ohori, Pierce, etc.,
   for further examples of the usefulness of polymorphic record operations.
   For example, I seem to remember they may be useful for e.g. modeling multiple
   inheritance, and I think Pierce notes their usefulness for expressing
   covariant operations on objects, etc.

Again, I am not suggesting adding functional update.  Only that having an o(1)
record-length will be useful in rolling one's own without sacrificing too much
efficiency.

Cheers
Andre