On Mon, May 21, 2012 at 11:12 AM, David Nolen <dnolen.li...@gmail.com>wrote:

> So "real world" complex systems avoid inheritance like the plague. So
> remind me again why it's desirable?
>
> David
>
>
>
I never said I want inheritance.  I want convenient reuse of partial
implementations.  Inheritance is one way to achieve it, but I'd like to
think that Clojure can find a better way.  I believe the current mechanisms
are insufficient.  Copy and paste is not good enough.  Mergeable maps are a
good idea, but the current way of doing things steers people away from that
solution and requires too much forethought to actively plan for reuse.  If
I implement a protocol inside of defrecord, all that implementation is
"locked inside" and no one can get at it or reuse it in other contexts.
This flies in the face of so many design principles of Clojure which
generally eschew unnecessary encapsulation and privacy to make it easy to
get at, reuse, and extend data and functions.

As I proposed in an earlier email, one brainstorm I have about this is:
(get-protocol-implementation <type> <protocol-or-interface>) gives you back
a mapping of the functions used by that type to implement that protocol.
Also, we need a way to use mappings of functions inside of
defrecord/deftype, not just extend, if that is technologically feasible.

I am genuinely interested in further brainstorms on the topic of how to
encourage reuse of protocol implementations *without* inheritance.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to