Lambda2

Review Dates: March 22, 2021 - March 31, 2021

Accepted: 4
Conditional Accepted: 1
Reject: 1
Accepted

There was initially a single reject, but was later changed to Conditional Accept with the condition that:

  • Lambda2 provides its own placeholders instead of importing the standard ones.

The review discussion touched on these pros and cons:

Pros:

  • It's simple, clean, and elegant.
  • lightweight, single header dependency
  • Involves less typing

Cons:

  • lambda and phoenix library have much larger functionality
  • For complex lambda expressions, native C++ lambdas are more "future-proof" than boost::lambda2 expressions because you have the full range of the language available.
  • Having to write using-declarations for each operator in each scope that they are intended to be used defeats the purpose.

In the end, the pros outweighed the cons.

There was also the concern that boost::lambda2 does not and cannot do short-circuiting of the && and || operators. I suggest writing a rationale and make it clear in the documentation. I think this is a major flaw.

But the most glaring issue has to do with ADL: That Boost.Lambda2 defines the operators that should belong to namespace std::placeholders. Hence, the condition that Lambda2 provides its own placeholders instead of importing the standard ones.

There were also a couple of suggested improvements. I'll leave that up to Peter to decide whether to implement or not, since these suggestions are not conditions for acceptance.

Again, thank you very much everyone, and thank you Peter for submitting this splendid library.

Regards,
Joel

Pending

The Boost formal review of the Lambda2, authored by Peter Dimov, starts Monday, March 22, 2021 to March 31, 2021 (inclusive).

Documentation: https://pdimov.github.io/lambda2/doc/html/lambda2.html
Source: https://github.com/pdimov/lambda2/

Lambda2 is a simple, but functional, C++14 lambda library. It takes advantage of the fact that the standard  header already provides placeholders _1, _2, _3, and so on, for use with std::bind, and function objects such as std::plus, std::greater, std::logical_not, and std::bit_xor, corresponding to arithmetic, relational, logical and bitwise operators.

Please provide in your review information you think is valuable to understand your choice to ACCEPT or REJECT including Lambda2 as a Boost library. Please be explicit about your decision (ACCEPT or REJECT).

Some other questions you might want to consider answering:

  • What is your evaluation of the design?
  • What is your evaluation of the implementation?
  • What is your evaluation of the documentation?
  • What is your evaluation of the potential usefulness of the library?
  • Did you try to use the library? With which compiler(s)? Did you have any problems?
  • How much effort did you put into your evaluation? A glance? A quick reading? In-depth study?
  • Are you knowledgeable about the problem domain?

More information about the Boost Formal Review Process can be found at http://www.boost.org/reviews

The review is open to anyone who is prepared to put in the work of evaluating and reviewing the library. Prior experience in contributing to Boost reviews is not a requirement.

Thank you for your efforts in the Boost community. They are very much appreciated.

Peter is often available in the CppLang Slack #boost channel should you require any clarification not covered by the documentation. I am not frequently available in the Slack channel, but I'll certainly pay attention to the discussions. Please don't hesitate to ping me if needed.

Cheers,
Joel de Guzman