TCO might be more beautiful semantically, but unless you're using a language like Scala where you can say "this recursive function is intended for TCO, and thus throw an error if it's not eligible", a programmer error can blow out your stack.
> I’ve worked in probably 15+ languages of all types throughout my life since Microsoft BASIC in 1984 when I was 12. If this doesn’t give me the right to assert things like this, then what does?
A realisation that opinions are subjective :) I've probably used a similar number of languages, although I started with QBasic, and while I've really enjoyed FP in Scheme, Erlang, and F#, I don't consider it vastly superior, I just consider it a different paradigm that is really good in some problem domains, and an awkward fit in others.
I don't consider any particular paradigm to be superior, each has strengths and weaknesses.
> I’ve worked in probably 15+ languages of all types throughout my life since Microsoft BASIC in 1984 when I was 12. If this doesn’t give me the right to assert things like this, then what does?
A realisation that opinions are subjective :) I've probably used a similar number of languages, although I started with QBasic, and while I've really enjoyed FP in Scheme, Erlang, and F#, I don't consider it vastly superior, I just consider it a different paradigm that is really good in some problem domains, and an awkward fit in others.
I don't consider any particular paradigm to be superior, each has strengths and weaknesses.