Fluid Dynamics <a2093...@trbvm.com> writes: >> I don't know who is the outlier. The point is that Scala, for instance, >> has explicit support to hide the distinction between accessing a value >> and computing a value. The point is to support the uniform access >> principle. >> >> http://en.wikipedia.org/wiki/Uniform_access_principle >> >> To my knowledge, Clojure cannot do this. >> > > It seems to me that some support could be created for this. Specifically, > we'd want to make it that a) (deref foo) on a non-IDeref just evaluates to > foo in a no-op, and furthermore that if foo is known at compile time not to > be an IDeref the (deref foo) compiles away to just foo, so has no runtime > cost; and b) (deref (delay (some-fcall))) amounts to (force (delay > (some-fcall))) and where the compiler knows the thing being derefed is a > delay (via type hint or whatever) is as efficient as just (some-fcall) at > run-time the first time called, and as efficient as ((constantly foo)) for > some value of foo thereafter. > > In that case, one could hide the computed-or-not nature of some data behind > expecting users to use @my-thing to access it, and if my-thing is not an > IDeref it is the same as my-thing, but it can be changed later to a delay > to make it a lazily-computed thing without breaking the API, and without > much runtime efficiency cost, given that the new object is hinted with > ^IDeref or something.
It's definately supportable. Symbol macros could also achieve the same thing; Clojure has these, but not globally. Phil -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.