Greetings!

OK I found some time to scratch this itch -- committed into master is a
transparent redirection of read/write-sequence into fread/fwrite where
possible.  You may want to check it out.  Some details may yet need
ironing out but it appears basically functional now.

Take care,

Raymond Toy <[email protected]> writes:

> On 4/13/26 10:40 AM, Camm Maguire wrote:
>
>  Greetings, and thank you so much for bringing this to my attention!  I
> have committed a fix to branch 2_7_2pre, which will be in the
> forthcoming debian package being built now.
>
> Thanks for the fix.  My simple slurp-bytes test with maxima.info-1
> (1030671 bytes) goes from 19.1 sec with gcl 2.7.1 to 0.090 sec with
> this fix.  With `si:fread`, it's 0.01 sec with the latest gcl.  So
> there is some room for improvement.  But going from 19.1 to 0.09 is a
> huge improvement and fast enough for me now.
>
>  
>
> Right now read-sequence loops over read-byte when appropriate, so could
> be accelerated further with fread, but I doubt you will be able to see
> much difference.  If using fread, we will have to duplicate the logic in
> read-byte concerning the stream-element-type, but that is just ugly and
> could be done.  One thing I've always wanted in GCL is an interface to
> my favorite Linux file I/O facility, mmap.
>
> Take care,
>
> Raymond Toy <[email protected]> writes:
>
>  On 4/8/26 9:21 AM, Raymond Toy wrote:
>
>  I have this routine:
>
>
> (defun slurp-bytes (filename)
>   "Return the entire contents of FILENAME as a (unsigned-byte 8) vector.
>    Results are cached in *bytes-cache* so each file is read only once."
>   (or (gethash filename *bytes-cache*)
>       (setf (gethash filename *bytes-cache*)
>             (with-open-file (s filename :direction :input
>                                         :element-type '(unsigned-byte 8))
>               (let* ((len (file-length s))
>                      (buf (make-array len :element-type '(unsigned-byte 8))))
>                 (read-sequence buf s)
>                 buf)))))
>
>  When reading maxima.info-1 (1030671 bytes), it takes a very long time 
> (several seconds). Is there anyway to speed this up?
>  I would have expected reading a bunch of bytes from a file via read-sequence 
> would be very fast.
>
> Some googling pointed me to si:fread. It makes slurp-bytes really fast taking 
> tiny fractions of a sec to read i a 1 MB file.
> Having read-sequence use si:fread for element types of character or 
> (unsigned-byte 8) would be a really good thing.
>
> &#8203;
>

-- 
Camm Maguire                                        [email protected]
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to