From a user perspective, <! and >! are not functions, since they can't be used as functions inside a go block; e.g. (go (apply <! ...)) is not a valid form. This is a problem, since it 1) causes confusion among users, and 2) causes bugs in other macros, e.g. CLJ-2291.
Proposed solution: make <! and >! macros.
Backwards compatibility: the change shoudn't introduce any breaking changes, since <! cannot be used as a function anyway. The change will introduce a mismatch between <!! and <!, one being a function and the other not, but that mismatch is in line with the differences in the semantics between the two.
Potentially, it would also move ">! used not in (go ...) block"-type errors to compile-time, cleanly solving some issues reported earlier, e.g.: ASYNC-168