Namespaces: Technical proposal

php.internals

Oliver Grätz

20 years ago
Hi folks! I had some PM discussions about the (presumably premature) death of ":" as the namespace symbol. Most people liked this, some liked "::" (which will definetely NOT work) and then the opinion was very split with a lot of people saying "OK, if it has to be" to ":::". Some folks even resigned and went for the widely hated "\". I'll recompile a table later this night with corrected opinions (don't worry, I have redflagged all vote posts in my Thunderbird). But now there might be a possibility to go with ":". Jessie will test this out and I suppose he'll come out with results (hopefully positive). Here's the idea: When the tokenizer encounters the opening "?" of the ternary, it DEACTIVATES the namespace operator until the end of the ternary. This way, all old code will behave as before, nothing will be broken. Of course, this absolutely requires the use of parentheses if one absolutely needs to use namespaces inside the ternary. As such cases will be pretty rare, this is no big drawback. The good thing: no whitespace magic is needed! Comments? OLLi

David Zülke

20 years ago
Cool. If that won't work, I'd rather have ::: over \, please ;) - David Am 28.11.2005 um 22:52 schrieb Oliver Grätz:

Lukas Smith

20 years ago
Oliver Grätz wrote:
> one absolutely needs to use namespaces inside the ternary. As such cases > will be pretty rare, this is no big drawback. The good thing: no > whitespace magic is needed!
so you replace the need for whitespace magic with the need for parentheses? you do notice you are running in circles? regards, Lukas

Oliver Grätz

20 years ago
Lukas Smith schrieb:
> Oliver Grätz wrote: > > >>one absolutely needs to use namespaces inside the ternary. As such cases >>will be pretty rare, this is no big drawback. The good thing: no >>whitespace magic is needed! > > > so you replace the need for whitespace magic with the need for > parentheses? you do notice you are running in circles?
Nope. Parentheses are a totally different thing here. Adding mandatory whitespace means giving syntactic meaning to something that normally never should have it. Meaningful whitespace is really evil. On the other side parentheses are already there. They are an existing concept of scoping evaluation. The idea simply consists of not having namespaces inside the ternary: - Read the "?": turn off T_WHITESPACE - "(" and ")": reactivate between these (a marker 'whitespace was off before "("' is needed) - ":": do nothing - end of ternary (")" or ";" or something I might have forgotten): reactivate T_WHITESPACE Thisd is also very easy to remember since the rule to learn is: Namespaces don't exist where they can't. And with the ":", there is only one such place. OLLi

Bart de Boer

20 years ago
Just wondering. There's another thread about goto and labels running as well. If they vote for something like: LABEL:while (cond) { } Wouldn't this add another technical diffuculty with using ':' as a namespace seporator? Oliver Grätz wrote:

Sara Golemon

20 years ago
> Just wondering. There's another thread about goto and labels running as > well. If they vote for something like: > > LABEL:while (cond) { > > } > > Wouldn't this add another technical diffuculty with using ':' as a > namespace seporator? >
Fortunately this is another new feature so there's no old code to break. It's simply a matter of giving namespace:class precedence over label:expr. Though yes, preventing that duality of meaning is a good thing. -Sara

Hartmut Holzgraefe

20 years ago
Oliver Grätz wrote:
> Nope. Parentheses are a totally different thing here. Adding mandatory > whitespace means giving syntactic meaning to something that normally > never should have it. Meaningful whitespace is really evil. On the other > side parentheses are already there. They are an existing concept of > scoping evaluation. The idea simply consists of not having namespaces > inside the ternary:
while i agree that the () approach is less bad than the whitespace one it is still "bad enough" from an language orthogonally point of view ...
-- Hartmut Holzgraefe, Senior Support Engineer . MySQL AB, www.mysql.com

Hartmut Holzgraefe

20 years ago
Oliver Grätz wrote:
> Here's the idea: When the tokenizer encounters the opening "?" of the > ternary, it DEACTIVATES the namespace operator until the end of the > ternary. This way, all old code will behave as before, nothing will be > broken. Of course, this absolutely requires the use of parentheses if > one absolutely needs to use namespaces inside the ternary. As such cases > will be pretty rare, this is no big drawback. The good thing: no > whitespace magic is needed!
this adds almost the same WTF? factor as requring whitespace, and being a pretty rare case only adds to this ... (not to mention that maintaining a parser with special state rules like this becomes a WTF? PITA anyway ...)
-- Hartmut Holzgraefe, Senior Support Engineer . MySQL AB, www.mysql.com