The reason behind not defining predeclared identifiers as reserved words is not so that you can redefine them. The reason is to protect you from future language changes:Robert wrote:Isn't the genie the fact that predeclared identifiers can be redefined at all?
When new predeclared identifiers are introduced (either because of evolution of the language or when porting to the same language in a different environment) you don't have to worry about your code breaking if the names you chose for your identifiers now clash with the new predeclared ones. Yours will take precedence. You would only have to rename yours if and when you wanted to use the new features.
As Josef surmised - that may be the reason why Oberon microsystems weren't as dogmatic as they could have been when they implemented the new attributes.
Admittedly, however, this is not as much of a benefit for users of BlackBox Component Pascal as it might be for users of other languages because (as far as I know):
- There are only two active implementations of Component Pascal
- No new predeclared identifiers have been added to the language in the last 10 years.
and, anyway: - You can avoid such potential future name clashes by avoiding the use of uppercase names for your identifiers.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/index
They have a few more reserved words to worry about!