I'm confused.  In the latest scheme, what is the eventual plan for
handling a recur to a loop element that was initialized with a
primitive?  Are boxed numbers automatically coerced to the primitive?
Would a long be coerced to a double, or double to long?  Under what
scenarios will you get a warning, and when will you get an error?

I think what troubles me the most about this loop/recur issue is that
the semantics of recur depend completely on whether a variable is
assigned a primitive or boxed numeric type.  To know what the recur
will do, you must know the type of the assigned value.  This has
always been the case, but in the current version of Clojure, provided
you aren't using Java interop, it's relatively straightforward to
know.  Unless the variable or literal is explicitly cast to a
primitive, it's not a primitive.  But now, with the advent of static
functions which can return primitives, it becomes more likely to not
easily be able to determine this fact.  If I say (loop [x (foo 2)]...)
 I have no way of knowing what's going to happen when I recur.  Yes, I
realize that you can run the function and use warnings/errors to find
out.  But I find it unsettling to have a commonly used code form with
semantics I can't predict just by looking at it.

It's attractive that the current proposal gives speed benefits to
common cases with no additional annotation.  But I personally place a
higher value on being able to understand the semantics of my code when
reading through it.  I would prefer a version where loop requires some
sort of explicit annotation on a variable if you want it to require a
primitive upon recur.  (Ideally, I'd probably want the annotation on
the variable using a syntax that mirrors static functions, rather than
the old technique of typecasting the initializer, since the whole
typecasting system makes less sense now that literals and certain
return values are already primitives.  Unifying the syntax and
semantics of using primitives in loops with the syntax and semantics
of using primitives as inputs to static functions makes a lot of sense
to me.)

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