[llvm-dev] RFC: General purpose type-safe formatting library

Sean Silva via llvm-dev
Tue, 01 Nov 2016 06:41:10 -0000

On Mon, Oct 31, 2016 at 5:21 PM, Chandler Carruth via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> On Mon, Oct 31, 2016 at 3:46 PM Zachary Turner via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hi all,
>>
>> Tentatively final version is up here: https://reviews.llvm.org/D25587
>>
>> It has a verbal LGTM, but I plan to wait a bit longer just in case
anyone
>> has some additional thoughts.  It's a large patch, but if
you're
>> interested, one way you can help without doing a full-blown review is
to
>> look at the large comment blocks in FormatVariadic.h and
>> FormatProviders.h.  Here I provide a formal description of the grammar
of
>> the replacement sequences and format syntax.  So you can look at this
>> without looking at the code behind it and see if you have comments just
on
>> the format language.
>>
>> Here's a summary of (most) everything contained in this patch:
>>
>> 1) UDL Syntax for outputting to a stream or converting to a string.
>>     outs() << "{0}"_fmt.stream(1)
>>     std::string S = "{0}"_fmt.string(1);
>>
>
> I continue to have a strong objection to using UDLs for this (or anything
> else in LLVM).
>
> I think this feature is poorly known by many programmers. I think it will
> produce error messages that are confusing and hard to debug. I think it
> will have a significant negative impact on compile time. I also think that
> it will exercise substantially less well tested parts of every host
> compiler for LLVM and subject us to an increased rate of mysterious host
> compiler bugs.
>
> I also think it forces programmers to be aware of a "magical"
construct
> that doesn't really fit with the rest of the language.
>
> It isn't that any of these issues in isolation cannot be overcome, it
is
> that I think the value provided by the UDL specifically is substantially
> smaller than the cost.
>
> I would *very strongly* prefer that this is accomplished with
"normal" C++
> syntax, and that compile time checking is done with constexpr when
> available. I think that will give the overwhelming majority of the benefit
> with dramatically lower cost.
>

+1, the UDL seems a bit too automagical.
`format_string("{0}", 1)` is not that much longer than
`"{0}"_fmt.string(1)`, but significantly less magical.

Simple example: what should I type into a search engine to find the LLVM
doxygen for the UDL? I know to search "llvm format_string" for the
format
string, but just from looking at a use of the UDL syntax it might not be
clear that format_string is even called.

-- Sean Silva


>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20161031/7dd95b31/attachment.html>