On Wed, Jan 9, 2013 at 10:17 AM, Wujek Srujek <wujek.sru...@gmail.com>wrote:

> So take this definition from master:
>
> (def
>
>  ^{:arglists '([x])
>    :doc "Return true if x implements ISeq"
>    :added "1.0"
>    :static true}
>  seq? (fn ^:static seq? [x] (instance? clojure.lang.ISeq x)))
>
> static is used twice here. What is / was the difference? Is it correct to say 
> that it is now just noise in the code and could be stripped away? Is it 
> correct to say it has nothing to do with 'dynamic', contrary to what the last 
> SO post in the topic you linked to implies?
>
>
^:static really had/has nothing to do with ^:dynamic. It was an experiment
Rich was doing to improve performance by generating a static Class
method as opposed to an instance of IFn. So, ^:static here is referring to
the static keyword from Java.

The ^:static metadata had to be there during the definition of the function
itself for the compiler to know to emit a static method, so the first
":static true" in your example is unnecessary. If it wasn't there though,
during runtime (:static (meta #'seq)) would be nil which might be confusing.

Those hoops are only necessary because defn hasn't been defined yet at that
point of core.clj.

--Aaron

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