aboutsummaryrefslogtreecommitdiffstats
path: root/io.rb
Commit message (Collapse)AuthorAgeFilesLines
* Move IO#readline to RubyAaron Patterson2023-09-281-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit moves IO#readline to Ruby. In order to call C functions, keyword arguments must be converted to hashes. Prior to this commit, code like `io.readline(chomp: true)` would allocate a hash. This commits moves the keyword "denaturing" to Ruby, allowing us to send positional arguments to the C API and avoiding the hash allocation. Here is an allocation benchmark for the method: ``` x = GC.stat(:total_allocated_objects) File.open("/usr/share/dict/words") do |f| f.readline(chomp: true) until f.eof? end p ALLOCATIONS: GC.stat(:total_allocated_objects) - x ``` Before this commit, the output was this: ``` $ make run ./miniruby -I./lib -I. -I.ext/common -r./arm64-darwin22-fake ./test.rb {:ALLOCATIONS=>707939} ``` Now it is this: ``` $ make run ./miniruby -I./lib -I. -I.ext/common -r./arm64-darwin22-fake ./test.rb {:ALLOCATIONS=>471962} ``` [Bug #19890] [ruby-core:114803]
* [Feature #16254] Use `Primitive.func` styleNobuyoshi Nakada2020-06-191-2/+2
|
* [Feature #16254] Use `__builtin.func` styleNobuyoshi Nakada2020-06-191-2/+2
|
* Define IO#read/write_nonblock with builtins.Koichi Sasada2019-11-081-0/+123
IO#read/write_nonblock methods are defined in prelude.rb with special private method __read/write_nonblock to reduce keyword parameters overhead. We can move them into io.rb with builtin functions.