[PHP-DEV] Re: [Zend Engine 2] Re: [PHP-DEV] Constants

2001-12-03 Thread Andrei Zmievski

On Mon, 03 Dec 2001, Andi Gutmans wrote:
 Personally I wouldn't write code which gives FOO_BAR and Foo_BAR two 
 different meanings but I think you are right that it'd be better and I have 
 an idea on how to do it which I'll lay out.
 We are only talking about global constants defined with define() as class 
 constants are always case sensitive and they can distinguish what you 
 mentioned above.

That's fine for me. I want them for the keysym constants in PHP-GTK
(like GDK_KEY_A and GDK_KEY_a). For now I hack around by using
(GDK_KEY__A) for lowercase ones. Which sucks.

 There's one way I can think of in order to fix define(). It has advantages 
 and disadvantages. The advantage is that all constant lookups will be much 
 faster than they are today (no strtolower() and no memcmp()). The 
 disadvantage is that defining constants will be much slower.
 What we would do is that instead of adding the name of the constant after 
 an strtolower() into the constants hash we would do the following:
 - for case-sensitive constants: Add it with the exact same case as the 
 definition.
 - for case-insensitive constants: Add all possible cases for the constant. 
 That means that for a word of length L we'd add at most L*2 keys to the 
 hash.
 
 This solution actually would work very well. It'd would fix the above 
 problem and hash lookups would be faster. It would also be a step away from 
 case-insensitive constants. It would of course make case-insensitive 
 constant definitions much slower but as no C-extensions use them 
 (especially after I nuke it) and only about 5 constants in Zend use them it 
 should be fine (this is assuming that not many people use the third 
 argument of define() which allows them to define case-insensitive 
 constants).

What about the idea of introducing case-insensitive hashes? Modifying
hash function so that it hashes 'A' and 'a' into the same value.

-Andrei

The human brain is a wonderful thing. It starts working the moment you
are born, and never stops until you stand up to speak in public.  -- Sir
George Jessel

-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




[PHP-DEV] Re: [Zend Engine 2] Re: [PHP-DEV] Constants

2001-12-03 Thread Andi Gutmans

At 02:42 PM 12/3/2001 -0600, Andrei Zmievski wrote:
On Mon, 03 Dec 2001, Andi Gutmans wrote:
  Personally I wouldn't write code which gives FOO_BAR and Foo_BAR two
  different meanings but I think you are right that it'd be better and I 
 have
  an idea on how to do it which I'll lay out.
  We are only talking about global constants defined with define() as class
  constants are always case sensitive and they can distinguish what you
  mentioned above.

That's fine for me. I want them for the keysym constants in PHP-GTK
(like GDK_KEY_A and GDK_KEY_a). For now I hack around by using
(GDK_KEY__A) for lowercase ones. Which sucks.

Oh OK.

  There's one way I can think of in order to fix define(). It has advantages
  and disadvantages. The advantage is that all constant lookups will be much
  faster than they are today (no strtolower() and no memcmp()). The
  disadvantage is that defining constants will be much slower.
  What we would do is that instead of adding the name of the constant after
  an strtolower() into the constants hash we would do the following:
  - for case-sensitive constants: Add it with the exact same case as the
  definition.
  - for case-insensitive constants: Add all possible cases for the constant.
  That means that for a word of length L we'd add at most L*2 keys to the
  hash.
 
  This solution actually would work very well. It'd would fix the above
  problem and hash lookups would be faster. It would also be a step away 
 from
  case-insensitive constants. It would of course make case-insensitive
  constant definitions much slower but as no C-extensions use them
  (especially after I nuke it) and only about 5 constants in Zend use 
 them it
  should be fine (this is assuming that not many people use the third
  argument of define() which allows them to define case-insensitive
  constants).

What about the idea of introducing case-insensitive hashes? Modifying
hash function so that it hashes 'A' and 'a' into the same value.

Because some of the keys are case-insensitive and some aren't. Case 
insensitive hashes don't work if you want to mix the keys.
In any case, I think the solution above is a good one because there are 
only 5 constants in the Zend Engine which are case-insensitive.

Andi


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




[PHP-DEV] Re: [Zend Engine 2] Re: [PHP-DEV] Constants

2001-12-03 Thread Andrei Zmievski

On Mon, 03 Dec 2001, Andi Gutmans wrote:
 Because some of the keys are case-insensitive and some aren't. Case 
 insensitive hashes don't work if you want to mix the keys.
 In any case, I think the solution above is a good one because there are 
 only 5 constants in the Zend Engine which are case-insensitive.

I realize that. Perhaps _ex() versions of hash functions could take a
flag indicating which hash function to use. This may come in handy not
just for constants, you know.

-Andrei
* I'll need daily status reports on why you're so behind. -- Dilbert's boss *

-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]




[PHP-DEV] Re: [Zend Engine 2] Re: [PHP-DEV] Constants

2001-12-03 Thread Andi Gutmans

At 02:55 PM 12/3/2001 -0600, Andrei Zmievski wrote:
On Mon, 03 Dec 2001, Andi Gutmans wrote:
  Because some of the keys are case-insensitive and some aren't. Case
  insensitive hashes don't work if you want to mix the keys.
  In any case, I think the solution above is a good one because there are
  only 5 constants in the Zend Engine which are case-insensitive.

I realize that. Perhaps _ex() versions of hash functions could take a
flag indicating which hash function to use. This may come in handy not
just for constants, you know.

I still don't understand why you think it's suitable. If I want to lookup a 
constant FOO_Bar. How would you know if the hash function you want to use 
is case-sensitive or not?
In any case, you used to be able to specify a different hash function in 
hash_init() but it was never used and for performance reasons we inline'd 
the hash function.

Andi


-- 
PHP Development Mailing List http://www.php.net/
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]