Ran into this little glitch this morning with a
program I was writing. I created a class that started with the
characters "3D", and was getting an error when i tried to
instantiate it because the corresponding environment symbol
resolved to a string value. I opened bug 1212 to address this.
One of the first things I encountered was the docs for
environment symbols, which requires that the first character
not be a digit (section 1.13.6 in the reference). So, in a
sense, this is working correctly, although with a high
astonishment factor. The ::class directive does not place any
restrictions, allowing you to create classes that you can't
look up via environment symbols. For example,
say .context~package~classes["INVALID NAME"]~new
say "Creating 3D Glasses"
::class "invalid name"
say "Creating a funny instance"
It seems like a reasonable thing to create a class name
like 3DGlasses, but the current definition of environment
symbols pretty much precludes this. I see a number of
1) Do nothing other than add some documentation to the
::CLASS directive explaining the implications of the name
2) Change the definition of environment symbol to a
restriction on the second character to "the remaining part of
the symbol cannot be a valid Rexx number'.
3) Implement restrictions on the ::CLASS directive such
that the name must be a valid environment symbol.
I'm not terribly fond of solution 3), I'm sort of in favor
of 2, but can live with 1.