From: "ioquatix (Samuel Williams) via ruby-core" Date: 2023-09-12T21:32:38+00:00 Subject: [ruby-core:114706] [Ruby master Feature#19737] Add `IO::Buffer#cat` for concat `IO::Buffer` instances Issue #19737 has been updated by ioquatix (Samuel Williams). Status changed from Open to Rejected It's probably not obvious given how existing Ruby code traditionally works, but in the above code, `a` and `b` are zero copy (which is ideal). ``` irb(main):001> data = "foo" => "foo" irb(main):002> IO::Buffer.for(data) => # 0x00000000 66 6f 6f foo ``` Note, it says "EXTERNAL READONLY SLICE". This means, the buffer is referring to external memory (the original string). Therefore your proposed solution, only does the bare minimum memory copies. I believe this is good enough to start with. So, I want to reject your proposal for now. However, it doesn't mean we shouldn't reconsider it for the future. So, if you find additional use cases, please come and discuss it :) Thanks for your effort and contribution. ---------------------------------------- Feature #19737: Add `IO::Buffer#cat` for concat `IO::Buffer` instances https://bugs.ruby-lang.org/issues/19737#change-104538 * Author: unasuke (Yusuke Nakamura) * Status: Rejected * Priority: Normal * Assignee: ioquatix (Samuel Williams) ---------------------------------------- ## motivation In my use case, I want to concat two IO::Buffer instances. But current implementation doesn't have that way. Then I created a patch. Opend here: TBD ## concern I have two concerns about it. ### 1. Should we provide `IO::Buffer#+` as an alias? In String instance, `"a" + "b"` returns `"ab",`. It feels intuitive. So, should we provide the same way as `IO::Buffer.for("a") + IO::Buffer.for("b")`? If `+` is provided, I naturally assume that `*` is also provided as an operator. Should we also provide an `IO::Buffer#*` method for symmetry with the String class? I thought the behavior of the "*" method is not obvious to me... (Is it right to just return joined buffers?) ### 2. Should it accept multiple IO::Buffer instances? In the `cat` command, it accepts multiple inputs like this. ``` $ cat a.txt b.txt c.txt a b c ``` Should `IO::Buffer#cat` accept multiple inputs too? -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/