Robert Bradshaw wrote:
> On May 27, 2010, at 12:43 AM, Dag Sverre Seljebotn wrote:
>
>   
>> I recognized typeof in a recent commit by Robert. Is this a new  
>> feature
>> in 0.13 or has it been in for some time?
>>     
>
> It's been around since last fall--I just needed something quick for  
> writing tests for type inference, so typeof was born.
>   
OK, then this doesn't need to be discussed now at any rate.

I'll just make a quick comment below and then hope the thread dies.
>   
>> If it is new:
>>
>> What I'm wondering is whether typeof should perhaps, in the spirit of
>> Python, return a descriptive object instead of a string. (It could  
>> even
>> return a ctypes object describing the type, if that is powerful enough
>> for us).
>>
>> In particular, it should be possible to do introspection about structs
>> and so on, so that it is easy to build serializers etc. using "typeof"
>> information. (Buffers already put some RTTI about structs to the C  
>> file
>> BTW, in order to parse buffer format strings.)
>>
>> This is thinking long-term; but I'm wondering whether the current  
>> typeof
>> should be renamed e.g. "nameoftype", in order to maintain backwards
>> compatability if or when somebody decides to make a more powerful  
>> typeof.
>>     
>
> I was thinking of that at first, but I really can't think of much one  
> would do with it--it's not giving anything that's not known at compile  
> time, it's just a way to make sure the compiler thinks the type is  
> what you think it is. Even with templates, it would return the  
> template parameter, not the resolved type. For testing purposes, a  
> string is very nice.
>   
cdef persist_struct_to_xml(void* data, object typeinfo, object 
filename): ...

cdef StructA a
a.b = 2
a.c = 4
persist_struct_to_xml(&a, typeof(StructA), 'a.dat')

cdef StructB b
b.foo = 2
b.bar = 4.5
persist_struct_to_xml(&b, typeof(StructB), 'b.dat')

Basically, the type information for structs should be a tree, containing 
names and *offsets* and types. persist_struct_to_xml needs to have 
special-case if-tests on all the primitive types, but structs can be 
dealt with through pointer manipulation and offsets.

Offsets can trivially be resolved by the C compiler during C compilation 
and put into the type information then (in fact, I already do in the 
buffer RTTI, which is used for validating buffer data format strings).

Of course, it's just a convenience, but if you need this, a very big one.

Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to