Skip to content

Commit 36f9a6c

Browse files
authored
Add beman.optional readme page with embed godbolt
1 parent 04904e7 commit 36f9a6c

3 files changed

Lines changed: 322 additions & 2 deletions

File tree

docs/libs/beman.optional/index.md

Lines changed: 294 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,294 @@
1+
# beman.optional: C++26 Extensions for std::optional
2+
3+
<!--
4+
SPDX-License-Identifier: 2.0 license with LLVM exceptions
5+
-->
6+
7+
import Godbolt from '@site/src/components/GenericFeatures/Godbolt.jsx'
8+
9+
10+
<!-- markdownlint-disable -->
11+
<img src="https://raw.githubusercontent.com/bemanproject/beman/refs/heads/main/images/logos/beman_logo-beman_library_production_ready_api_may_undergo_changes.png" width="5%" height="auto" /> ![CI Tests](https://github.com/bemanproject/optional/actions/workflows/ci.yml/badge.svg) [![Coverage](https://coveralls.io/repos/github/bemanproject/optional/badge.svg?branch=main)](https://coveralls.io/github/bemanproject/optional?branch=main)
12+
<!-- markdownlint-enable -->
13+
14+
This repository implements `std::optional` extensions targeting C++26. The `beman.optional` library aims to evaluate the stability, the usability, and the performance of these proposed changes before they are officially adopted by WG21 into the C++ Working Draft. Additionally, it allows developers to use these new features before they are implemented in major standard library compilers.
15+
16+
**Implements**: [Give *std::optional* Range Support (P3168R2)](https://wg21.link/P3168R2) and [`std::optional<T&>` (P2988R5)](https://wg21.link/P2988R5)
17+
18+
**Status**: [Production ready. API may undergo changes.](../../BEMAN_LIBRARY_MATURITY_MODEL.md#production-ready-api-may-undergo-changes)
19+
20+
## License
21+
22+
Source is licensed with the Apache 2.0 license with LLVM exceptions
23+
24+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
25+
26+
Documentation and associated papers are licensed with the Creative Commons Attribution 4.0 International license.
27+
28+
// SPDX-License-Identifier: CC-BY-4.0
29+
30+
The intent is that the source and documentation are available for use by people implementing their own optional types as well as people using the optional presented here as-is.
31+
32+
The README itself is licensed with CC0 1.0 Universal. Copy the contents and incorporate in your own work as you see fit.
33+
34+
// SPDX-License-Identifier: CC0-1.0
35+
36+
## Examples
37+
38+
Full runnable examples can be found in `examples/` - please check [./examples/README.md](https://github.com/bemanproject/optional/blob/main/examples/README.md).
39+
40+
### range_loop
41+
42+
The next code snippet shows optional range support added in [Give *std::optional* Range Support(P3168R2)](https://wg21.link/P3168R2):
43+
44+
```cpp
45+
#include <beman/optional/optional.hpp>
46+
...
47+
48+
beman::optional::optional<int> empty_opt{};
49+
for ([[maybe_unused]] const auto& i : empty_opt) {
50+
// Should not see this in console.
51+
std::cout << "\"for each loop\" over C++26 optional: empty_opt\n";
52+
}
53+
54+
beman::optional::optional<int> opt{26};
55+
for (const auto& i : opt) {
56+
// Should see this in console.
57+
std::cout << "\"for each loop\" over C++26 optional: opt = " << i << "\n";
58+
}
59+
```
60+
61+
Full code can be found in [./examples/range_loop.cpp](https://github.com/bemanproject/optional/blob/main/examples/range_loop.cpp). Build and run instructions in
62+
[./examples/README.md](https://github.com/bemanproject/optional/blob/main/examples/README.md). Or try it on Compiler Explorer:
63+
<Godbolt readOnly={false} url="https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,selection:(endColumn:76,endLineNumber:31,positionColumn:76,positionLineNumber:31,selectionStartColumn:76,selectionStartLineNumber:31,startColumn:76,startLineNumber:31),source:'//+examples/range_loop.cpp+-*-C%2B%2B-*-%0A//+SPDX-License-Identifier:+Apache-2.0+WITH+LLVM-exception%0A%0A%23include+%3Cbeman/optional/optional.hpp%3E%0A%23include+%3Ciostream%3E%0A%0Aint+main()+%7B%0A++++//+Example+from+P3168R1:+basic+range+loop+over+C%2B%2B26+optional.%0A%0A++++beman::optional::optional%3Cint%3E+empty_opt%7B%7D%3B%0A++++for+(%5B%5Bmaybe_unused%5D%5D+const+auto%26+i+:+empty_opt)+%7B%0A++++++++//+Should+not+see+this+in+console.%0A++++++++std::cout+%3C%3C+%22%5C%22for+each+loop%5C%22+over+C%2B%2B26+optional:+empty_opt%5Cn%22%3B%0A++++%7D%0A%0A++++beman::optional::optional%3Cint%3E+opt%7B__cplusplus%7D%3B%0A++++for+(const+auto%26+i+:+opt)+%7B%0A++++++++//+Should+see+this+in+console.%0A++++++++std::cout+%3C%3C+%22%5C%22for+each+loop%5C%22+over+C%2B%2B26+optional:+opt+%3D+%22+%3C%3C+i+%3C%3C+%22%5Cn%22%3B%0A++++%7D%0A%0A++++return+0%3B%0A%7D%0A%0A//+%23+build+example:%0A//+$+cmake+--workflow+--preset+gcc-14%0A//%0A//+%23+run+example:%0A//+$+.build/gcc-14/examples/RelWithDebInfo/range_loop%0A//++++++++++++++++++++++++++++++++++++++++++++++++%23+note:+1st+log+(empty_opt)+is+missing+from+console!!%0A//+%22for+each+loop%22+over+C%2B%2B26+optional:+opt+%3D+26++%23+2nd+log+(non+empty+opt)'),l:'5',n:'0',o:'C%2B%2B+source+%231',t:'0')),k:48.951858549461555,l:'4',m:50,n:'0',o:'',s:0,t:'0'),(g:!((h:executor,i:(argsPanelShown:'1',compilationPanelShown:'0',compiler:gsnapshot,compilerName:'',compilerOutShown:'0',execArgs:'',execStdin:'',fontScale:14,fontUsePx:'0',j:5,lang:c%2B%2B,libs:!((name:beman_optional,ver:trunk)),options:'-std%3Dc%2B%2B26',overrides:!(),runtimeTools:!(),source:1,stdinPanelShown:'1',wrap:'1'),l:'5',n:'0',o:'Executor+x86-64+gcc+(trunk)+(C%2B%2B,+Editor+%231)',t:'0')),header:(),k:100,l:'4',m:25,n:'0',o:'',s:0,t:'0'),(g:!((h:executor,i:(argsPanelShown:'1',compilationPanelShown:'0',compiler:clang_trunk,compilerName:'',compilerOutShown:'0',execArgs:'',execStdin:'',fontScale:14,fontUsePx:'0',j:6,lang:c%2B%2B,libs:!((name:beman_optional,ver:trunk)),options:'-std%3Dc%2B%2B26',overrides:!(),runtimeTools:!(),source:1,stdinPanelShown:'1',wrap:'1'),l:'5',n:'0',o:'Executor+x86-64+clang+(trunk)+(C%2B%2B,+Editor+%231)',t:'0')),header:(),k:99.99999999999999,l:'4',m:25,n:'0',o:'',s:0,t:'0')),k:100,l:'3',n:'0',o:'',t:'0')),version:4" />
64+
65+
### optional_ref
66+
67+
The next code snippet shows optional reference support added in [`std::optional<T&>`
68+
(P2988)](https://wg21.link/P2988):
69+
70+
```cpp
71+
#include <beman/optional/optional.hpp>
72+
...
73+
74+
struct Cat { ... };
75+
76+
beman::optional::optional<Cat&> find_cat(std::string) { return {}; }
77+
beman::optional::optional<Cat&> do_it(Cat& cat) { return { cat }; }
78+
79+
beman::optional::optional<Cat&> api() {
80+
beman::optional::optional<Cat&> cat = find_cat("Fido");
81+
return cat.and_then(do_it);
82+
}
83+
84+
beman::optional::optional<Cat&> cat = api();
85+
86+
```
87+
88+
Full code can be found in [./examples/optional_ref.cpp](https://github.com/bemanproject/optional/blob/main/examples/optional_ref.cpp). Build and run instructions in [./examples/README.md](https://github.com/bemanproject/optional/blob/main/examples/README.md). Or try it on Compiler Explorer:
89+
90+
<Godbolt url="https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGIAKwAbKSuADJ4DJgAcj4ARpjEAQCcpAAOqAqETgwe3r4BwemZjgLhkTEs8Yn%2BKXaYDtlCBEzEBLk%2BfkG2mPYlDE0tBGXRcQnJts2t7fldCpNDESOVYzUAlLaoXsTI7BwA9HsA1JiqrKn0CnuoqX1iAPrEmFQAdMipqYcAtABUn27W1h%2BnxMGgAggdDkJlAARAAan3COwYSk%2BAEksII8DQxodQakmMgEJhPmZnhpDgB1VEAFQAEodQqEAGoAWU%2BJx2N2yINBPPMAGYIshvFhDiZ%2BW54ixDFcuQIxLLbrRngh3uLsHywQKhSLMGKJXNiBFgOrNaDDV4HIc3EwCGKAOxWMGHF2HCJ20TNWioYB3CJYVQmR0aIPQ8VO3n2sP8iM85hsBT4naHOboLj2h2xsEQ5RGkiHIjWgGWMzBAtEw5oUUAd02tHQh29qAA1o28M29QQEHgFM8eRDFMbDsQmNXDul3QkFAXUMPMKlHkpBIdrkq51QEowdr3%2B0coqgCOxDoOjCnpa1x6hJ8Rp7WvPXDmIFLP4o/KwgrztSIdYl47YQ3QYAA3TwgMwadUGrSIb27D4lGlTFkB3LUwRtAhvkOGgGHQO5PQgVMQBAQ1jVWTM5wILYGEOBh71oG5iHDB0wxQ0E0Iw9BUD9AgIDQ8xAkrW1SKDCxyMosVS09RjQzNNjH1SPAICEx0eVda1bQwz19WhTD/Vw20IHMMwADE8A4wzVnDFTXSxQ4IE0sAwHFbSaNoOiCGIJSI1U1THgo4gqI4riIG%2BT0LJjKyXWk51XV8sSXLchjwq1KMzVDQ4IXjcCkz1VN0zNTLEwJHKCHQUtM13XEqEPYgi0sawyurQgEEOZQzCSAAOdqACV/G/Ls9SrPU7wfJtW1odtO27ZDwSOE9gEOfBHgcWgAE8VzlZhaBnOcF3Axg7VXbIxHXTcGG3PsWKlQxCMO%2BVaBujaxHFNxeNLdUdOwvTuIIoj3JIsjYv88qUpjJizSuvwQFuzaHqVZ7XsCd7AsIHjbT4gSCE80SgeEySQZEqLeTBCHYaO%2B6oce2h4bRt7%2BWwOSFM8iKf0wBDSbu9nNupgg%2BPezSnI%2BnC8MMkyzLMMwwq8mLMD8qjPWeQwcP6hgIGRzHLOS5iicjbSMtYLKipTEq3pY91DmlCJFPK6KXQhbBThYc49SoYhUBYFq2s6nqQHWtdHg3R4zswC7QVUkx/CsCPpRW%2BI7i8GilHQcOw38bTZO8jPM6z11PCF20tKNtN7UIph5MUjXQ9dcPI4saPY/jrxE%2BT5OWbZimlU5p6JQR97ImrL6C9TUsS7LyWzR8mWxJDJKdbNCEBR/Lw6AbE4znECqABJK2lDsvk%2BWtiGbKhvTHT5Pl2pQ7WAZBkE%2BKRdwqhfiHj44HadkBN8OZ5f2XvZr9vqQexV6OwuHsLqPQKRNWhJgWIqIGD8EVGTB4TwODrHuhwfwvA/AcC0KQVAnB/h1UsCmTY2w9QCh4KQAgmhUHrGbCASQ7VnhJH8Fwdq/h2GSCSJIQIXB/D8P0JwSQvAWABA0KQbBuD8EcF4AoEA4jqE4NQaQOAsAYCIBACceof4SDkEoC0YAChlCGB6EID8UFOCULQI7OgtpsjGMiLQMxkFJG8GsfJegiRDHMFSAoD8BBSDuLoAkKI%2BtOBuLdh4hIAB5P8ziLFKJCKoeooJiCGPCUk%2BoTR8DYN4PwQQIgxDsCkDIQQigVDqESboXqBgjAoGLDYcasQ5GwEyiACGdxoZiFIGBRI7l47NlWOsaGciOCfFTE5UwRCLCll4KgXpRosAtMUqQZ%2BmI2DUlQJ4ZZ6xnxbB2HoVMEQHGmPMdgyh1YRypEsco9BmCJE0LwZwe22iiA1VUO1QInxAiSEOP/Wy/SGCDNsoQqwlhvy4EIPmChqxeCKK0EM0gRImBYESCs%2Bh/hxHoOEaQURmKHmJOkbI%2BRVCaHrFURorRyAdFkAoBAAxRiTFOLOTcwJkTbF9BOcylxjygmeJQLU30gLmxspsZ40JbAMl8piXElliSqWpPSTIzJyBskRAyfk4QohxAlM1eUtQjzdDBEFfU6Z%2Bg8DNPgBANpHSum0B6WMYViKRmcHGSVSZDTZl4IWaZcC8B1hrMcBsrZtAdkbH2cUiYOSuXxPObwS5pcbloM4Pc1xTyOAvOpW8w4Hyvk/MrIKgFazgU8QaRC/A2aYVwrJesZFqLKDJo4DivF4i01EtsCS%2BFtDSD0K4BoLFnB%2BQiLEQSqRGSu2It7f2wRHAh2jrmeOmtDqbzZAYUAA" />
91+
92+
## How to Build
93+
94+
### Compiler Support
95+
96+
This is a modern C++ project which can be compiled with the latest C++ standards (**C++20 or later**).
97+
98+
Default build: `C++23`. Please check `etc/${compiler}-flags.cmake`.
99+
100+
### Dependencies
101+
102+
This project is mainly tested on `Ubuntu 22.04` and `Ubuntu 24.04`, but it should be as portable as CMake is. This project has no C or C++ dependencies.
103+
104+
Build-time dependencies:
105+
106+
* `cmake`
107+
* `ninja`, `make`, or another CMake-supported build system
108+
* CMake defaults to "Unix Makefiles" on POSIX systems
109+
110+
Example of installation on `Ubuntu 24.04`:
111+
112+
```shell
113+
# Install tools:
114+
apt-get install -y cmake make ninja-build
115+
116+
# Example of toolchains:
117+
apt-get install \
118+
g++-14 gcc-14 gcc-13 g++-13 \
119+
clang-18 clang++-18 clang-17 clang++-17
120+
```
121+
122+
<details>
123+
<summary> Build GoogleTest dependency from github.com </summary>
124+
125+
If you do not have GoogleTest installed on your development system, you may
126+
optionally configure this project to download a known-compatible release of
127+
GoogleTest from source and build it as well.
128+
129+
```shell
130+
cmake -B build -S . -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=./cmake/use-fetch-content.cmake
131+
```
132+
133+
The precise version of GoogleTest that will be used is maintained in
134+
`./lockfile.json`.
135+
136+
</details>
137+
138+
### Instructions
139+
140+
Full set of supported toolchains can be found in [.github/workflows/ci.yml](https://github.com/bemanproject/optional/blob/main/.github/workflows/ci.yml).
141+
142+
#### Preset CMake Flows
143+
144+
This project strives to be as normal and simple a CMake project as possible. This build workflow in particular will work, producing a static `beman_optional` library, ready to package:
145+
146+
```shell
147+
# List available preset configurations:
148+
$ cmake --workflow --list-presets
149+
Available workflow presets:
150+
151+
"system"
152+
"gcc-14"
153+
"gcc-13"
154+
"clang-18"
155+
"clang-17"
156+
157+
# Run examples:
158+
$ cmake --workflow --preset gcc-14
159+
cmake --workflow --preset gcc-14
160+
Executing workflow step 1 of 3: configure preset "gcc-14"
161+
...
162+
-- Build files have been written to: /path/to/repo/.build/gcc-14
163+
164+
Executing workflow step 2 of 3: build preset "gcc-14"
165+
166+
ninja: no work to do.
167+
168+
Executing workflow step 3 of 3: test preset "gcc-14"
169+
170+
Test project /path/to/repo/.build/gcc-14
171+
Start 1: OptionalTest.TestGTest
172+
1/... Test #1: OptionalTest.TestGTest ........................... Passed 0.00 sec
173+
...
174+
Start x: RangeSupportTest.RangeConcepts
175+
.../... Test #x: RangeSupportTest.RangeConcepts ................... Passed 0.00 sec
176+
Start x+1: RangeSupportTest.IteratorConcepts
177+
.../... Test #x+1: RangeSupportTest.IteratorConcepts ................ Passed 0.00 sec
178+
...
179+
180+
100% tests passed, 0 tests failed out of ...
181+
182+
Total Test time (real) = 0.09 sec
183+
```
184+
185+
This should build and run the tests with GCC 14 with the address and undefined behavior sanitizers enabled.
186+
187+
#### Custom CMake Flows
188+
189+
##### Build and Run Tests
190+
191+
CI current build and test flows:
192+
193+
```shell
194+
# Configure build: default build production code + tests (OPTIONAL_ENABLE_TESTING=ON by default).
195+
$ cmake -G "Ninja Multi-Config" \
196+
-DCMAKE_CONFIGURATION_TYPES="RelWithDebInfo;Asan" \
197+
-DCMAKE_TOOLCHAIN_FILE=etc/clang-19-toolchain.cmake \
198+
-B .build -S .
199+
-- The CXX compiler identification is Clang 19.0.0
200+
...
201+
-- Build files have been written to: /path/to/optional/.build
202+
203+
# Build.
204+
$ cmake --build .build --config Asan --target all -- -k 0
205+
...
206+
[30/30] Linking CXX executable ... # Note: 30 targets here (including tests).
207+
208+
# Run tests.
209+
$ ctest --build-config Asan --output-on-failure --test-dir .build
210+
Internal ctest changing into directory: /path/to/optional/.build
211+
Test project /path/to/optional/.build
212+
...
213+
100% tests passed, 0 tests failed out of 82
214+
215+
Total Test time (real) = 0.67 sec
216+
```
217+
218+
##### Build Production, but Skip Tests
219+
220+
By default, we build and run tests. You can provide `-DOPTIONAL_ENABLE_TESTING=OFF` and completely disable building tests:
221+
222+
```shell
223+
# Configure build: build production code, skip tests (OPTIONAL_ENABLE_TESTING=OFF).
224+
$ cmake -G "Ninja Multi-Config" \
225+
-DCMAKE_CONFIGURATION_TYPES="RelWithDebInfo;Asan" \
226+
-DCMAKE_TOOLCHAIN_FILE=etc/clang-19-toolchain.cmake \
227+
-DOPTIONAL_ENABLE_TESTING=OFF \
228+
-B .build -S .
229+
-- The CXX compiler identification is Clang 19.0.0
230+
...
231+
-- Build files have been written to: /path/to/optional/.build
232+
233+
# Build.
234+
$ cmake --build .build --config Asan --target all -- -k 0
235+
...
236+
[15/15] Linking CXX executable ... # Note: 15 targets here (tests were not built).
237+
238+
# Check that tests are not built/installed.
239+
$ ctest --build-config Asan --output-on-failure --test-dir .build
240+
Internal ctest changing into directory: /path/to/beman.optional/.build
241+
Test project /path/to/beman.optional/.build
242+
No tests were found!!!
243+
```
244+
245+
#### Pre-Commit for Linting
246+
247+
Various linting tools are configured and installed via the [pre-commit](https://pre-commit.com/) framework. This requires a working python environment, but also allows the tools, such as clang-format and cmake-lint, to be versioned on a per project basis rather than being installed globally. Version changes in lint checks often means differences in success or failure between the versions in CI and the versions used by a developer. By using the same configurations, this problem is avoided.
248+
249+
In order to set up a python environment, using a python virtual environment can simplify maintaining different configurations between projects. There is no particular dependency on a particular python3 version.
250+
251+
##### Creating and configuring a venv
252+
253+
```shell
254+
python3 -m venv .venv
255+
. .venv/bin/activate && python3 -m pip install --upgrade pip setuptools wheel
256+
. .venv/bin/activate && python3 -m pip install pip-tools
257+
. .venv/bin/activate && python3 -m piptools sync requirements.txt
258+
. .venv/bin/activate && python3 -m piptools sync requirements-dev.txt
259+
. .venv/bin/activate && exec bash
260+
```
261+
262+
This will create the venv, install the python and python development tools, and run bash with the PATH and other environment variables set to use the venv preferentially.
263+
264+
##### Running the linting tools
265+
266+
```shell
267+
pre-commit run -a
268+
```
269+
270+
This will download and configure the lint tools specified in .pre-commit-config.yaml.
271+
272+
There is also a Makefile that will automate this process and keep everything up to date.
273+
274+
```shell
275+
make lint
276+
```
277+
278+
## Papers
279+
280+
Latest revision(s) of the papers can be built / found at:
281+
282+
* [give-std-optional-range-support](https://github.com/neatudarius/give-std-optional-range-support/) for
283+
`Give *std::optional* Range Support (P3168)`
284+
* issue: [#1831](https://github.com/cplusplus/papers/issues/1831)
285+
* LEWG:
286+
* Reviewed in Tokyo 2024.
287+
* Forwarded by LEWG April electronic poll to LWG.
288+
* LWG:
289+
* Reviewed and approved in Saint Louis 2024.
290+
* [./papers/P2988/README.md](https://github.com/bemanproject/optional/blob/main/papers/P2988/README.md) for `std::optional<T&> (P2988)`.
291+
* issue: [#1661](https://github.com/cplusplus/papers/issues/1661)
292+
* LEWG:
293+
* Reviewed in Tokyo 2024.
294+
* Forwarded by LEWG in 2025 in Hagenberg.

docs/libs/index.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
title: Beman Libraries
3+
slug: libraries
4+
---
5+
6+
# Beman Libraries
7+
8+
Below is a table of all libraries within The Beman Project and their current status.
9+
10+
| Beman Library Name | Status | Description |
11+
|---------------------|----------------------------------------------------|-------------|
12+
| [beman.exemplar](https://github.com/bemanproject/exemplar) | Always an under development library, as it is a template / demo for Beman libraries | A Beman Library Exemplar. |
13+
| |
14+
| [beman.optional](https://github.com/bemanproject/optional) | [Production ready. API may undergo changes.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#production-ready-api-may-undergo-changes) | C++26 Extensions for std::optional. |
15+
| | |
16+
| [beman.any_view](https://github.com/bemanproject/any_view) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) |A generalized type-erased view with customizable properties.|
17+
| [beman.execution](https://github.com/bemanproject/execution) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | Building Block For Asynchronous Programs.|
18+
| [beman.inplace_vector](https://github.com/bemanproject/inplace_vector) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | Dynamically-resizable vector with fixed capacity.|
19+
| [beman.iterator_interface](https://github.com/bemanproject/iterator_interface) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | Iterator creation mechanisms.|
20+
| [beman.lazy](https://github.com/bemanproject/lazy) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | Beman Library Implementation of lazy.|
21+
| [beman.net](https://github.com/bemanproject/net) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | Senders For Network Operations.|
22+
| [beman.scope](https://github.com/bemanproject/scope) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | A generalized type-erased view with customizable properties.|
23+
| [beman.task](https://github.com/bemanproject/task) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | mplementation of task (P3552).|
24+
| [beman.utf_view](https://github.com/bemanproject/utf_view) | [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#under-development-and-not-yet-ready-for-production-use) | UTF Transcoding Views.|
25+
| | |
26+
| [beman.dump](https://github.com/bemanproject/dump) | [Retired. No longer maintained or actively developed.](https://github.com/bemanproject/beman/blob/main/docs/BEMAN_LIBRARY_MATURITY_MODEL.md#retired-no-longer-maintained-or-actively-developed) | A tool for dumping an object's value to standard output.|

0 commit comments

Comments
 (0)