[cfe-dev] Headers from C++ standard

Eric Liu via cfe-dev cfe-dev at lists.llvm.org
Wed May 11 01:17:55 PDT 2016


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.

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/6dcbbf38/attachment.html>


More information about the cfe-dev mailing list