[#111712] [Ruby master Feature#19322] Support spawning "private" child processes — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu
14 messages
2023/01/07
[ruby-core:111677] [Ruby master Feature#19314] String#bytesplice should support partial copy
From:
"Eregon (Benoit Daloze) via ruby-core" <ruby-core@...>
Date:
2023-01-06 12:20:13 UTC
List:
ruby-core #111677
Issue #19314 has been updated by Eregon (Benoit Daloze).
I think this is too hard to read and parse for a human and 5 arguments seems way too much for a core method.
It feels like a full memcpy/arraycopy which I don't think in general is a good idea for String.
The implementation complexity in []= and similar already hurts Ruby too much.
This is probably the 3rd or more workaround I see to have proper lazy substrings in CRuby, i.e., `"abcdef"[1..3]` must not copy bytes.
That is what needs to be solved (it already works in TruffleRuby).
Yes, it means RSTRING_PTR() might need to allocate to \0-terminate, so be it, it's worth it.
So I am strongly against this, it's a nth workaround for something simpler to solve which is much more helpful in general.
----------------------------------------
Feature #19314: String#bytesplice should support partial copy
https://bugs.ruby-lang.org/issues/19314#change-101071
* Author: shugo (Shugo Maeda)
* Status: Open
* Priority: Normal
----------------------------------------
String#bytesplice should support partial copy without temporary String objects.
For example, given `x = "0123456789"`, either of the following replaces the contents of `x` with `"0167856789"`:
```ruby
x.bytesplice(2, 3, x, 6, 3)
x.bytesplice(2..4, x, 6..8)
```
## Considerations
* What should be the return value?
* The return value should be the whole source string for performance and consistency with `bytesplice(offset, len, s)`.
* Can the source and destination ranges overlap?
* Yes.
* Can the source and destination lengths be different?
* Yes.
* Can range form and offset/length form be mixed in the source and destination?
* No.
* What should happen when any offset doesn't land on character boundary in text strings.
* IndexError should be raised.
* Can the length be omitted in the destination?
* Maybe yes, but it may be confusing.
## Use cases
* [Gapped buffer implementation for text editors](https://github.com/shugo/textbringer)
* [NAT implementation](https://github.com/kazuho/rat)
* https://twitter.com/kazuho/status/1611279616098070532
--
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/