Two days after having finally settled on a namespace separator, having read all of the big threads on reddit and slashdot, countless blogs, hate mail send to my private email, hate mail to internals, whining on IRC, I still feel good about the choice we made. Very very very few of the critics even understand the problems. Even less are able to formulate their concerns in a manner worth answering. So yup, none of the things people whine and moan about that could have been done instead make me reconsider.
At any rate I might digg down deep to find some motivation to write out a FAQ to help the masses of people that are getting so much FUD spewed their way that its no surprise that they are left confused. And yes I admit that it requires a lot of reading of RFC's on the wiki (heck less than a year ago simpler discussions required digging through the mailinglist archives for days, today it just requires 1 hour of reading and digesting).
Finally for those of you who have been waiting for that very last excuse to move on to another language, please do but keep it to yourself. Or actually do not keep it to yourself, write something happy about how you are enjoying your new home so much more than your old. I am sure you will feel better writing something positive. So put that frown upside down or chugg some happy pills :)
It's great that a decision was finally made (even though it doesn't please everyone (myself included), which none of the separators would have, so I respect the choice).
One question I have though; do you know what the status is of the issue with calling native methods from a namespaced class?
I heard that if you have a class in a namespace, and you want to call, say, strpos, you'd have to write \strpos instead. That seems overly complicated and unnatural. Has a decision on this been made yet?
No, the discussion on that is still ongoing. There are reasons for an against this. I am currently in the camp that says that the \ should not be required.
I think with the resolution order first looking inside the namespace, but falling back to the global scope if nothing is found (while throwing an E_NOTICE) is the best. This way existing code can easily be migrated and articles that want to teach beginners do not have to differentiate between if the code is placed inside a namespace or not.
It should however be noted that this leads to performance overhead when used in combination with __autoload(). It also makes code a bit ambiguous again, as "new Exception" will either use the Exception class from the current namespace or if none is defined, load the global Exception class.
To me the issue with performance overhead is solved by providing an tool (aka E_NOTICE analog to undefined constants) to finding places where __autoload() is being called for a global identifier. As for the "ambiguity" its just "overloading" for me and so I consider it a feature.
That being said, as you might have read out of my reply, due to the resolution order when using __autoload() you do want to put that \ in front of global classes you want to use to get ultimate performance even if it is made optional.
This change would have never had (really, not branchwise) happened without you and one or two others ;). Finally the php project hast a bad cop, forcing stuff to get finished ....
and this is a good thing.
If there was a confliction between a name space and a class, why couldn't you:
1) Default to the namespace
2) Throw an error that there is a confliction
Why did you have to make PHP more complicated than it already is? Please come up with another solution. Please... :(
And if you don't include a \ or :: (what ever it ends up being) in-front of a internal PHP function, please don't throw an E_NOTICE. Lets keep it the way it is in that regard. If it's a custom function and it doesn't exist, just throw the undefined error, just like the function wasn't defined.
I don't read planet-php anymore, but I still couldn't avoid hearing about this kerfuffle.
I immediately thought that a FAQ would have been a good way to deflect some of the FUD and the endless repetitive criticisms and explanations. For instance, it would have been good to have a list of all the other proposed separator characters, with explanations and examples that show why they were finally rejected.
I don't know why you guys didn't do that as you announced the decision. You could have even written the decisions down incrementally during the three years you've been discussing namespaces.
And yes, I did read the RFC page and the pages it links to, except for the unformatted log of IRC discussion (tip: a raw IRC log is worthless as project documentation).
Anyway, congratulations to the people who have worked on this for so long and best of luck.
Yeah well, I think none of us expected this to stir waves of this size. I mean namespaces have always been a heated topic, but obviously this reaction was even bigger than when we pulled them out of PHP 5.0.0 alpha's. I hope that we can publish a fairly complete FAQ tonight.
As for the IRC log, in the IRC log you can see that we discussed editing the log, but decided to go for authenticity. As for why we did not document the process over the last 3 years, I guess we are just slowly going into the direction where we acknowledge that "read the archives" is not a legitimate way to answer a question. But its just an insane amount of work to keep stuff up to date and we do not have anyone that is paid for this. Given our past, I think the namespace stuff is one of the best documented complex decision we ever had to make. Obviously there is still room for improvement though.
It was an important decision to make, thanks for that.
I think lot of quiet developpers feel the same way i do.
"I think none of us expected this to stir waves of this size"
And there you have the problem. The entire process is based on trust. The trust the PHP community needs to have in the decisions of a small group of people. If these people are so out of touch that they are unable to foresee the impact of their decisions, that trust is severely undermined.
The backslash did not cause this shitstorm. The utterly unprofessional way in which such an important decision was made and communicated did.
Like the vast majority of PHP developers, I don't know enough about the internals of PHP to know if this was the best choice, so I'm not even gonna try to argue about it. My acceptance of this decision is solely based on trust, and my problem is: how can I trust people who act so carelessly?
My trust in the future of PHP has been severely undermined, and I am clearly not the only one who feels that way.