From: Brian S. <br...@de...> - 2001-11-18 03:08:17
|
Raymond Toy wrote: >>>>>>"Brian" == Brian Spilsbury <br...@de...> writes: >>>>>> > > Brian> In good news, when I get the array type stuff sorted out (to allow > Brian> specialisation on non-primitive types), we'll be able to add a > Brian> universally specialisable array type, implemented like (array T), but > Brian> with an extra slot for a type-predicate, which could be checked at > Brian> high safety, and used for type-inferrence otherwise. So, a > Brian> (simple-array cons (*)) might be actually meaningful, and help the > Brian> type-inferrence. > >Doesn't it already support this for type inference? > >(defun foo (x n) > (declare (type (simple-array cons (*)) x) > (fixnum n)) > (values (car (aref x n)) (cdr (aref x n)) (aref x n))) > >(compile 'foo) > >(describe 'foo) >=> >Its result type is: > (VALUES T T CONS) > It does within the scope of the declaration, but if I were to use the array elsewhere it would turn into a (simple-array T (*)) [unless there were additional declarations...] I'm not sure that it's a significant win to allow fully specialised array types, but it shouldn't be hard to do. Brian |