On Mar 16, 2009, at 8:25 PM, Laurent PETIT wrote:

Hi Laurent,

Your solution is indeed close to what I had in mind in terms of requirements. I was currently hacking with clojure java class Compiler to enhance Timothy's patch and add a variation on what you described.

Cool. I look forward to seeing what you come up with.

* does the Compiler.load() process happen all in the same thread ? (And if yes, is that a guaranteed feature, or could that change in the future ?)

Compiler.load() appears to execute in a single thread currently. I'm not aware of any guarantee about that. As a general rule, anything that's not documented by Rich is eligible to be changed in the future. In thinking about how that might work, it seems to me that making a single load multithreaded would be more complex than it would be worth, but no guarantees.

* How do you correctly deref, ref-set! from java code by directly using a Var instance ?

ref-set is an operation on refs. deref can be applied to refs.

        myRef.set(anObject);

        myRef.deref();

Or, using the fine clojure.contrib.repl-utils:

        user=> (source ref-set)
        (defn ref-set
          "Must be called in a transaction. Sets the value of ref.
          Returns val."
          [#^clojure.lang.Ref ref val]
            (. ref (set val)))
        nil
        user=> (source deref)
        (defn deref
"Also reader macro: @ref/@agent/@var/@atom/@delay/@future. Within a transaction,
          returns the in-transaction-value of ref, else returns the
          most-recently-committed value of ref. When applied to a var, agent
          or atom, returns its current state. When applied to a delay, forces
          it if not already forced. When applied to a future, will block if
          computation not complete"
          [#^clojure.lang.IDeref ref] (.deref ref))
        nil
        user=> (show clojure.lang.Ref)
        ===  public clojure.lang.Ref  ===
        [ 0] <init> (Object)
        ...
        [10] deref : Object ()
        ...
        [46] set : Object (Object)
        ...
        [53] wait : void (long,int)
        nil
        user=> (show clojure.lang.Ref 46)
#<Method public java.lang.Object clojure.lang.Ref.set(java.lang.Object)>
        user=> (show clojure.lang.Ref 10)
        #<Method public java.lang.Object clojure.lang.Ref.deref()>
        user=>

--Steve

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to