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