Подсказка по оптимизации, которую вы получаете, взята из строки документа deftransform
, определенной в sbcl/src/compiler/generic/vm-tran.lisp
:
(deftransform hairy-data-vector-ref ((array index) (simple-array t) *)
"avoid runtime dispatch on array element type"
...)
У него есть комментарий, который говорит:
This and the corresponding -SET transform work equally well on non-simple
arrays, but after benchmarking (on x86), Nikodemus didn't find any cases
where it actually helped with non-simple arrays -- to the contrary, it
only made for bigger and up to 100% slower code.
Код для массивов довольно сложный, и трудно сказать, почему и как все устроено так, как они есть. Вам, вероятно, следует спросить разработчиков SBCL о sbcl-help
. См. раздел рассылки в разделе
SourceForge.
В настоящее время представляется предпочтительным использовать простые массивы, если это возможно.