Topic: name space proposal ("with" statement)
Author: garry@ithaca.uucp (Garry Wiegand)
Date: 13 May 91 22:06:35 GMT Raw View
In a recent article keithro@microsoft.UUCP (Keith ROWE) wrote:
>main()
>{
> use Microsoft;
[a number of statements]
> tallyWindow(myWindow);
>}
A few comments. The "use Microsoft" statement in the above is sort
of weird - it looks like it might be a declaration statement, but
"use" is an active verb and for me makes the statement look more
like an executable. Also, the style is perhaps surprise-inducing -
"use Microsoft" is an innocuous-looking statement buried among
others but it has unusually subtle and drastic effects. It makes me
think of #include's and goto's.
I don't know if this has been discussed, but how about the
traditional (in Algol/Pascal/PL1/etc worlds) 'with' construct
instead? The C/C++ version would be something like:
with (blah) {
}
meaning "please try to disambiguate the names in this block in favor
of the 'blah' context".
The classical example of this style is structure references - the
following simple code:
struct {float x,y;} *vector;
...
cout << "Length is" <<
sqrt(vector->x*vector->x + vector->y*vector->y);
would also be expressable as:
struct {float x,y;} *vector;
...
with (*vector) {
cout << "Length is" << sqrt (x*x + y*y);
}
(or of course:)
with (*vector) cout << "Length is" << sqrt (x*x + y*y);
The block would follow the usual scoping conventions. The wonderful
C++ disambiguation rules would have to be worked out. The syntax for
Keith's case would be "with (Microsoft) { }".
There is an example of the concept already in the language: method
bodies behave exactly as if they were surrounded by a "with (*this) { }".
It would be nice to have it available for things other than "*this".
(I admit that if you can write your class definitions real cleanly
you might scarcely *need* it for cases other than "*this".)
So: I agree that C++ names are getting complicated, and I claim that
a new general construct that could help you organize the name
references would be a good thing to have. In particular, a 'with'
would get you more value for your syntactic money than a 'use'
because it would also be meaningful for structure references and for
all types of '::' references. It would offer a reasonable hint to
the compiler that when the appropriate the operand might be worth
optimizing into a register. The 'Name::' dereferencing Keith needed
would come almost for free as part of a more general concept.
Garry Wiegand --- Ithaca Software, Alameda, California
...!uunet!ithaca!garry, garry%ithaca.uucp@uunet.uu.net