The point is, a *new* standard (as opposed to a revision of an
existing standard) affords opportunities to modernise, or even
revolutionise a language. Some could/would argue that there are some
historical legacies, inherited long ago, that are holding the language
back (that could apply to other languages too, not just Forth).
"Radical" changes, especially where it can break existing
functionality or code are resisted. That's okay. It's not an un-
reasonable desire to want to maintain compatibility where possible.
However, where a particular feature or quirk of a language is seen to
be a restriction (with the benefit of hindsight) I say go ahead and
change it! Don't be afraid! If it breaks functionality, well, that's a
shame, but, if the right decisions were made for the right reasons
then programmers will soon come to appreciate the "new way" once they
get comfortable with it. To me, the argument "No! We can't do that, it
will break all my code" is an invalid, and unreasonable argument. The
previous standard is still there. It hasn't gone away. The previous
standard compliant compilers are still there. If they decide to
upgrade software to be compatible with the new standard, great. If
not, no problem they can continue to use the previous standard. It's
not illegal!
Reading the ANS-94 standard, it seems that many concessions were made
to pre-exisiting compilers and/or vendors. One gets the feeling that
the standard was held back by politics. That's probably inevitable. It
probably isn't a very nice job sitting on a standards committee - it's
probably a rather thankless task. I believe the standard could be
improved just by removing references to 'ambiguous conditions' and
mandating that an error be produced. A valid argument in 1980 might
have been that it takes extra code (and cycles) to detect these
ambiguous conditions. It's not such a relevant argument any more
(that's just one example).
Another example: Improvements can also be made to the handling of
execution tokens. Specifically, a new standard could introduce the
concept of different *types* of execution tokens, to be used at
different times, and in different contexts. We've all seen and
participated in the discussions of obtaining XTs to compile only/
interpret only words etc. This is a good example of where current
Forth compiler technology has begun to out-grow the current standard.
A new standard could enshrine this new paradigm, and crucially,
*mandate* it. Don't make it optional. Remove the word "may". That just
gives implementors an easy way out. It is a political concession to
pre-existing systems. This should not be entertained. "May" just leads
to software that "may" work on a "compliant" system, or "may" not.
What's the point of that?
One area of focus (that would require the input of people far more
experienced than I) would be to look at the types of things that
cannot currently be implemented in a standard-compliant manner. To
revert to carnal knowledge in order to implement something in an
otherwise "compliant" system is to expose an area of the standard that
could be strengthened. Where these shortcomings are indentified, the
ratified solutions should be *mandated* in order to remove the
requirement for carnal knowledge, and improve the chances of user code
running correctly across a broad range of systems. One positive
example of this is the word CELL+ that was introduced in ANS94. It was
introduced as a core word too, which is very good.
I don't really have the "Forth stripes" to be saying all of this -
you'll appreciate that these comments are very much "shouted from the
touchlines", to use a footballing expression.
Mark