[#81492] [Ruby trunk Feature#13618] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — normalperson@...

Issue #13618 has been reported by normalperson (Eric Wong).

12 messages 2017/06/01

[ruby-core:81632] [Ruby trunk Feature#11484] add output offset for readpartial/read_nonblock/etc

From: samuel@...
Date: 2017-06-09 08:21:36 UTC
List: ruby-core #81632
Issue #11484 has been updated by ioquatix (Samuel Williams).


This is a great idea, but I propose the argument is called simply `offset:`

----------------------------------------
Feature #11484: add output offset for readpartial/read_nonblock/etc
https://bugs.ruby-lang.org/issues/11484#change-65328

* Author: normalperson (Eric Wong)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
----------------------------------------
~~~
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.
~~~




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next