Suppose I need a record of a record type myrec, and collections (vectors-of, lists-of and hash-tables) with values myrec.

What combination of

* define-record-type (srfi-9, srfi-99, chicken define-record, whatever) and

* (declare type ...)

can I use to inform the compiler that (for collections of myrec) vector-ref returns myrec's (likewise list car/cdr, hash-table-ref)? And that it needs not emit any instance-type-checking code for objects extracted from such collections?


Furthermore, how can I see what the compiler thinks of a given identifier? I've used 'csc -ot' but it only emits types for some identifiers. Maybe it inlines others, I don't really know.


Separately, how can I tell the compiler that fields in these records have certain types? Add type declarations for the implicitly-defined per-field accessors and mutators?


I've tried unwrapping collections of myrec, and also myrec fields, and it seems to make a huge difference in the speed of compiled code. Presumably because I don't know how to tell the compiler to omit type checking in "safe" cases. I know I could use some of the more aggressive optimization levels, but I don't really want to compile unsafe code everywhere, just where  I'm using the correct types.


Thanks,

Al


Reply via email to