>>>>> "Jeffrey" == Jeffrey Cunningham <[EMAIL PROTECTED]> writes:

    Jeffrey> I have been trying to read large binary files of floating point 
data
    Jeffrey> using CMUCL (19c). I thought I would have to do it using some form 
of
    Jeffrey> FFI and went to comp.lang.lisp for help getting that working. I
    Jeffrey> succeeded. But Duane Rettig at Allegro suggested it would be 
easier to
    Jeffrey> use 'read-vector. So I tried that as follows:

    Jeffrey> (let ((vec (make-array 10 :element-type 'double-float)))
    Jeffrey>   (with-open-file (os "d10.bin")
    Jeffrey>     (read-vector vec os)
    Jeffrey>     (print vec)))

    Jeffrey> where "d10.bin" is a double-float binary file containing 10
    Jeffrey> elements. When I try to read the file it produces the following 
error:

    Jeffrey> Type-error in KERNEL::OBJECT-NOT-DOUBLE-FLOAT-ERROR-HANDLER:
    Jeffrey>    #\Null is not of type DOUBLE-FLOAT

First, thanks for entering a ticket for cmucl on this issue!

Second, I've looked a bit more.  The ticket has my response, but in a
nutshell, CMUCL has two versions of read-vector.  The version you used
is EXT:READ-VECTOR and has the bug.  But if you (require
'simple-streams), and use this (note the :class arg):

    (let ((vec (make-array 10 :element-type 'double-float)))
      (with-open-file (os "d10.bin" :class 'stream:file-simple-stream)
         (stream:read-vector vec os)
         (print vec)))

everything works as you expect.

I think we should make EXT:READ-VECTOR work the same as
STREAM:READ-VECTOR, especially since EXT:READ-VECTOR is significantly
faster (order of magnitude or more) than STREAM:READ-VECTOR.

Ray



Reply via email to