[cfe-dev] Headers from C++ standard

Manuel Klimek via cfe-dev cfe-dev at lists.llvm.org
Wed May 11 01:33:45 PDT 2016


On Wed, May 11, 2016 at 10:18 AM Eric Liu <ioeric at google.com> wrote:

> I think what we really want are synopses that can compile (i.e. with all
> necessary #include headers) so that we can run clang matcher on them.
>

Exactly. Richard, I thought it might make sense for the C++ standard to
have its code-like snippets in parsable form for verifyability, but if you
don't think it'd help, we'll need to look for something else.
Options:
a) we create an ugly little script that extracts the functions from the
standard and puts them into a bunch of files with #includes (probably by
maintaining a side table) and have people use that script + the standard
b) we just one-time create our own table and try to maintain it (perhaps
just as part of the clang repo)
c) ... ?


>
> On Wed, May 11, 2016 at 2:50 AM Richard Smith via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> On Tue, May 10, 2016 at 2:22 AM, Manuel Klimek via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>>> On Mon, May 9, 2016 at 7:14 PM Richard Smith via cfe-dev <
>>> cfe-dev at lists.llvm.org> wrote:
>>>
>>>> The below is the sort of thing I'd suggest. You'll probably need some
>>>> manual massaging to get the extraction exactly right, though.
>>>>
>>>
>>> Would you be generally open to the idea of having the standard maintain
>>> a more parsable form of the definitions, and including them back into the
>>> tex file?
>>>
>>
>> The only supported use of the sources on github are to allow the C++
>> project editor to produce working drafts and standards. They're on github
>> as a convenience to contributors to the C++ standardization process, and
>> could go away or change format or layout or anything else, at any time, if
>> we find a better process. On that basis, it doesn't make a lot of sense to
>> me for the layout of the standard's sources to be driven by external
>> concerns like this one.
>>
>> If there's some changes you want, and you can make that change in a way
>> that's aligned with making the sources better as a vehicle for maintaining
>> or producing a standard / working draft, then that's probably the best path
>> forward. For instance, a change that adds a different kind of LaTeX
>> environment around synopsis blocks, providing higher-level semantic markup,
>> would generally be positive for the standard sources and would help you
>> extract the parts you need.
>>
>> It's not clear to me what benefit there would be to the standard sources
>> if we separated out these synopses into separate files, and it would make
>> our current organizational system (one .tex file per top-level clause)
>> non-uniform.
>>
>> Or do you think that will increase the amount of maintenance work too
>>> much?
>>>
>>>
>>>> Also, the synopses do not typically include class definitions, just a
>>>> "class X;" style declaration, so if that's a problem for you then you'll
>>>> need to do a bit more work to extract those too.
>>>>
>>> Generally, we need all symbols users might want to use, and which
>>> headers they are defined in.
>>>
>>
>> It might be easier to extract this from the index of library names rather
>> than from the synopses (although you may need to insert some markers to
>> indicate which headers contain each library name -- it would be useful to
>> include that information in the index too, which would justify the cost of
>> maintaining those markers in the standard text).
>>
>> On 9 May 2016 8:51 a.m., "Kim Gräsman" <cfe-dev at lists.llvm.org> wrote:
>>>>
>>>>> Hi Eric,
>>>>>
>>>>> On Mon, May 9, 2016 at 3:30 PM, Eric Liu via cfe-dev
>>>>> <cfe-dev at lists.llvm.org> wrote:
>>>>> >
>>>>> > As an alternative, we are thinking about parsing header synopses
>>>>> from C++
>>>>> > standard. So, we are wondering if there are existing syntax-correct
>>>>> header
>>>>> > synopses in the form of C++ header files somewhere that we can use.
>>>>> If not,
>>>>> > Manual(@klimek) suggests that maybe we could have the header
>>>>> synopses as C++
>>>>> > header files and have the standard draft includes them so that
>>>>> syntax can be
>>>>> > easily checked, and we can conveniently parse the synopses too.
>>>>>
>>>>> We've had similar plans for IWYU, and I think we eventually parsed the
>>>>> TeX source from https://github.com/cplusplus/draft/tree/master/source
>>>>> with a simple shell script.
>>>>>
>>>>> I didn't do this myself, but I found a couple of examples in our
>>>>> source here:
>>>>>
>>>>>   // These headers are defined in C++14 [headers]p3.  You can get them
>>>>> with
>>>>>   // $ sed -n
>>>>> '/begin{floattable}.*{tab:cpp.c.headers}/,/end{floattable}/p'
>>>>> lib-intro.tex | grep tcode | perl -nle 'm/tcode{<c(.*)>}/ && print qq@
>>>>>  { "<$1.h>", kPublic, "<c$1>", kPublic },@' | sort
>>>>>   // on
>>>>> https://github.com/cplusplus/draft/blob/master/source/lib-intro.tex
>>>>>
>>>>>   // These headers are defined in C++14 [headers]p2.  You can get them
>>>>> with
>>>>>   // $ sed -n
>>>>> '/begin{floattable}.*{tab:cpp.library.headers}/,/end{floattable}/p'
>>>>> lib-intro.tex | grep tcode | perl -nle 'm/tcode{(.*)}/ && print qq@
>>>>> "$1",@' | sort
>>>>>   // on
>>>>> https://github.com/cplusplus/draft/blob/master/source/lib-intro.tex
>>>>>
>>>>> (from
>>>>> https://github.com/include-what-you-use/include-what-you-use/blob/master/iwyu_include_picker.cc
>>>>> )
>>>>>
>>>>> Assuming you want this to be portable I'm sure you can do something
>>>>> similar in C++ relatively easily.
>>>>>
>>>>> FWIW,
>>>>> - Kim
>>>>> _______________________________________________
>>>>> cfe-dev mailing list
>>>>> cfe-dev at lists.llvm.org
>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>
>>>> _______________________________________________
>>>> cfe-dev mailing list
>>>> cfe-dev at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>
>>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160511/8758047a/attachment.html>


More information about the cfe-dev mailing list