On Apr 25, 3:13 pm, nickf3 <nic...@[EMAIL PROTECTED]
> wrote:
> On Apr 25, 12:47 pm, "Moschops" <mosch...@[EMAIL PROTECTED]
> wrote:
>
> > >> I note with some dismay the proposal to create a new meaning for
the C
> > >> and C++ keyword 'auto', as described in the do***ent N1984 (part of
the
> > >> proposals for C++0X or whatever it's called now). Efforts are being
taken to
> > >> ensure it doesn't conflict with the previous meaning of the
keyword, but why
> > >> not simply have a whole new keyword? These guys aren't stupid, so I
> > >> assume there must be a good reason.
>
> > > Yeah, nobody used auto (it was a storage class specifier that
specified
> > > automatic storage, and since local variables are automatic by
default,
> > > and you can't use it elsewhere, what's the point?), and so it was
> > > reused, to avoid adding new keywords. If you add new keywords, you
risk
> > > breaking existing code.
>
> > Perhaps next language we should have a symbol that identifies
keywords, to
> > save us having to overload already existing keywords. Some kind of
prefix
> > that's illegal to use unless it is prefixing a recognised keyword.
>
> > 'Chops
>
> Which is again would be a keyword? I would hate to implement such
> grammar :)
He said a prefix. C99, and also compiler writers already do this by
prefixing extensions with _ or __. Like _Complex. While the compiler
will not stop you from using _ or __ prefixes in your code, they are
reserved for implementation by convention (it's in the standard
somewhere I think).
Thus, there is a way to add new keywords to C and C++ without breaking
anything... but they are ugly keywords because they all start with _.
Thus, the standards committee has chosen to risk breaking code by
adding new keywords without underscores a number of times.
I think a better idea than designing a language with a prefix for
keywords, is designing a language with a prefix for variables. Many
languages use sigils such as $, @[EMAIL PROTECTED]
@[EMAIL PROTECTED]
to prefix variables and
disambiguate scope. Additonally, ruby uses upper an upper case first
letter to identify constants and types. If you made this universal,
you could have a grammar with a syntax that could be arbitrarily
extended without risking breaking old code. You could also use
keywords for variable names, because the lexer would be able to tell
the difference with a simple regular expression. You could have the
keyword auto and the variable $auto.
Unfortunately, neither C++ nor any other language I know of has taken
that path, and thus extending the syntax becomes painful.
Brendan Miller
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|