On 7/7/11 12:32 , Mark Evenson wrote:
On 7/7/11 11:07 AM, Chun Tian (binghe) wrote:
(defconstant a #.(make-array '(8 256) :element-type '(unsigned-byte 32) :initial-element 0))
Reproduced and filed [as ticket #156][1]
[r13380][1] addresses this ticket allowing the form to be compiled again.
[r13380]: http://trac.common-lisp.net/armedbear/changeset/13380
But the compilation of the form probably doesn't do what you want. The ABCL compiler currently dumps such forms in their READ form to be read at load time rather than constructing JVM code to initialize the value. This has two consequences for your usage here: first, since the string has to be derserialized by the Lisp reader there is almost no conceivable JVM implementation that will make this usage faster. And the potentially more serious problem is that since the Lisp reader syntax doesn't specify the underlying array type, at runtime one gets an array who's BASE-ELEMENT-TYPE is T rather than (UNSIGNED-BYTE 32) which is probably less efficient.
Does anyone know if ANSI requires us to restore the compiled type at runtime? Or is the requirement to have "at least" the type specified in the MAKE-ARRAY call?
@Alan: I value your intuition that the sharpsign dot form here isn't portable. But is there a specific part of CLHS that you are thinking about here that I could pore over?