Implements parts of:
- P0898R3 Standard Library Concepts
- P1754 Rename concepts to standard_case for C++20, while we still can
Differential D91004
[libc++] Implements concept destructible Mordante on Nov 7 2020, 8:26 AM. Authored by
Details
Implements parts of:
Diff Detail Event TimelineComment Actions LGTM If there is another earnest push for concepts / ranges we should get together with @cjdb, @ldionne to see whether we find a way to not step on our toes and duplicate work. Also I note that the bottleneck has always been getting everything reviewed. NOTE: I am not a maintainer so wait for one before you commit
Comment Actions Thanks for the review!
Well I'd love to get ranges available in libc++, so I'm quite motivated to work on them. Of course it would be great if others want to join the effort since it's not a small feature. @cjdb, @ldionne are you currently working on concepts/ranges or willing to join the effort?
Comment Actions
Yeah, I've got a few open patches: I'd actually been hoping to merge my ranges library since ~March, but reviews are a major blocker and so I've put it on hold for now. Once @ldionne has the time to review, I'll resume contributing.
Comment Actions I had a quick look at the library and it seems rather complete. Is it complete or are there still pieces missing?
Comment Actions I'd like to address the issue of reviews, because it has been on my mind for some time. I'm fully aware that reviews are a huge bottleneck and a source of frustration. I actually think that's the #1 problem that libc++ is facing these days, and has been for a while. I try to do my best to review upstream contributions, however the truth is that with me as the only full-time maintainer nowadays, it would be unrealistic to think that everything can be reviewed, let alone reviewed in a timely fashion. My job includes working on specific libc++ related projects (usually driven by internal priorities), and reviewing upstream contributions or even implementing new C++ features is unfortunately just a part of that. I'm trying not to rant -- I just want to explain how my time is spent on libc++ and why not 100% of it is devoted to implementing the Standard or reviewing patches. One of the problems with contributing to libc++ is that there has been a very very high bar to doing so, and that's why maintainers have had to be involved in every change. There's a lot of configuration options, ways to build, guarantees that we provide to vendors and users, and specific knowledge around the libc++ test suite, infrastructure and conventions. I've been working really hard on lowering these barriers because I personally see them as the root cause of the problem:
So, if you'd like to pursue a major effort like concepts or ranges, that's absolutely awesome. Unfortunately, being gated on my in-depth review is just not going to work if we want to make progress at a reasonable pace. What I would suggest is to setup some kind of working group with interested individuals (it looks like we already have some subscribed to this review). You can then iterate on patches between yourselves without involving the maintainers. Of course, if you have specific questions, ping me and I'll help out. I'll also add you to our Slack channel so we can communicate easily with minimal overhead. Then, once CI is passing and everything looks alright, let me know and I'll take a brief look at whether things look okay from the libc++ side of things. I won't review the code itself in depth because I don't have the bandwidth, but I trust you folks with that. I might catch a few deviations from libc++isms, in which case I'll let you know and we can fix those. As we go, we can also create some sort of CONTRIBUTING.md document with a checklist of things to think about. I'm sure that would go a long way. I really want to create a sane and efficient contribution culture around libc++, and I think it's necessary for the project to be successful. How does that sound?
Comment Actions <snip>
Thanks for the verbose explanation! I like your proposal. Comment Actions One last ask for @ldionne, currently MSVC`s internal test runner seems to require int main() even in compile only tests, as it not yet understands compileonly tests. For the sake ofcompatibility could we for now include int main() {} to enable cross vendor compatibility. I would be happy to clean that up once it MSVC fixes their side Comment Actions I can add the following to the test if that help the MSVC team: // Required for MSVC internal test runner compatibility. int main(int, char**) { return 0; } Comment Actions @ldionne the patch passes the CI build and I addressed all previous review comments. When you have time can you have a look? Comment Actions LGTM. Feel free to commit after fixing the minor comments.
Comment Actions Thanks for the review. I'll address your comments and run a CI build before landing this revision. Comment Actions
|
If this is a compile-time only test, you can use the .compile.pass.cpp extension instead. This will only compile the test, not run it, which can yield significant speed ups when running the test suite on slow environments like some embedded targets.
You don't even need a main() in that case.