In Debian CMUCL 3.0.5:
* (defstruct (foo (:type list) (:initial-offset 1)))
FOO
* (make-foo)
(NIL)
Does Common Lisp guarantee that the value in the list element
that was skipped with :initial-offset is NIL? If not, is it
even safe to print the value?
If I had specified (:type (vector fixnum)), then NIL might not
fit in the vector, so the standard can't require NIL as an
initial value in that case. Furthermore, the consequences are
undefined if I read either uninitialized slots of a structure or
uninitialized elements of an array made with MAKE-ARRAY, so I
assume the same holds for uninitialized vector elements allocated
as part of a structure.
With MAKE-LIST however, all elements are always initialized;
and the "make-annotated-binop" example in the description of
DEFSTRUCT in CLHS looks like the NILs are to be expected.
P.S. The "Arguments and Values" section claims that type can be
(vector size); I think that should be (vector element-type).