[Boost] [Describe] Summary Review Summary
Boost Describe Review Summary
Boost Describe was submitted by Peter Dimov. The review period lasted from
1st March 2021 until 10th March 2021, inclusive.
Overall Verdict
Boost.Describe has been accepted into Boost.
Detailed Results
In all, 13 people submitted reviews.
Of these 13, 11 reviews were an unconditional ACCEPT.
The remaining two reviews were marked CONDITIONAL ACCEPT.
This seems to be common practice, as committing firmly to accept or reject
can seem like a bold position either way. However the Boost review process
has no provision for attaching conditions to library acceptance. The
verdict must be either that the library is sufficiently well written and
documented, as well as providing sufficient utility, to be included in the
Boost offering, or it is not.
Conditional Acceptances
In this review I counted the two remaining conditional acceptances as
ACCEPT, and decided to pass the conditions as comments/suggestions on to
the author for consideration, as well as enumerate them in this report in
the hope that further study/debate is stimulated.
Libraries evolve over time, and the comments will no doubt be useful to
Peter when making future decisions about Boost.Describe.
I will deal with the conditions mentioned by Julain Blanc first.
Julian’s concerns centered around the fact that the bitfield supplied to
the describe_members macro is not additive. I will quote his example here.
Given the following code:
struct C {
int a;
std::string b;
double c;
void f(float a, int b) {
}
void g() {
}
static void s() {}
private:
int p_;
void h_(std::string const& s) {}
BOOST_DESCRIBE_CLASS(C, (), (a, b, c, f, g, s), (), (p_, h_))
};
I would expect the following:
static_assert(mp_size
Richard Hodges wrote:
Maximilian Riemensberger wondered whether it would be possible to support reference members and overloaded functions. Peter’s response was that alas, no. The language itself is a limiting factor there.
I'm looking into adding support for overloaded functions. I also already made the following changes in response to review feedback: * Increased internal limit of PP_FOR_EACH, which applied to the number of enumerators, bases, and members, from 24 to 52; * Added detection of protected bases; * Removed BOOST_DESCRIBE_ENUM_CLASS; * Added internal (undocumented) macros BOOST_DESCRIBE_ENUM_BEGIN, BOOST_DESCRIBE_ENUM_ENTRY, BOOST_DESCRIBE_ENUM_END; * Added a `boost` prefix to internal descriptor functions; * Fixed error with classes named `D`; * Fixed handling of empty enums; * Allowed a trailing comma in the enumerator list; * g++ 5/6/7 with -std=c++14 are now supported; * Documentation code snippets are now syntax-highlighted. Thanks to everyone involved.
Le lundi 15 mars 2021 à 19:50 +0200, Peter Dimov via Boost a écrit :
I'm looking into adding support for overloaded functions.
I also already made the following changes in response to review feedback:
* Removed BOOST_DESCRIBE_ENUM_CLASS;
I'd rather you did *not* make that specific change. I find it useful and convenient (i will end up copying it into an own header, and i expect a lot of users to do the same). There is maybe some room for an "extra" header, which would contain additional features that a lot of users will find useful, but which are not strictly speaking part of the core library. String to enum and enum to string conversion could also fit this (i failed to notice it during the review, but i later realized they can be provided in terms of c++17 to_chars / from_chars API – i wrote a working POC that i'll happily PR once polished a bit). Regards, Julien
Julien Blanc wrote:
* Removed BOOST_DESCRIBE_ENUM_CLASS;
I'd rather you did *not* make that specific change. I find it useful and convenient (i will end up copying it into an own header, and i expect a lot of users to do the same).
Not sure if we understand one another here; the reason I removed BOOST_DESCRIBE_ENUM_CLASS was that, as pointed out by reviewers, the same macro can work for both scoped and unscoped enums. So I made BOOST_DESCRIBE_ENUM work for both, and removed the other one, which was now redundant. BOOST_DEFINE_ENUM_CLASS is still there.
Le lundi 15 mars 2021 à 20:11 +0200, Peter Dimov a écrit :
Julien Blanc wrote:
* Removed BOOST_DESCRIBE_ENUM_CLASS;
I'd rather you did *not* make that specific change. I find it useful and convenient (i will end up copying it into an own header, and i expect a lot of users to do the same).
Not sure if we understand one another here; the reason I removed BOOST_DESCRIBE_ENUM_CLASS was that, as pointed out by reviewers, the same macro can work for both scoped and unscoped enums. So I made BOOST_DESCRIBE_ENUM work for both, and removed the other one, which was now redundant.
BOOST_DEFINE_ENUM_CLASS is still there.
Yes, definitely misunderstood you. Sorry for the noise, thanks for the clarification. Regards, Julien
I also already made the following changes in response to review feedback: Thanks a lot for taking the suggestions to heart * Increased internal limit of PP_FOR_EACH, which applied to the number of enumerators, bases, and members, from 24 to 52; Just did a quick check on a codebase where I'd use this: The largest enum has about 65 enumerators -.- I checked Boost.Preprocessor and there the default limit for BOOST_PP_FOR seems to be 256 (BTW: Why wasn't Boost.PP used?). Maybe 128 would be a good value for Describe? * Added internal (undocumented) macros BOOST_DESCRIBE_ENUM_BEGIN, BOOST_DESCRIBE_ENUM_ENTRY, BOOST_DESCRIBE_ENUM_END; Any chance for naming them a bit differently and/or adding inline-documentation to the non-internal macros? I see people like me checking the header instead of reading the docs and wondering about those. Besides that I like the change, looks much clearer now
On Mon, Mar 15, 2021 at 9:49 AM Richard Hodges via Boost
...the Boost review process has no provision for attaching conditions to library acceptance.
The review manager is free to impose conditions for acceptance. I'm not saying that it is called for in this particular case, merely pointing out that it is possible. Thanks
On 3/15/21 9:48 AM, Richard Hodges via Boost wrote:
Boost Describe Review Summary
Very good summary. Thanks for investing the effort to be review manager. This job is the backbone of Boost and I'm sure a lot more effort that it would first appear. I do have a minor nit to point out.
The remaining two reviews were marked CONDITIONAL ACCEPT.
This seems to be common practice, as committing firmly to accept or reject can seem like a bold position either way. However the Boost review process has no provision for attaching conditions to library acceptance. The verdict must be either that the library is sufficiently well written and documented, as well as providing sufficient utility, to be included in the Boost offering, or it is not. Conditional Acceptances
I see the review manager's job as having wide latitude. That is, I see the review manager having the authority to do any of the following. a) consider CONDITIONAL as "reject" b) consider CONDITIONAL as "accept" c) consider CONDITIONAL as "accept" if the author agrees to make changes, "reject" otherwise. The actual number of "votes" is not relevant. The review manager treats these as recommendations - but the final decision is his and his alone. So he can interpret each "CONDITIONAL" in any way he things is most useful and/or appropriate. I see him having the authority to "negotiate" with the author to implement changes in exchange for acceptance. To me, this is a fascinating thing about Boost. It's blatantly undemocratic. There is no one man/one vote here! It is the essence meritocracy. There is not reverence for democracy for it's own sake. But still it attempts to cast a wide net in getting varied input for library acceptance. It's out of sync with the times - and I think that is the (not so) secret to it's success. Exercise for the reader:Contrast the Boost procedures for achieving approval with that of the C++ committee. What does this teach us - if anything? Robert Ramey
On Mon, 15 Mar 2021 at 19:54, Robert Ramey via Boost
On 3/15/21 9:48 AM, Richard Hodges via Boost wrote:
Boost Describe Review Summary
Exercise for the reader:Contrast the Boost procedures for achieving approval with that of the C++ committee. What does this teach us - if anything?
Thank you Robert. I have taken your clarification to heart. It will no doubt be useful in the upcoming review of Boost.MySQL, which is likely to be _a lot more controversial_. I do understand that not all votes have equal weight. I was careful to judge the reasoning behind the stated conditions, and took note of the back-and-forth on the list during the ten days. I fully agree with regard to the committee. It has been nothing but a cause of frustration and anger for the community of developers who actually use C++ to get work done. I have the strong impression that very few on the committee ever produce anything of strategic value for their employers.
Robert Ramey
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- Richard Hodges hodges.r@gmail.com office: +442032898513 home: +376841522 mobile: +376380212
On 3/15/21 12:01 PM, Richard Hodges via Boost wrote:
I fully agree with regard to the committee. It has been nothing but a cause of frustration and anger for the community of developers who actually use C++ to get work done. I have the strong impression that very few on the committee ever produce anything of strategic value for their employers.
LOL - I didn't mean to be critical of the committee. I merely wanted to encourage people to think about the differences between how the commitee address their problem with how boost address a somewhat similar problem. It's very interesting to me that such similar problems have such differing approaches to their solution. It's also fascinating to me how approaches other than the default - consensus via majority rule - often leads to better results. I'm very curious about the genesis of the Boost review process. I'd like to see someone who knows about this write something up (naming names!) for the web site documenting this for posterity. Where are the boost equivalent of "federalist papers"? As to the committee, I've been critical of the process to the point of snarkyness. I'm trying to diminish that as I get older. But I think a lot of people feel that the Committee needs to evolve in some way to be more effective. Of course we have to agree on what that way is - and ... Robert Ramey
On 15/03/2021 19:01, Richard Hodges via Boost wrote:
I fully agree with regard to the committee. It has been nothing but a cause of frustration and anger for the community of developers who actually use C++ to get work done. I have the strong impression that very few on the committee ever produce anything of strategic value for their employers.
This is about as categorically untrue as any statement could be. As a general rule, those who regularly attend WG21 meetings are responsible for enterprise level software, having in large part contributed to the design, implementation, and maintenance of those mission critical systems. Think the libraries and services which underpin the whole functioning and being of Facebook, Google, Apple, Microsoft and so on, which hundreds of thousands of developers in those orgs use daily, and which generate billions of dollars annually in profits, either through cost reductions/efficiency savings, or by direct generation of value. There are large variations in opinion, yes, and reaching consensus always leaves everybody unsatisfied by definition. There is also often frustration that what is being standardised is very far from what everybody would prefer, but the committee standardises what is presented, not what it would have if there were infinite resources. Most of the perceived shortcomings with how the sausage is minced is mainly due to lack of funding of ecosystemic and public goods and services such as a package manager. That WG21 literally does not have the power to change, yet is typically blamed for, which is unfair. Niall
On Mon, Mar 15, 2021 at 1:21 PM Niall Douglas via Boost < boost@lists.boost.org> wrote:
On 15/03/2021 19:01, Richard Hodges via Boost wrote:
I fully agree with regard to the committee. It has been nothing but a cause of frustration and anger for the community of developers who actually use C++ to get work done. I have the strong impression that very few on the committee ever produce anything of strategic value for their employers.
This is about as categorically untrue as any statement could be.
As a general rule, those who regularly attend WG21 meetings are responsible for enterprise level software, having in large part contributed to the design, implementation, and maintenance of those mission critical systems.
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already. The only thing they should be doing is rubber-stamping libraries that are already the standard for doing something. Instead, it's like a giant tube for force feeding us what we don't want (or else we would have adopted it already). For our own good of course.
On 15.03.21 22:37, Emil Dotchevski via Boost wrote:
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
That's just bullshit. Right or wrong, good or bad, there are plenty of reasons for pushing for a library addition without waiting for a third-party library to establish itself as a de facto standard that have nothing to do with politics. For example: - There is a profusion of different libraries solving this problem, none of them individually popular enough individually to become a de facto standard. These libraries cannot talk to each other, splintering the community. - To proactively prevent the situation outlined above before it happens. - There is a clear need for a library, but the community has not yet produced such a library. - There is a clear need for a library, but the community /cannot/ produce such a library because it requires compiler support. Even if you think that all of these reasons are bad reasons, you should still acknowledge that they may have good intentions behind them and that they are not necessarily politically motivated.
The only thing they should be doing is rubber-stamping libraries that are already the standard for doing something. Instead, it's like a giant tube for force feeding us what we don't want (or else we would have adopted it already). For our own good of course.
If a library is already an established de facto standard, then there's little point in adding it to the C++ Standard, and a good reason for not doing so: it splinters the community, which is the opposite of what a standard should do. Example: I use Boost.Filesystem. I like Boost.Filesystem. Then std::filesystem shows up. Now I have to choose between Boost.Filesystem and std::filesystem. Boost.Filesystem is probably ahead in terms of features, but std::filesystem is the standard. Regardless of which one I pick, I may run into problems interfacing with third-party libraries that use the other one. -- Rainer Deyke (rainerd@eldwood.com)
On Tue, Mar 16, 2021 at 5:47 AM Rainer Deyke via Boost < boost@lists.boost.org> wrote:
On 15.03.21 22:37, Emil Dotchevski via Boost wrote:
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there
would
be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
That's just bullshit. Right or wrong, good or bad, there are plenty of reasons for pushing for a library addition without waiting for a third-party library to establish itself as a de facto standard that have nothing to do with politics. For example: - There is a profusion of different libraries solving this problem, none of them individually popular enough individually to become a de facto standard. These libraries cannot talk to each other, splintering the community.
"Splintering the community" simply means that there is not yet a standard way for doing something. Either all the available libraries have issues, or the problem being solved has multiple valid solutions. In the former case, develop a library that works better than the rest. In the latter case, the fact that no standard emerges is a good thing -- adding yet another way for doing something benefits nobody.
- There is a clear need for a library, but the community has not yet produced such a library.
Oxymoron.
- There is a clear need for a library, but the community /cannot/ produce such a library because it requires compiler support.
Yes, I agree that things that require a language change or even an ABI change are different. We can discuss that too, but my point is limited to libraries.
Even if you think that all of these reasons are bad reasons, you should still acknowledge that they may have good intentions behind them and that they are not necessarily politically motivated.
I'm not interested in discussing the authors' motivation, that is irrelevant. When I mentioned politics, I meant that there are politics involved in the decision making process in the committee, not that the politics are motivating anyone.
The only thing they should be doing is rubber-stamping libraries that are already the standard for doing something. Instead, it's like a giant tube for force feeding us what we don't want (or else we would have adopted it already). For our own good of course.
If a library is already an established de facto standard, then there's little point in adding it to the C++ Standard, and a good reason for not doing so: it splinters the community, which is the opposite of what a standard should do.
If the members of the committee think they can contribute a good library, put it on github. If it is a clear improvement over libraries produced by less qualified authors, people will pick it up, if not, not. Or, put it in Boost, that makes the library easily accessible on any system which -- to your point -- may reduce the benefit of standardization.
On 16.03.21 23:42, Emil Dotchevski via Boost wrote:
"Splintering the community" simply means that there is not yet a standard way for doing something. Either all the available libraries have issues, or the problem being solved has multiple valid solutions. In the former case, develop a library that works better than the rest. In the latter case, the fact that no standard emerges is a good thing -- adding yet another way for doing something benefits nobody.
Or all of the libraries are functionally identical, and the main reason for choosing one over the other is compatibility with other third-party libraries.
I'm not interested in discussing the authors' motivation, that is irrelevant. When I mentioned politics, I meant that there are politics involved in the decision making process in the committee, not that the politics are motivating anyone.
The statement to which I was responding was this:
On 15.03.21 22:37, Emil Dotchevski via Boost wrote:
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
This is very much talking about the motivation (or "concern") of the committee. Criticize the processes, policies, priorities, and results of the committee all you want. But if you actually want to convince people on the committee of your point of view, you're going to have to present a stronger argument than "if you don't do it my way, you've been corrupted by politics." -- Rainer Deyke (rainerd@eldwood.com)
On Wed, Mar 17, 2021 at 6:24 AM Rainer Deyke via Boost < boost@lists.boost.org> wrote:
The statement to which I was responding was this:
On 15.03.21 22:37, Emil Dotchevski via Boost wrote:
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
This is very much talking about the motivation (or "concern") of the committee.
Yes, I said "concern" not "motivation". If your goal is standardization, convincing the users is utterly irrelevant to success. Worse, it is a lose-lose proposition, you might get one and a half stars on GitHub which doesn't look too good. I remember Niall giving (good) advice that if the goal is standardization, it is best to not bother with a Boost review, either: it adds a lot more work that is irrelevant to achieving your goal, plus you risk rejection which doesn't look too good. As for convincing the committee, I don't think that's possible from the outside, much less on this platform.
On 17/03/2021 18:02, Emil Dotchevski via Boost wrote:
If your goal is standardization, convincing the users is utterly irrelevant to success. Worse, it is a lose-lose proposition, you might get one and a half stars on GitHub which doesn't look too good. I remember Niall giving (good) advice that if the goal is standardization, it is best to not bother with a Boost review, either: it adds a lot more work that is irrelevant to achieving your goal, plus you risk rejection which doesn't look too good.
That's not _quite_ what I advised, though it is close. My advice was, and always has been, that the most valuable aspect of Boost _to the library_ and its author is the peer review. A high quality review is quite literally priceless - it cannot be bought for money. It's why I get so annoyed when some proposers only care about getting into Boost at all costs, that the review is only a hurdle which can be beaten down using groupies, which feels to me an enormous wasted opportunity to make the best C++ libraries possible. In this aspect, Boost has been very good for me. Both of the libraries I presented to Boost - AFIO and Outcome - both were completely reimplemented and completely redesigned from the feedback received here. I personally believe that the reason why WG21 has to date liked my libraries so much is precisely because of those Boost reviews. So thank you Boost! What you may be remembering me saying Emil is that once you get the review from Boost, the incentive to finish the library and get it into Boost is low if your goal is standardisation. You can skip rewriting all that documentation and tutorials and examples and having to deal with real end users for the next two decades if you go straight from Boost review to WG21 standards, skipping finishing your library sufficient for Boost. Given the plethora of C++ package managers today including github, Boost as a distribution vehicle is nothing like as important as it once was, so all in all, the value added from shipping in Boost is a fraction of what it was fifteen or twenty years ago. I skipped Boost and went straight to WG21 with LLFIO, and I feel very guilty about it. I did do the honourable thing for Outcome however. And I'll never, ever, get another library into Boost again unless someone is paying me to do it. Once is enough.
As for convincing the committee, I don't think that's possible from the outside, much less on this platform.
Most of the senior committee skim reads this mailing list. Most read the review manager summaries of new libraries in detail. Most of the big names are here, watching. Just because they never, or very rarely, post here doesn't mean they aren't reading. I can definitely assure you that what goes here changes opinions and persuades people on WG21. On many occasions I have discussed things happening here at WG21 meetings. You all here just never see it, that's all. Niall
On 3/18/2021 12:07 PM, Niall Douglas via Boost wrote:
On 17/03/2021 18:02, Emil Dotchevski via Boost wrote:
If your goal is standardization, convincing the users is utterly irrelevant to success. Worse, it is a lose-lose proposition, you might get one and a half stars on GitHub which doesn't look too good. I remember Niall giving (good) advice that if the goal is standardization, it is best to not bother with a Boost review, either: it adds a lot more work that is irrelevant to achieving your goal, plus you risk rejection which doesn't look too good.
That's not _quite_ what I advised, though it is close.
My advice was, and always has been, that the most valuable aspect of Boost _to the library_ and its author is the peer review. A high quality review is quite literally priceless - it cannot be bought for money. It's why I get so annoyed when some proposers only care about getting into Boost at all costs, that the review is only a hurdle which can be beaten down using groupies, which feels to me an enormous wasted opportunity to make the best C++ libraries possible.
In this aspect, Boost has been very good for me. Both of the libraries I presented to Boost - AFIO and Outcome - both were completely reimplemented and completely redesigned from the feedback received here. I personally believe that the reason why WG21 has to date liked my libraries so much is precisely because of those Boost reviews. So thank you Boost!
What you may be remembering me saying Emil is that once you get the review from Boost, the incentive to finish the library and get it into Boost is low if your goal is standardisation. You can skip rewriting all that documentation and tutorials and examples and having to deal with real end users for the next two decades if you go straight from Boost review to WG21 standards, skipping finishing your library sufficient for Boost. Given the plethora of C++ package managers today including github, Boost as a distribution vehicle is nothing like as important as it once was, so all in all, the value added from shipping in Boost is a fraction of what it was fifteen or twenty years ago.
I skipped Boost and went straight to WG21 with LLFIO, and I feel very guilty about it. I did do the honourable thing for Outcome however. And I'll never, ever, get another library into Boost again unless someone is paying me to do it. Once is enough.
Was it really that bad, Niall ! You have already said that the review was very helpful. Most good C++ programmers probably view getting a library into Boost as an indication of their ability and also a great experience in hearing what their peers think. On the practical side getting a library into the C++ standard must be far more difficult than getting a library into Boost, so I do not think it is very practical for a programmer to think that some library he has developed is going to be accepted as part of the C++ standard, but it may be good enough to get into Boost. The focus here is very different from the C++ standards committee as far as libraries are concerned, thank goodness. So despite your viewpoint I would be willing to bet that most C++ programmers find Boost much less onerous when it comes to library approval than the C++ standards committee. This is not meant to be a criticism of the C++ standards committee in any way. They are the custodians, if you will, of a computer language and their viewpoint as to what constitutes that language and its official software has to be stringent as far as large-scale usefulness is concerned.
On 3/18/2021 3:38 PM, Vinnie Falco via Boost wrote:
On Thu, Mar 18, 2021 at 11:05 AM Edward Diener via Boost
wrote: Most good C++ programmers probably view getting a library into Boost as an indication of their ability and also a great experience in hearing what their peers think.
Outcome got into Boost.
I did not say it had not, and I was not trying to imply in any way that Niall is not a good C++ programmer. I was just reacting to Niall's implying that it was such an onerous effort on his part that he would never want to try to get a library of his into Boost again. I acknowledge that doing all the work of trying to get a library into Boost my be daunting, but the effort is certainly worth it in IMO.
On Thu, Mar 18, 2021 at 9:08 AM Niall Douglas via Boost < boost@lists.boost.org> wrote:
On 17/03/2021 18:02, Emil Dotchevski via Boost wrote:
If your goal is standardization, convincing the users is utterly
irrelevant
to success. Worse, it is a lose-lose proposition, you might get one and a half stars on GitHub which doesn't look too good. I remember Niall giving (good) advice that if the goal is standardization, it is best to not bother with a Boost review, either: it adds a lot more work that is irrelevant to achieving your goal, plus you risk rejection which doesn't look too good.
That's not _quite_ what I advised, though it is close.
My advice was, and always has been, that the most valuable aspect of Boost _to the library_ and its author is the peer review. A high quality review is quite literally priceless - it cannot be bought for money.
I didn't mean to put you on the spot, and I still think your advice is sound if the goal is standardization, and as far as I remember it was predicated on that. Obviously peer review is great.
I skipped Boost and went straight to WG21 with LLFIO, and I feel very guilty about it.
You can always request a Boost Review. If successful, the library gets enormous distribution which may actually make it more accessible than waiting for it to arrive in STL.
On 15/03/2021 21:37, Emil Dotchevski wrote:
On Mon, Mar 15, 2021 at 1:21 PM Niall Douglas via Boost
mailto:boost@lists.boost.org> wrote: On 15/03/2021 19:01, Richard Hodges via Boost wrote:
I fully agree with regard to the committee. It has been nothing but a cause of frustration and anger for the community of developers who actually use C++ to get work done. I have the strong impression that very few on the committee ever produce anything of strategic value for their employers.
This is about as categorically untrue as any statement could be.
As a general rule, those who regularly attend WG21 meetings are responsible for enterprise level software, having in large part contributed to the design, implementation, and maintenance of those mission critical systems.
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
The only thing they should be doing is rubber-stamping libraries that are already the standard for doing something. Instead, it's like a giant tube for force feeding us what we don't want (or else we would have adopted it already). For our own good of course.
Most libraries presented for standardisation ARE battle hardened libraries. However they were typically written for preceding C++ standards, and in outdated idioms and design patterns, and require modernisation which can involve substantial refactoring. Something not appreciated outside the committee is that both the library proposer(s), and their experienced users, often also want substantial refactoring after their empirical experience. It makes sense to make use of that experience rather than ignoring it. I speak here of the typical case, which are all those libraries which get standardised with little fanfare nor notice, which is the vast majority. Only for a small, though highly visible, subset has there been substantial design by committee. A lot of that is due to my aforementioned explanations, which are not due to politics, but rather resourcing (or lack thereof). Niall
On Tue, Mar 16, 2021 at 6:17 AM Niall Douglas wrote:
Something not appreciated outside the committee is that both the library proposer(s), and their experienced users, often also want substantial refactoring after their empirical experience.
Note that Richard Hodges is inside the committee (just in case that wasn't clear to anyone else). Glen
On 16/03/2021 12:52, Glen Fernandes wrote:
On Tue, Mar 16, 2021 at 6:17 AM Niall Douglas wrote:
Something not appreciated outside the committee is that both the library proposer(s), and their experienced users, often also want substantial refactoring after their empirical experience.
Note that Richard Hodges is inside the committee (just in case that wasn't clear to anyone else).
This is news to me. I don't recall reading any WG21 papers by him, nor seeing him at any WG21 committee meeting. I have only been attending myself for a few years, however, so maybe he predates me. I would be highly surprised if anybody who had regularly attended and contributed to other people's papers would have the opinions he has, most of which seem to duplicate the echo chambers in certain parts of Slack and Reddit and other self selecting engineering groups on the internet. Well informed criticism of WG21 is perfectly valid, and probably shared by most WG21 participants in fact. But uninformed criticism based on grievances is not. Niall
On Tue, Mar 16, 2021 at 10:53 AM Niall Douglas wrote:
On 16/03/2021 12:52, Glen Fernandes wrote:
On Tue, Mar 16, 2021 at 6:17 AM Niall Douglas wrote:
Something not appreciated outside the committee is that both the library proposer(s), and their experienced users, often also want substantial refactoring after their empirical experience.
Note that Richard Hodges is inside the committee (just in case that wasn't clear to anyone else).
This is news to me.
I don't recall reading any WG21 papers by him, nor seeing him at any WG21 committee meeting. I have only been attending myself for a few years, however, so maybe he predates me.
I would be highly surprised if anybody who had regularly attended and contributed to other people's papers would have the opinions he has, most of which seem to duplicate the echo chambers in certain parts of Slack and Reddit and other self selecting engineering groups on the internet. Well informed criticism of WG21 is perfectly valid, and probably shared by most WG21 participants in fact. But uninformed criticism based on grievances is not.
I'm not so surprised. I predate both of you and I have a different opinion to both of you. (Which I won't share here, because there's no value in censuring or praising the committee here). Glen Glen
Niall Douglas wrote:
Most libraries presented for standardisation ARE battle hardened libraries. However they were typically written for preceding C++ standards, and in outdated idioms and design patterns, and require modernisation which can involve substantial refactoring.
Maybe not most. It's no longer easy to give a single reason as to why the committee's output is what it is, as the submissions are of varying quality, philosophy, and origin; there's no single universal problem with them. Some of them come from big companies, are indeed totally battle-hardened, but reflect the monoculture of the company which does not correspond very well to the environment in which the median C++ programmer operates. Others are useful facilities in use in more than one relatively smaller company, battle-hardened, but pragmatic, prioritizing problem-solving over design elegance or avoidance of undefined behavior. And then we still have the "direct to video" libraries that haven't actually seen much practical use. In theory the committee should be that great place where people who value design elegance and lack of undefined behavior and specification imprecision meet the people who need to get their work done yesterday and the people who have a lot of experience with large scale deployment, but in a company culture that's not representative of the C++ community as a whole, and the end result is supposed to be the best of these worlds. But it isn't.
On 3/16/21 9:49 AM, Peter Dimov via Boost wrote:
Niall Douglas wrote:
Most libraries presented for standardisation ARE battle hardened libraries. However they were typically written for preceding C++ standards, and in outdated idioms and design patterns, and require modernisation which can involve substantial refactoring.
Maybe not most.
It's no longer easy to give a single reason as to why the committee's output is what it is, as the submissions are of varying quality, philosophy, and origin; there's no single universal problem with them.
Some of them come from big companies, are indeed totally battle-hardened, but reflect the monoculture of the company which does not correspond very well to the environment in which the median C++ programmer operates.
Others are useful facilities in use in more than one relatively smaller company, battle-hardened, but pragmatic, prioritizing problem-solving over design elegance or avoidance of undefined behavior.
And then we still have the "direct to video" libraries that haven't actually seen much practical use.
In theory the committee should be that great place where people who value design elegance and lack of undefined behavior and specification imprecision meet the people who need to get their work done yesterday and the people who have a lot of experience with large scale deployment, but in a company culture that's not representative of the C++ community as a whole, and the end result is supposed to be the best of these worlds.
But it isn't.
The idea that disappointment with the standards process more than one cause and different libraries disappoint for different reasons goes a long way to explain why we're having so much trouble suggesting improvements to the process. Robert Ramey
On Tue, Mar 16, 2021 at 3:17 AM Niall Douglas via Boost < boost@lists.boost.org> wrote:
Something not appreciated outside the committee is that both the library proposer(s), and their experienced users, often also want substantial refactoring after their empirical experience. It makes sense to make use of that experience rather than ignoring it.
You're saying that the committee is involved in careful and thoughtful innovation, which "we" should appreciate more. I'm saying that the committee should not innovate, it should merely observe the fact that a given library has established itself as the defacto standard in a given domain, then rubber-stamp it in the standard without changes.
On Mon, Mar 15, 2021 at 2:38 PM Emil Dotchevski via Boost < boost@lists.boost.org> wrote:
On Mon, Mar 15, 2021 at 1:21 PM Niall Douglas via Boost < boost@lists.boost.org> wrote:
On 15/03/2021 19:01, Richard Hodges via Boost wrote:
I fully agree with regard to the committee. It has been nothing but a cause of frustration and anger for the community of developers who actually use C++ to get work done. I have the strong impression that very few on the committee ever produce anything of strategic value for their employers.
Disagree completely.
This is about as categorically untrue as any statement could be.
As a general rule, those who regularly attend WG21 meetings are responsible for enterprise level software, having in large part contributed to the design, implementation, and maintenance of those mission critical systems.
It's a mix of different kinds of responsibilities and experiences. Many committee members are implementers of compilers, tools, and standard libraries -- as is necessarily the case. Of course many of the implementers are also users at some level -- just typically not the 'average application developer'. Many, many participants in this list regularly participate in WG21 -- it's not simple to describe the participants and their motivations. At my day job I write enterprise applications in c++ and have for decades. My participation in WG21 is completely self funded and on my own time -- as are many other committee members. Do I think more companies that are simply 'users of c++' should sponsor committee participation -- yes I do, but I'm not holding my breath.
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
Unlike the boost review where there's 'a decider', the committee uses consensus. It's a much higher bar, as frankly, it should be. If even 1/3 of the committee doesn't agree on something it's unlikely to move forward. As for battle hardened, sometimes it's not quite so simple as sometimes language changes are needed or vendor support is needed. Every proposal gets vetted for usage experience and it's clear that without experience it's unlikely to go forward. Is the process perfect -- no. Will it make everyone, even the members happy -- no. Can it be improved -- surely -- but like many things in life it's not as simple as we'd like.
The only thing they should be doing is rubber-stamping libraries that are already the standard for doing something.
And if we 'just did that', things like generic programming wouldn't exist in c++. If the 'Roque Wave' container design was adopted in 1998 the world would be very different now.
Instead, it's like a giant tube for force feeding us what we don't want (or else we would have adopted it already). For our own good of course.
My honest suggestion is if your country has a national body -- get to know them and express your opinions about proposals to them so they can be reflected. And if you want one of those 'battle hardened' libraries adopted, that's fine -- you don't have to be a member of the committee to propose it. It will help your odds to get someone experienced with process to help -- because there isn't a rubber stamp -- stuff is vetted. Jeff
On Wed, Mar 24, 2021 at 7:35 AM Jeff Garland via Boost < boost@lists.boost.org> wrote:
The committee seems to be concerned more with internal and external politics than with serving the community. If that wasn't true there would be ZERO library additions that haven't been battle hardened by being deployed and established themselves as the defacto standard already.
Unlike the boost review where there's 'a decider', the committee uses consensus. It's a much higher bar, as frankly, it should be.
A "much higher bar" can prevent a good library from being accepted or prevent a bad library from being rejected. That is, consensus cuts both ways.
As for battle hardened, sometimes it's not quite so simple as sometimes language changes are needed or vendor support is needed. Every proposal gets vetted for usage experience and it's clear that without experience it's unlikely to go forward. Is the process perfect -- no. Will it make everyone, even the members happy -- no. Can it be improved -- surely -- but like many things in life it's not as simple as we'd like.
We can talk about the case when language changes are needed but let's focus on libraries.
The only thing they should be doing is rubber-stamping libraries that are already the standard for doing something.
And if we 'just did that', things like generic programming wouldn't exist in c++. If the 'Roque Wave' container design was adopted in 1998 the world would be very different now.
There was no GitHub in 1998. Today it feels like some authors treat the standard library as a vehicle for making their library available everywhere in hopes it'll get adopted. All I'm saying is that adoption should come before standardization. Git pull requests are better than Subversion commits.
And if you want one of those 'battle hardened' libraries adopted, that's fine
You see, I think it is problematic to "want" to standardize a library. IMO the standardization process should be dull and boring, rather than driven by exciting innovation.
participants (12)
-
Alexander Grund
-
Edward Diener
-
Emil Dotchevski
-
Glen Fernandes
-
Jeff Garland
-
Julien Blanc
-
Niall Douglas
-
Peter Dimov
-
Rainer Deyke
-
Richard Hodges
-
Robert Ramey
-
Vinnie Falco