From: "ioquatix (Samuel Williams) via ruby-core" Date: 2023-06-19T23:08:44+00:00 Subject: [ruby-core:113949] [Ruby master Feature#19737] Add `IO::Buffer#cat` for concat `IO::Buffer` instances Issue #19737 has been updated by ioquatix (Samuel Williams). Thanks for working on this. So, in short, I'm against the name (even if it is cute), but I'm okay with considering the functionality. I'd like to know more the use case. We shouldn't encourage users to create lots of temporary buffers. It's better to construct one buffer and append into it. The current functionality for "appending" to a buffer is `copy`. ```ruby a = IO::Buffer.for("A") b = IO::Buffer.for("B") c = IO::Buffer.new(2) c.copy(a, 0) c.copy(b, 1) c => # 0x00000000 41 42 AB ``` The thing about buffers, is that reallocation and resizing is expensive, unlike Strings. This is by design. It's a bad idea to write something like: ```ruby c = a + b c.resize(1024) c.copy(more_data, 2) ``` This is why I want to know the use case in a bit more detail. ---------------------------------------- Feature #19737: Add `IO::Buffer#cat` for concat `IO::Buffer` instances https://bugs.ruby-lang.org/issues/19737#change-103602 * Author: unasuke (Yusuke Nakamura) * Status: Open * Priority: Normal ---------------------------------------- ## 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/