[Dlang-study] [rcstring] Defining rcstring

Михаил Страшун public at dicebot.lv
Mon Feb 8 00:50:05 PST 2016


On 02/07/2016 01:47 AM, Andrei Alexandrescu wrote:
>>> D uses UTF for strings. Vivid anecdotes aside, we really can't be
>>> everything to everyone. Your friend could have written a translator to
>>> UTF in a few lines.The DNA optimization points at performance bugs in
>>> phobos that far as I know have been fixed or are fixable by rote. I
>>> think this non-UTF requirement would just stretch things too far and
>>> smacks of solving the wrong problem.
>>
>>  From a pure technical point of view you are perfectly right. But does
>> that makes the fact potential users leave dissapointed better?
> 
> What greener pastures do they leave to? We should draw a page from the
> languages that support multiple encodings seamlessly.

He has switched to some Haskell parser generator solution
(https://wiki.haskell.org/Parsec) - but I don't know anything about it
or how does it expose encoding support. My personal understanding is
that he was so frustrated by debugging mysterious parsing failures
without language/library even slightly hinting what can be wrong that
moved to different solution even if it wasn't strictly superior.

My gut feeling is that D is right in making UTF-8 default and main
supported option - but the problem is that it assumes everything is
UTF-8 too silently, without making neither library writers nor
developers recognize it soon enough.

To be more specific, consider this canonical D example:

auto processed_text =
    File("something.txt", "r")
    .byLineCopy()
    .doSomeProcessing();

It is easy and natural thing to do thus there is high chance someone
will write it without remembering doSomeProcessing() will do UTF-8
decoding internally. And a very simple addition can improve it a lot:

auto processed_text =
    File("something.txt", "r")
    .assumeUTF8() // or validateUTF8() to do early validation
                  // with throwing
    .byLineCopy()
    .doSomeProcessing();

This changes nothing in functionality and actual support of different
encodings. Yet it changes two important things:

1) Serves as a visual reminder: "Hey, this assumes UTF-8, maybe you
should consider using `File.rawRead` instead?"
2) Allows to make a choice between eagerly enforcing input is valid
UTF-8 and simply assuming it.

I won't insist if this topic looks completely out of the line - it is
not that important. But, as I have already mentioned before, it is
likely to be last chance to change something about it if it is ever
wanted to be changed.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://lists.puremagic.com/pipermail/dlang-study/attachments/20160208/45b86f1e/attachment.sig>


More information about the Dlang-study mailing list