2010/11/17 Stuart Halloway <stuart.hallo...@gmail.com>

> In 1.2, functions were always looked up through their vars. While this is a
> low-cost operation, it does not allow maximum performance.
>
> In 1.3, function calls are "compiled through" their vars. If function a
> calls function c inside its body, there is no runtime lookup of the var c.
> However, each function makes a (very low cost) check on entry to see if
> anything has been recompiled. If so, the function is recompiled.


Wait, what ??


> This enables the dynamic repl interaction that you would expect from a
> lisp, with great performance.
>
> When, as in your example, a var b refers to var a, there is no function
> call, hence no hook point at which to make the check. If you want b to point
> to the new a, redef b.
>
> Stu
>
> > Notice that when I redefined a, I only included one arity.  If b were
> > updated with the fn that a was redefined to, then (b 1 2) should have
> > thrown an exception.  Instead, it used the old definition of a but
> > within that definition pointed to the new definition of a.  This is
> > internally inconsistent.
> >
> > I'm not proposing making all function definitions lexically bound.
> > Yes, that would destroy interactive coding.
> >
> > But to be internally consistent, self-references should be lexical.
> >
> > In any case, I am using Github master and I thought I was using 1.2.
> > 1.2 has self-references lexically bound, as David Sletten points out,
> > which I agree is the correct behavior.  But something has happened on
> > 1.3 alpha that has changed that.  I don't know if it's intentional or
> > not.
> >
> > Thanks,
> > Alyssa Kwan
> >
> > On Nov 16, 6:01 pm, David Nolen <dnolen.li...@gmail.com> wrote:
> >> But that would destroy one of the most useful features Lisp has to
> offer,
> >> interactive coding.
> >>
> >> Live coding would be impossible w/o this behavior as you would need to
> find
> >> and update all callers. Yuk.
> >>
> >> David
> >>
> >> On Tue, Nov 16, 2010 at 5:26 PM, Alyssa Kwan <alyssa.c.k...@gmail.com
> >wrote:
> >>
> >>
> >>
> >>> I ran into this while working on making functions durable.  Here's a
> >>> contrived example:
> >>
> >>> => (defn a
> >>>     ([x] x)
> >>>     ([x y] (+ (a x) (a y))))
> >>> #'user/a
> >>
> >>> => (a 1 2)
> >>> 3
> >>
> >>> => (def b a)
> >>> #'user/b
> >>
> >>> => (b 1 2)
> >>> 3
> >>
> >>> => (defn a [x]
> >>>     (- x))
> >>> #'user/a
> >>
> >>> => (b 1 2)
> >>> -3
> >>
> >>> Is this what people expect?  I would think that the original
> >>> definition of a, which is self-referencing, should point to itself no
> >>> matter what it's named, not get resolved at invoke-time to see what
> >>> the var is currently resolving to.
> >>
> >>> Thanks,
> >>> Alyssa Kwan
> >>
> >>> --
> >>> 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<clojure%2bunsubscr...@googlegroups.com>
> <clojure%2bunsubscr...@googlegroups.com<clojure%252bunsubscr...@googlegroups.com>>
> >>> For more options, visit this group at
> >>> http://groups.google.com/group/clojure?hl=en
> >
> > --
> > 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<clojure%2bunsubscr...@googlegroups.com>
> > For more options, visit this group at
> > http://groups.google.com/group/clojure?hl=en
>
> --
> 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<clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

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