Rename std.string.toStringz?
Jonathan M Davis
jmdavisProg at gmx.com
Sat Jun 25 17:25:09 PDT 2011
On 2011-06-25 16:07, kenji hara wrote:
> 2011/6/26 Jonathan M Davis <jmdavisProg at gmx.com>:
> > On 2011-06-25 15:15, kenji hara wrote:
> >> > 1. Keep toStringz as it is (as well as toUTF16z) and either consider
> >> > stringz to be some sort of word unique to the D community or just
> >> > admit that we're not going to camelcase it because it would break too
> >> > much code to do so.
> >>
> >> ++vote, but not all.
> >>
> >> Currently, the return type of toStringz is "zero-termniated UTF-8",
> >> not "C-string".
> >>
> >> The 'C-string' word has multiple meanings=encodings. ASCII, Latin-1,
> >> EUC, Shift-JIS (in Japan), UTF-8 (Linux?), UTF-16 (in Windows) ...
> >> It depends on context.
> >>
> >> But, maybe, many of ’C-string' equals to "zero-terminated UTF-8' or
> >> "zero-terminated UTF-16".
> >> Other encodings should be supported by another module (std.encoding?
> >> Is it living?).
> >>
> >> My proposal:
> >> 1. Add three aliased types.
> >> alias immutable(char)* stringz; // useful in Linux
> >> alias immutable(wchar)* wstringz; // useful in Windows
> >> alias immutable(dchar)* dstringz; //
> >> 2. Rename current toStringz to toUTF8z, and add deprecated aliasing
> >> 'toStringz' to keep compatibility.
> >> (Adding toUTF32z in std.string module will increase consistency.
> >> Templated toUTFXXz family is more better.)
> >> 3. std.conv.to support conversion from 'any string type' to
> >> (|wd)stringz type (by using toUTFXXz family).
> >>
> >> The main point is we should make the aliased type names as 'De facto'
> >> type names, like string, wstring, dstring. (Remember the three string
> >> types are aliased type in fact.)
> >>
> >> We can treat the type name uint as 'unsigned int'. Because it is just
> >> built-in type name!
> >>
> >> User defined type names shoude be camel cased usually in D.
> >> Then, let's make them built-in! Therefore we can remove camel cased
> >> names from our choices.
> >>
> >> I think this proposal is usefulness, keeping compatibility, and
> >> consistent.
> >
> > From this and related discussions, it seems that the current plan is to
> > create a toUTFz function which is templated on the pointer type that you
> > want returned (char*, const(char)*, immutable(char)*, wchar*, etc.) and
> > which takes any string type. Then you can get a zero-terminated string
> > with whatever level of constness you want from any string. std.conv.to
> > would then be updated such that converting from any string to any
> > character pointer would call toUTFz. We may or may not have toStringz,
> > toWstringz, and toDstringz which use toUTFz.
> >
> > Regardless, I don't see much point in creating the types stringz,
> > wstringz, and dstringz. There's nothing which guarantees that they're
> > going to be zero- terminated, so they could be complete misnomers,
> > depending on how they're used, and they're specifically immutable
> > whereas you often need mutable zero- terminated strings. So, ultimately,
> > I don't think that they'd add much. We _do_ need better conversion
> > functions though.
> >
> > - Jonathan M Davis
> >
> >
> > There's nothing which guarantees that they're going to be zero-
> > terminated, so they could be complete misnomers, depending on how they're
> > used,
>
> Ah, you are right. I didn't think about it. I agree to you.
>
> > to create
> > a toUTFz function which is templated on the pointer type that you want
> > returned (char*, const(char)*, immutable(char)*, wchar*, etc.)
>
> I tihnk the templated function toUTFz needs default type inference
> feature like follows:
> ----
> string s = "...";
> auto sz = toUTFz(s);
> static assert(is(typeof(sz) == immutable(char)*));
> ----
>
> Thanks for your explain.
Oh, it may end up with a default template parameter based on what it's given.
It hasn't been written yet. But the idea is to allow for creating any type
zero-terminated strings (well, character pointers) from any type of string -
including allowing for defining constness. Defining a default for the template
parameter is definitely a good idea though.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list