[Dlang-study] [rcstring] Defining rcstring
Marc Schütz
schuetzm at gmx.net
Thu Feb 4 06:00:48 PST 2016
(back to list)
Am Wed, 3 Feb 2016 11:24:16 -0500
schrieb Andrei Alexandrescu <andrei at erdani.com>:
> On 02/03/2016 10:20 AM, Marc Schütz wrote:
> > I assume you also don't want to allow access to the underlying
> > storage (most likely `char[]`?). I don't see this as a good thing
> > at all. Without the ability of getting at least a `const(char)[]`
> > out of it, RCString would be next to useless in practice.
>
> Could you please substantiate that?
Well, no existing code will know about RCString. That leaves only
rangified functions, which currently isn't even a large part of Phobos,
and probably even less of third-party libraries. It can be changed, of
course, but it's a lot of work, and it often makes code considerably
uglier and complicated, less readible, and therefore more error prone.
>
> I was thinking we could provide access to the underlying slice as a
> @system primitive. Code using it would be @system or rebrand it as
> @trusted etc.
That's an option. I wonder if we should even make it implicit
via `alias this`. It surely is more ergonomic, and we don't lose safety.
>
> >> * Since string-compatibility is off the table, how about we fix
> >> string's issues with autodecoding? RCString should offer no indexed
> >> access and no length. Instead it offers the ranges byCodeUnit,
> >> byChar, byWChar, and byDChar. The first one does not do any
> >> decoding and offers length and random access. (What should be its
> >> element type?) The other ones are bidirectional ranges that do the
> >> appropriate decoding.
> >
> > Definitely. I would prefer this even for normal strings... The
> > element type of `byCodeUnit` should be char/wchar/dchar, of course.
>
> I guess we could add byOctet that iterates ubytes.
std.string.representation could be extended to accept any string-like
type:
http://dlang.org/phobos/std_string.html#.representation
>
> >> * Immutable does not play well with reference counting. I'm of a
> >> mind to reject immutable rcstring for now and figure out later how
> >> to go about it. Then const rcstring is okay because we always
> >> consider const a view on mutable strings (even though they're
> >> gone). We'll cast const away when manipulating the refcount.
> >
> > As noted by others, this is not a good idea. We can't solve this
> > recurring problem by ignoring it.
>
> RCString neither tries to solve the matter, nor ignore it. It simply
> acknowledges it. Once we do have a solution (possibly informed by
> RCString itself), we will use it to "turn on" immutable RCString,
> which will be a great test for the feature and a non-breaking
> improvement. It will all work out nicely.
>
> The point here is to break the stalemate by taking a step in a good
> direction.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digitale Signatur von OpenPGP
URL: <http://lists.puremagic.com/pipermail/dlang-study/attachments/20160204/02973e7c/attachment.sig>
More information about the Dlang-study
mailing list