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 possibilities here;
1) Do nothing other than add some documentation to the ::CLASS directive explaining the implications of the name choice.
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.