Re: idempotency
That's really a stricter requirement than idempotence (ie, functional purity). I don't believe the compiler ever does this. The JVM might, if it's able to inline some particular method call and discover therein that no mutation happens, but that's probably pretty rare given the amount of indirection that goes on when calling everything through the IFn interface. On Saturday, June 30, 2012 5:30:02 PM UTC-7, Brian Marick wrote: > > In its optimization, does the Clojure compiler ever assume idempotency? > That is, does it ever look at a function application `(f x y z)` and say to > itself "I may freely substitute the result of the first application of `f` > to those particular arguments for any later call"? > > I could imagine it doing that for built-ins (or just primitives?), but not > for user-defined functions (given the existence of atoms, etc.) I can also > imagine it not bothering for any calls. > > - > Brian Marick, Artisanal Labrador > Contract programming in Ruby and Clojure > Occasional consulting on Agile > > > -- 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
Re: idempotency
You should then use memoize explicitly then. Of course, avoid this if you have side effects in the function. Luc > In its optimization, does the Clojure compiler ever assume idempotency? That > is, does it ever look at a function application `(f x y z)` and say to itself > "I may freely substitute the result of the first application of `f` to those > particular arguments for any later call"? > > I could imagine it doing that for built-ins (or just primitives?), but not > for user-defined functions (given the existence of atoms, etc.) I can also > imagine it not bothering for any calls. > > - > Brian Marick, Artisanal Labrador > Contract programming in Ruby and Clojure > Occasional consulting on Agile > > > -- > 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 > -- Softaddicts sent by ibisMail from my ipad! -- 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
idempotency
In its optimization, does the Clojure compiler ever assume idempotency? That is, does it ever look at a function application `(f x y z)` and say to itself "I may freely substitute the result of the first application of `f` to those particular arguments for any later call"? I could imagine it doing that for built-ins (or just primitives?), but not for user-defined functions (given the existence of atoms, etc.) I can also imagine it not bothering for any calls. - Brian Marick, Artisanal Labrador Contract programming in Ruby and Clojure Occasional consulting on Agile -- 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