Actions
Feature #11484
closedadd output offset for readpartial/read_nonblock/etc
[ruby-core:<unknown>]
Description
Specifying a destination offset will allow allocating less garbage
strings to improve performance when reading partial data off a pipe
or socket.
For example:
tmp = "".b
buf = "".b
case rv = io.read_nonblock(8192, tmp, exception: false)
when String
buf << tmp
break if parsing_done?(buf)
else
return rv
end while true
Can be written as:
buf = "".b
case rv = io.read_nonblock(8192, buf, exception: false, off_out: buf.size)
when String
break if parsing_done?(buf)
else
return rv
end while true
For reference, here is the relevant part from "perldoc -f sysread"
sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
sysread FILEHANDLE,SCALAR,LENGTH
-snip-
An OFFSET may be specified to place the read data at some place
in the string other than the beginning. A negative OFFSET
specifies placement at that many characters counting backwards
from the end of the string. A positive OFFSET greater than the
length of SCALAR results in the string being padded to the
required size with "\0" bytes before the result of the read is
appended.
-snip-
Maybe we can shortcut by allowing "off_out: :end" to avoid redundant
words and potentially using the wrong variable:
io.read_nonblock(8192, buf, exception: false, off_out: :end)
I'm not sure when I'll have time to work on this feature.
Lately I've been working in Perl again and rediscovered this API subtlety.
Updated by ioquatix (Samuel Williams) almost 8 years ago
This is a great idea, but I propose the argument is called simply offset:
Updated by matz (Yukihiro Matsumoto) over 7 years ago
- Status changed from Open to Feedback
I like the idea but do not like the name off_out
. Any other candidate?
Matz.
Updated by akr (Akira Tanaka) over 7 years ago
How about bufoffset?
Actions
Like0
Like0Like0Like0