>>35 does not understand tail recursion.
A compiler does not have to be smart to convert tail recursion to iteration; it merely has to avoid being dumb. It's trivially optimizable. That's why Scheme can include it as part of its spec; the programmer can expect it to be implemented so that he knows he doesn't have to use ugly loop contructs.
You might as well say programmers should assign memory addresses for all their variables because you can't rely on on the compiler for every little thing.