[Pyrex] Pyrex enhancement request: 'intern' constant strings
    Joseph Koshy 
    jkoshy at FreeBSD.ORG
       
    Wed May  7 07:41:21 CEST 2003
    
    
  
The following optimization could help speed up comparisions of 
string objects.
Consider PYREX code like the following:
+-+-+
cdef class Foo:
  def __getattr__(self,a):
    if a == "foo":
      ..
    elif a == "bar":
      ..
+-+-+
This generates code that uses (a) lots of static C strings and
(b) uses PyString_FromString() on these EACH time the __getattr__
routine is used.  Like so:
+-+-+
static char (__pyx_k98[]) = "foo";
static char (__pyx_k99[]) = "bar";
... snip ...
... inside the __getattr__ function : ...
__pyx_3 = PyString_FromString(__pyx_k99); if (!__pyx_3) { .. error .. }
if (PyObject_Cmp(__pyx_v_a, __pyx_3, &__pyx_1) < 0) { ... error ... }
+-+-+
Would it be possible for the PYREX compiler to generate code to 
'intern' constant C strings at module init time (say, using
`PyString_InternFromString()' ) and have the rest of the generated code 
use the resulting Python string objects directly, instead of creating
single-use objects with PyString_FromString() each time round?
Regards,
Koshy
<jkoshy at freebsd.org>
    
    
More information about the Pyrex
mailing list