[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Efficiency of generic programming
On Fri, 7 Oct 2005, Michael Sperber wrote:
Andre van Tonder <andre@xxxxxxxxxxxxxxxxx> 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