But ... that's how Forth DOES THINGS.
That was exactly my point - adding *unnecessary* language extensions is bad style of programming because it leads to unreadable, unsustainable in the long run code.
Sort of like C++ operator overloading, or (more generally) objects with inconsistent method names and/or inheritance leading to inappropriate behavior and excessive memory use? Or, for that matter, macro use in assembly language. Seems to me that it's all a matter of programming style - if you do things that are widely, or even locally, standardized and common, it should all be OK. Redefine stuff or head off in weird directions, and you get an unreadable mess. (for example, I've looked at some of the C++ STL code, and find it ... so far removed from "basic C++" as to be essentially unreadable. (there's enough consistency there that I'm sure all that would clear up, given an appropriate style guide, mentor, and/or a couple of years of experience. Exactly!))
Forth was developed during the First Age of Enlightenment
Alas, I'd say that was developed somewhat before the first age of enlightenment, and suffers significantly from the whole "identifiers should be short to save storage space and typing" (like APL!) And thus it was standardized. Forth would be improved, IMO, if there were a standard set of "long" names for all the standard words (you know, like "print" instead of "." and "store" instead of "!")
(Heh. You'd get something that looked like Postscript, I guess. I rather liked Postscript...)
That is far from "defensive".
"The best defense is a good offense."
And we're talking about the "Aggressive Arduino Folk" too, remember.
Redefining shift operator is common (cstdio) practice ... Every C++ programmer will immediately know what "shift operator to do IO" means.
Well, too many "C++ programmers" won't know that it was a shift operator. They come into the embedded arena asking questions like "I don't see how
UARTSTATUS & 1<<RXRDY checks the status bit when
<< is an output operation." (which really isn't that far from the confusion I experienced the first time I (a longtime embedded C programmer) saw
stdio << "my number is" << mynumber. "Oh we'll just take a well-known binary operator and have the result of the operation be the same as the first operand, and do nothing but side-effects with the second operand." Yeah, that makes perfect sense.)
Language extensions means - you are *extending* programming language, adding new keywords & operators.
Technically speaking, I don't think that Forth HAS "operators" or "keywords." Everything is a function. Some functions are standardized...