On Jun 25, 2009, at 12:25, Rich Claxton wrote:
> Hello I have just started learning Clojure and functional programming,
> quick question, what happens internally when I do a defn, does this
> create the byte code, or a ref to the function which is stored, as it
> does actually create a function object, I was just wondering about
> memory and GC issues.
First of all,
(defn f [a b c] ...)
is just a shorthand for
(def f (fn f [a b c] ...))
The "def" part just assigns an object to a variable. The (fn ...)
part is the more interesting one. It creates bytecode for a Java
class that has a method "invoke" used for calling the function. It
also creates an instance of that class, which is the return value
that is assigned to f.
The distinction becomes of interest if you create a function inside a
function: the function's code is compiled only once, so there is only
one class, but there may well be several instances of this class. In
the case of a closure (a function that captures values from its
lexical environment), each instance stores its specific captured
values, but the code exists only once.
Konrad.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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
-~----------~----~----~----~------~----~------~--~---