Hi Changyu - did you submit a patch for #1?<br>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<br><br><div class="gmail_quote"><div dir="ltr">On Sun, Nov 19, 2017, 10:22 AM Changyu Li <<a href="mailto:changyu@ca.ibm.com">changyu@ca.ibm.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_6139560832557030812socmaildefaultfont" dir="ltr" style="font-family:Arial,Helvetica,sans-serif;font-size:10.5pt"><div dir="ltr">Hi Saar,</div>
<div dir="ltr"> </div>
<div dir="ltr">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.</div>
<div dir="ltr"> </div>
<blockquote dir="ltr" style="border-left:solid #aaaaaa 2px;margin-left:5px;padding-left:5px;direction:ltr;margin-right:0px"></blockquote></div><div class="m_6139560832557030812socmaildefaultfont" dir="ltr" style="font-family:Arial,Helvetica,sans-serif;font-size:10.5pt"><blockquote dir="ltr" style="border-left:solid #aaaaaa 2px;margin-left:5px;padding-left:5px;direction:ltr;margin-right:0px">----- Original message -----<br>From: Hubert Tong <<a href="mailto:hubert.reinterpretcast@gmail.com" target="_blank">hubert.reinterpretcast@gmail.com</a>><br>To: Richard Smith <<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>><br>Cc: Saar Raz <saar@raz.email>, Changyu Li <<a href="mailto:changyu@ca.ibm.com" target="_blank">changyu@ca.ibm.com</a>>, Nathan Wilson <<a href="mailto:nwilson20@gmail.com" target="_blank">nwilson20@gmail.com</a>>, Clang Dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>><br>Subject: Re: [cfe-dev] Roadmap for a Concepts implementation P0734R0, currently merged into C++20 draft<br>Date: Fri, Nov 17, 2017 10:15 PM<br> 
</blockquote></div><div class="m_6139560832557030812socmaildefaultfont" dir="ltr" style="font-family:Arial,Helvetica,sans-serif;font-size:10.5pt"><blockquote dir="ltr" style="border-left:solid #aaaaaa 2px;margin-left:5px;padding-left:5px;direction:ltr;margin-right:0px"><div dir="ltr"><div><div>Hi Saar,<br> </div>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.<br> </div>
<div>-- HT</div>
</div></blockquote></div><div class="m_6139560832557030812socmaildefaultfont" dir="ltr" style="font-family:Arial,Helvetica,sans-serif;font-size:10.5pt"><blockquote dir="ltr" style="border-left:solid #aaaaaa 2px;margin-left:5px;padding-left:5px;direction:ltr;margin-right:0px"><div dir="ltr"><div><div>On Fri, Nov 17, 2017 at 8:41 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:

</div></div></div></blockquote></div><div class="m_6139560832557030812socmaildefaultfont" dir="ltr" style="font-family:Arial,Helvetica,sans-serif;font-size:10.5pt"><blockquote dir="ltr" style="border-left:solid #aaaaaa 2px;margin-left:5px;padding-left:5px;direction:ltr;margin-right:0px"><div dir="ltr"><div><div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><span>On 17 November 2017 at 16:24, Saar Raz via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:</span>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div dir="ltr"><span>Hi all,</span>
<div> 
<div><span>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.</span></div>
<div> </div>
<div><span>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.</span></div>
<div> </div>
<div><span>I believe we should <b>go ahead and implement P0734R0 now </b>for the following reasons:</span></div>
<div><span> - <a href="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=" target="_blank">P0734R0</a> hasn't yet been implemented in any compiler (excluding GCC which implements a different proposal), and furthermore <b>no Concepts implementation was made from specification</b> - 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.</span></div>
<div><span>- to be honest, it is<b> really not that hard </b>to implement, and can, I believe, be done in a month or two.</span></div>
<div><span>- 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<b> which would not break existing code</b> 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.</span></div>
<div> </div>
<div><span>I took a look at the relevant code and the proposal and hereby propose<b> a roadmap for implementing </b>Concepts in clang as it stands today: <a href="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=" target="_blank">https://github.com/saarraz/clang-concepts-roadmap</a></span></div>
<div><span>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.</span></div></div></div></div></div></blockquote>
<div> </div>
<div>Thank you for your analysis and the offer to help out!</div>
<div> </div>
<div>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.</div>
<div> </div>
<div>Your roadmap looks to be in good shape. I have a few suggestions:</div>
<div> </div>
<div>* 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.</div>
<div> </div>
<div>* Consider how constraint normalization and subsumption checking will fit into the system. These are probably the two biggest pieces to design and implement.</div>
<div> </div>
<div>* 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.</div>
<div> </div>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div dir="ltr"><div><div><span>Please tell me what you think and post issues/pull requests to the roadmap repo or post here.</span></div>
<div><span>I'd really like to see this get going.</span></div>
<div> </div>
<div><span>Thanks!</span></div></div></div>
<div dir="ltr"><div><span><span><font color="#888888">Saar</font></span></span></div></div></div></div><br>_______________________________________________<br>cfe-dev mailing list<br><a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br><a href="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=" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br> </blockquote></div></div></div></blockquote></div></div></div></blockquote></div></blockquote></div>