Feature #17851
openruby extension for memoryview
Description
add an extension to ruby for memoryview - (just like Fiddle::MemoryView but in ruby assuming Fiddle::MemoryView gets slices)
add a method in Kernel to get initialize a memoryview on an object that is a c memoryview
lets say we want to partially copy a file - minus the first KB
f = File.open('test.txt', 'rb') do |f|
content = f.read
content_to_write = memoryview(content)[1024..-1] # here is what I want new -it will use the same memory as content just pointers
puts "content length #{content.size} - content_to_write length #{content_to_write.size}"
File.open('output.txt','wb') do |f2|
f2.write(content_to_write) # if we have #17832 this will write to file without copying
end
end
If we have memoryview extension in ruby we can use less memory because we are no longer copying Strings when doing slices
#17831
Updated by jeremyevans0 (Jeremy Evans) over 3 years ago
- Tracker changed from Bug to Feature
- Backport deleted (
2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN)
Updated by Eregon (Benoit Daloze) over 3 years ago
I think Fiddle::MemoryView is not needed for this.
String#[] can already avoid copying, on CRuby I think only if taking a substring until the end (the case here).
Also if Fiddle::MemoryView returns a mutable/non-read-only view, it seems very difficult to support while not making a copy and keeping the Ruby String working.
Finally, a method on Kernel is most likely not acceptable, we'd want a proper namespace like on Fiddle::MemoryView or so.
Updated by Eregon (Benoit Daloze) over 3 years ago
- Related to Feature #17831: add slice method to Fiddle::MemoryView added