[cfe-dev] Roadmap for a Concepts implementation P0734R0, currently merged into C++20 draft

Saar Raz via cfe-dev cfe-dev at lists.llvm.org
Sun Nov 19 00:31:55 PST 2017

Hi Changyu - did you submit a patch for #1?
Anyways, it'd be great if you could work on requires expressions (25-27)
and the diagnostic functions instead, as I already have much of the code
figured out for the other steps and it would be a waste if you had to
figure it out again yourself

On Sun, Nov 19, 2017, 10:22 AM Changyu Li <changyu at ca.ibm.com> wrote:

> Hi Saar,
> I'd like to help you implement your road map. I've finished point 1 and am
> working on points 2 and 3. I may have some questions in the future, not
> right now though.
> ----- Original message -----
> From: Hubert Tong <hubert.reinterpretcast at gmail.com>
> To: Richard Smith <richard at metafoo.co.uk>
> Cc: Saar Raz <saar at raz.email>, Changyu Li <changyu at ca.ibm.com>, Nathan
> Wilson <nwilson20 at gmail.com>, Clang Dev <cfe-dev at lists.llvm.org>
> Subject: Re: [cfe-dev] Roadmap for a Concepts implementation P0734R0,
> currently merged into C++20 draft
> Date: Fri, Nov 17, 2017 10:15 PM
> Hi Saar,
> As Richard mentioned, the only reason for the delay has been an issue with
> finding people with available time to work on the project. I'm adding
> Changyu and Nathan to the CC because they've also been active in this area.
> -- HT
> On Fri, Nov 17, 2017 at 8:41 PM, Richard Smith <richard at metafoo.co.uk>
> wrote:
> On 17 November 2017 at 16:24, Saar Raz via cfe-dev <cfe-dev at lists.llvm.org
> > wrote:
> Hi all,
> As I've read and seen in Clang's code, a Concepts implementation in Clang
> hasn't really been pushed forward in the past year, with only very, very
> little code in place right now regarding Concepts, placed by Hubert Tong,
> CC'd, back in February, and very little to non-existent discussions in the
> mailing lists.
> As of the Toronto meeting back in July, a subset of the original Concepts
> TS was merged into draft C++20, which omits some shorthand notations for
> concepts but keeps the core parts of the language feature. Most notably -
> function concepts were removed, as well as the 'bool' keyword after the
> 'concept' keyword, and the 'introducer' and "terse/natural syntax" were
> omitted.
> I believe we should *go ahead and implement P0734R0 now *for the
> following reasons:
>  - P0734R0
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-2Dstd.org_jtc1_sc22_wg21_docs_papers_2017_p0734r0.pdf&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=_TppqN2XZ2ySkHq7c46FM6kKcTPHv0u9VoUI4-BYNJg&m=eo1IkqhJz5o151j2EqID_m9jZhqvgWxYauu4PmYltbI&s=vINFjxsX84lS2vkVxw_f7jsdy0SeFDZNFZUm8SyPsts&e=> hasn't
> yet been implemented in any compiler (excluding GCC which implements a
> different proposal), and furthermore *no Concepts implementation was made
> from specification* - Andrew Sutton who worked on the GCC implementation
> also wrote the proposal. Doing a concepts implementation now would, I
> believe, help the committee discover defects and in general be more
> confident in the proposal.
> - to be honest, it is* really not that hard *to implement, and can, I
> believe, be done in a month or two.
> - Concepts will be present in C++2a unless something extraordinary happens
> - if not in their current form, then in a very similar form with maybe a
> few more terse syntaxes introduced* which would not break existing code*
> but just allow for nicer code - in any case, I believe it is a good time to
> lay a foundation for the core of the language feature which seems pretty
> stable already and were agreed upon by the committee.
> I took a look at the relevant code and the proposal and hereby propose* a
> roadmap for implementing *Concepts in clang as it stands today:
> https://github.com/saarraz/clang-concepts-roadmap
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_saarraz_clang-2Dconcepts-2Droadmap&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=_TppqN2XZ2ySkHq7c46FM6kKcTPHv0u9VoUI4-BYNJg&m=eo1IkqhJz5o151j2EqID_m9jZhqvgWxYauu4PmYltbI&s=H16vJSiZQS74Accey_tQE4dThQXD2gzTRZbCEPcNBuA&e=>
> I broke it up into commit-sized chunks, which should take us to a working
> implementation of the proposal. I'm of course willing to implement all of
> this if needed.
> Thank you for your analysis and the offer to help out!
> We are very much open to adding support for P0734R0 to Clang, along with
> all other features voted into the working draft for C++20. The only reason
> this has not already been implemented is a lack of volunteers such as
> yourself with the time to devote to the task.
> Your roadmap looks to be in good shape. I have a few suggestions:
> * For point 4, consider modeling an id-expression that names a concept
> specialization as a DeclRefExpr rather than introducing a new AST node.
> That's our general way of representing "an expression denoting a name
> associated with some declaration by name lookup", and is currently used for
> things like variables, functions and enumerators. This will likely be
> significantly simpler if you do in fact make a ConceptSpecialization be a
> declaration. (You'll need a templated declaration to live within the
> ConceptTemplateDecl anyway, if you're going to follow the usual AST model
> where a template declaration is a wrapper around some other declaration.)
> However, there may be a reason why this is infeasible -- particularly, the
> result of evaluating a concept with a set of arguments may validly change
> throughout the compilation of a program, so any notion of tracking /
> caching concept specializations might not be workable. This needs more
> analysis.
> * Consider how constraint normalization and subsumption checking will fit
> into the system. These are probably the two biggest pieces to design and
> implement.
> * Decouple the implementation of requires-expressions from everything
> else. I would be inclined to implement them first rather than last, but
> that's up to whoever actually does the implementation work.
> Please tell me what you think and post issues/pull requests to the roadmap
> repo or post here.
> I'd really like to see this get going.
> Thanks!
> Saar
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Ddev&d=DwMFaQ&c=jf_iaSHvJObTbx-siA1ZOg&r=_TppqN2XZ2ySkHq7c46FM6kKcTPHv0u9VoUI4-BYNJg&m=eo1IkqhJz5o151j2EqID_m9jZhqvgWxYauu4PmYltbI&s=fXOz5NsHFG8dNWh4maT1eZzkDI99PUbAO9dMI3q8ntM&e=>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171119/c347c316/attachment-0001.html>

More information about the cfe-dev mailing list