On Oct 25, 2010, at 3:44 PM, Stuart Halloway wrote:
>   * code path for using vars is now *much* faster for the common case,
>     and you must explicitly ask for :dynamic bindability

This has been bouncing around in my head for the last week or so, occasionally 
colliding with the memory of Rich Hickey showing dynamic rebinding of vars 
during a run (in a video, maybe on the ant simulation?) and saying something 
like "It's a dynamic language!" (apparently with approval). 

I understand how this can be a big win on performance and I guess it's a minor 
sacrifice since one will still be able ask for dynamic bindability with only a 
little more clutter.

But it leads me to ask whether it would be possible to simultaneously provide a 
way to load libraries (e.g. in require or :require clauses of ns) while 
specifying that certain vars in the library are to be defined as dynamically 
bindable, even if they're not coded as such within the library.

The reason I ask is that I often create a library and then want to use it in a 
context in which I want one of the library's internal subfunctions to be 
defined differently.  So I load the library and then redefine the subfunction's 
var (sandwiched between calls to ns, so I'm redefining the var in the right 
namespace).  [Perhaps this is not a recommended way to do things? In any event 
I find it useful... Is there a better way that's not a lot more work?]

Anyway, I don't know ahead of time, when I write the library, which particular 
vars I might want to redefine for any particular application/experiment. But 
I'd rather not change the library's code between experiments; I'd like that to 
be frozen and constant (and I use the exact same file for many experiments). So 
if I wanted to make this work in all possible use cases I'd have to designate 
*all* of my vars as dynamically, but then: A) I'd have to clutter all of my 
vars with :dynamic specifications and, 2) I'd lose the optimizations that this 
new feature of 1.3 alpha 2 are providing (which sound worthwhile, being "*much* 
faster"). It would be nicer if I could define everything in the library in the 
normal way, and have everything loaded as not-dynamically-bindable in the usual 
case, but if I could say in a particular application file that loads the 
library something like:

(ns foo
  (:require [bar :dynamic baz bingo]))

Or something to that effect -- I don't know if this exact syntax is consistent 
with the various options in an ns/require form.

The idea is that this would load bar but with the definitions of baz and bingo 
marked as dynamically bindable, even though the code in bar.clj doesn't ask for 
dynamic bindability.

Possible? Desirable?

Thanks!

 -Lee

-- 
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