Brendan wrote:
> [...]
> Adding a new keyword to the langauge means that you are almost
> guaranteed to break someone's code. Take a look at this discussion
> about var in C#:
> http://www.strangelights.com/blog/archive/2005/10/10/1264.aspx
The de-facto standard naming convention of C# forbids to start a class
name with a lower case char. Since all keywords start with a lower case
char, it's rather unlikely that code is broken if a new context
sensitive keyword is introduced in C#. Of course nobody is forced to use
this naming convention (besides that some QC tools warn if this
convention isn't used), but then the developer has to take the risk of
collisions in future C# versions.
> [...]
> The way compilers work, true keywords are detected at lexical analysis
Typically C++ compilers. But there are other compilers, like C# and some
C++ compilers too, which IMHO simply can't detect all keywords at
lexical analysis stage, because they sup****t (proprietary) context
sensitive keywords.
> [...]
>
> A lot of the way languages change has to do with the inflexibility of
> lexers and parsers to tell that this syntax means this in a certain
> context, but not in another context.
Well, there are good reasons that keywords must be able to be detected
by the lexer, so that simple tools e.g. colorizing the keywords can be
implemented quite easy and to significantly reduce the complexity of the
parser / semantic stage.
But anyways IMHO it's not always the best solution, regarding code
efficiency and complexity, to prefer new library code over new keywords.
Regarding downwards compatibility and for compiler implementors it's
surely the better solution.
Andre
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|