[Bug 2357569] New: Review Request: rx-ranges - Simpler ranges for C++17

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



https://bugzilla.redhat.com/show_bug.cgi?id=2357569

            Bug ID: 2357569
           Summary: Review Request: rx-ranges - Simpler ranges for C++17
           Product: Fedora
           Version: rawhide
          Hardware: All
                OS: Linux
            Status: NEW
         Component: Package Review
          Severity: medium
          Priority: medium
          Assignee: nobody@xxxxxxxxxxxxxxxxx
          Reporter: loganjerry@xxxxxxxxx
        QA Contact: extras-qa@xxxxxxxxxxxxxxxxx
                CC: package-review@xxxxxxxxxxxxxxxxxxxxxxx
  Target Milestone: ---
    Classification: Fedora



Spec URL: https://jjames.fedorapeople.org/rx-ranges/rx-ranges.spec
SRPM URL:
https://jjames.fedorapeople.org/rx-ranges/rx-ranges-2.0.0-1.fc43.src.rpm
Fedora Account System Username: jjames
Description: This is a ranges-like library for C++17 that provides
zero-overhead list comprehensions with a pipe-like syntax.

Standard containers can be filtered, transformed, passed through various
algorithms, optimizing to loops that would not be more efficient if written by
hand.

The goal is to provide the tools to write more readable loops, where the intent
of the programmer is clearly communicated to the reader.  Mentally simulating
loops is a common but error-prone part of reading other people's code, and
indeed your own code from 3 months ago.

The library makes heavy use of modern C++17 features, so a compliant C++17
compiler is required.

Features:
- Arbitrary composability.
- Constexpr-friendly.
- No unnecessary temporary heap allocations (`foo | sort() | to_vector()` only
allocates into the resulting container).
- Heap allocation minimization: `reserve()` is used on resulting containers,
when possible.
- Open-ended generators (non-terminating, infinite ranges).
- Re-entrancy: A non-rvalue range can be used multiple times in a function.
- Compatible with standard containers (anything that supports `std::begin()`
and `std::end()`).
- Compatible with standard algorithms (implicit conversion to iterator-like
objects).
- Simple extensibility with custom range adapters. Just implement the
`InputRange` faux-concept.
- Non-intrusive `operator|`. The ranges `foo | bar | baz` can be expressed as
`baz(bar(foo))`, if using `operator|` would introduce ambiguous overloads.
- No dependencies beyond the standard library.
- Integration with foreign codebases (override hooks for `std::optional`,
`std::remove_cvref_t`, assertions, etc.). Can easily be used as a submodule.
- Compiler support for all major compilers (GCC, Clang, MSVC).
- Zero-overhead, compared to manually written loops in optimized builds.
- Header-only, and single-header.

Other than usability concerns, these are the main differences from C++20
ranges:
- Bidirectional ranges.  Ranges can only be consumed linearly in the forward
direction.
- Random-access ranges.  Ranges can only be consumed linearly in the forward
direction.
- Internally using iterators.  The internal iteration objects are modeled with
an "enumerator" concept instead (objects that provide `next()`, `get()`,
`at_end()`, etc.), which simplifies custom extensions.  Implicit, zero-overhead
conversion to iterators is provided for compatibility with standard algorithms
and the range-based for loop syntax.
- Direct access to the data of underlying contiguous ranges (`data()` etc.).


-- 
You are receiving this mail because:
You are always notified about changes to this product and component
You are on the CC list for the bug.
https://bugzilla.redhat.com/show_bug.cgi?id=2357569

Report this comment as SPAM: https://bugzilla.redhat.com/enter_bug.cgi?product=Bugzilla&format=report-spam&short_desc=Report%20of%20Bug%202357569%23c0

-- 
_______________________________________________
package-review mailing list -- package-review@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to package-review-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/package-review@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue




[Index of Archives]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite Conditions]     [KDE Users]

  Powered by Linux