(This is sort of a follow-up to this thread from last July:
http://groups.google.com/group/clojure/browse_thread/thread/7f5cf3e78954b81d/aae7f082c51337c9?lnk=gst&q=proxy#aae7f082c51337c9.)
Recently, I've been building a version of java.io.Writer that knows
what the
current column is on the output so it can handle tabs, etc.
It would be pretty easy to do this with AOT, :genclass, etc. and just
have a ref
to the column number in my state, but life seems easier if you don't
have to use
AOT, so I considered doing it with a proxy.
However, proxies *only* support the methods provided by their super-
classes. They
do this so that the proxy class can be compiled once, making proxy
intances and
variation super-cheap.
I dug through the code in core_proxy.clj while trying to learn about
this and it
occurred to me that proxies could add state (similar to that created
in
:gen-class) with the following changes:
1) Add a __clojureProxyState field that points to a ref to a map, but
is initialized to
nil.
2) Add a getClojureProxyState() method to IProxy that returns the ref
in question, lazily
instantiating (ref {}) if necessary.
Of course, the ref to a map thing is optional. The state could be left
open as
in :gen-class.
This seems like it would add this capability without much problem. It
has a few
issues I can see:
* We're a functional language so more places to add state are against
the base
philosophy.
* The lazy instantiation could race (but that might be fixable).
* The new names increase the chance of name collison.
I'm interested to hear what folks think. If this was a capability that
Rich and
others agreed was a good addition, I'd be happy to build it and crank
out a
patch for it.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---