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.

Reply via email to