[{"id":"10484624777","type":"CreateEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"ref":"lemire/my-ranges-branch","ref_type":"branch","full_ref":"refs/heads/lemire/my-ranges-branch","master_branch":"master","description":"Parsing gigabytes of JSON per second : used by Facebook/Meta Velox, the Node.js runtime, ClickHouse, WatermelonDB, Apache Doris, Milvus, StarRocks","pusher_type":"user"},"public":true,"created_at":"2026-04-12T14:30:48Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8328428287","type":"PullRequestReviewEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"review":{"id":4095087258,"node_id":"PRR_kwDOB4jmS870FhKa","user":{"login":"lemire","id":391987,"node_id":"MDQ6VXNlcjM5MTk4Nw==","avatar_url":"https://avatars.githubusercontent.com/u/391987?v=4","gravatar_id":"","url":"https://api.github.com/users/lemire","html_url":"https://github.com/lemire","followers_url":"https://api.github.com/users/lemire/followers","following_url":"https://api.github.com/users/lemire/following{/other_user}","gists_url":"https://api.github.com/users/lemire/gists{/gist_id}","starred_url":"https://api.github.com/users/lemire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lemire/subscriptions","organizations_url":"https://api.github.com/users/lemire/orgs","repos_url":"https://api.github.com/users/lemire/repos","events_url":"https://api.github.com/users/lemire/events{/privacy}","received_events_url":"https://api.github.com/users/lemire/received_events","type":"User","user_view_type":"public","site_admin":false},"body":null,"commit_id":"b727c029507f100d08d9ab3fccf9dbb591a9cf80","state":"commented","html_url":"https://github.com/simdjson/simdjson/pull/2677#pullrequestreview-4095087258","pull_request_url":"https://api.github.com/repos/simdjson/simdjson/pulls/2677","_links":{"html":{"href":"https://github.com/simdjson/simdjson/pull/2677#pullrequestreview-4095087258"},"pull_request":{"href":"https://api.github.com/repos/simdjson/simdjson/pulls/2677"}},"submitted_at":"2026-04-12T13:38:05Z","updated_at":"2026-04-12T13:38:05Z"},"pull_request":{"url":"https://api.github.com/repos/simdjson/simdjson/pulls/2677","id":3518319765,"number":2677,"head":{"ref":"feature/ondemand-ranges-support","sha":"b727c029507f100d08d9ab3fccf9dbb591a9cf80","repo":{"id":1208109649,"url":"https://api.github.com/repos/justinli500/simdjson","name":"simdjson"}},"base":{"ref":"master","sha":"486b2a3828d8ea26c763348db0a414ebdabc8028","repo":{"id":126412363,"url":"https://api.github.com/repos/simdjson/simdjson","name":"simdjson"}}},"action":"created"},"public":true,"created_at":"2026-04-12T13:38:07Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8328428078","type":"PullRequestReviewCommentEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"action":"created","comment":{"url":"https://api.github.com/repos/simdjson/simdjson/pulls/comments/3069531202","pull_request_review_id":4095087258,"id":3069531202,"node_id":"PRRC_kwDOB4jmS8629VRC","diff_hunk":"@@ -0,0 +1,133 @@\n+#ifndef SIMDJSON_GENERIC_ONDEMAND_RANGES_INL_H\n+\n+#ifndef SIMDJSON_CONDITIONAL_INCLUDE\n+#define SIMDJSON_GENERIC_ONDEMAND_RANGES_INL_H\n+#include \"simdjson/generic/ondemand/base.h\"\n+#include \"simdjson/generic/ondemand/ranges.h\"\n+#include \"simdjson/generic/ondemand/array-inl.h\"\n+#include \"simdjson/generic/ondemand/array_iterator-inl.h\"\n+#include \"simdjson/generic/ondemand/object-inl.h\"\n+#include \"simdjson/generic/ondemand/object_iterator-inl.h\"\n+#endif // SIMDJSON_CONDITIONAL_INCLUDE\n+\n+#if SIMDJSON_SUPPORTS_RANGES\n+\n+namespace simdjson {\n+namespace SIMDJSON_IMPLEMENTATION {\n+namespace ondemand {\n+\n+//\n+// array_range_iterator\n+//\n+\n+simdjson_inline array_range_iterator::array_range_iterator(array_iterator iter) noexcept\n+  : iter_{iter} {}\n+\n+simdjson_inline simdjson_result<value> array_range_iterator::operator*() const noexcept {\n+  return *iter_;\n+}\n+\n+simdjson_inline array_range_iterator& array_range_iterator::operator++() noexcept {\n+  ++iter_;\n+  return *this;\n+}\n+\n+simdjson_inline void array_range_iterator::operator++(int) noexcept {\n+  ++*this;","path":"include/simdjson/generic/ondemand/ranges-inl.h","commit_id":"b727c029507f100d08d9ab3fccf9dbb591a9cf80","original_commit_id":"47f28b88d6d9b5b1d5b62faf6bf4deb139fee9fb","user":{"login":"lemire","id":391987,"node_id":"MDQ6VXNlcjM5MTk4Nw==","avatar_url":"https://avatars.githubusercontent.com/u/391987?v=4","gravatar_id":"","url":"https://api.github.com/users/lemire","html_url":"https://github.com/lemire","followers_url":"https://api.github.com/users/lemire/followers","following_url":"https://api.github.com/users/lemire/following{/other_user}","gists_url":"https://api.github.com/users/lemire/gists{/gist_id}","starred_url":"https://api.github.com/users/lemire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lemire/subscriptions","organizations_url":"https://api.github.com/users/lemire/orgs","repos_url":"https://api.github.com/users/lemire/repos","events_url":"https://api.github.com/users/lemire/events{/privacy}","received_events_url":"https://api.github.com/users/lemire/received_events","type":"User","user_view_type":"public","site_admin":false},"body":"Nah","created_at":"2026-04-12T13:38:05Z","updated_at":"2026-04-12T13:38:06Z","html_url":"https://github.com/simdjson/simdjson/pull/2677#discussion_r3069531202","pull_request_url":"https://api.github.com/repos/simdjson/simdjson/pulls/2677","_links":{"self":{"href":"https://api.github.com/repos/simdjson/simdjson/pulls/comments/3069531202"},"html":{"href":"https://github.com/simdjson/simdjson/pull/2677#discussion_r3069531202"},"pull_request":{"href":"https://api.github.com/repos/simdjson/simdjson/pulls/2677"}},"reactions":{"url":"https://api.github.com/repos/simdjson/simdjson/pulls/comments/3069531202/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"in_reply_to_id":3068721634,"original_position":36,"position":36,"subject_type":"line"},"pull_request":{"url":"https://api.github.com/repos/simdjson/simdjson/pulls/2677","id":3518319765,"number":2677,"head":{"ref":"feature/ondemand-ranges-support","sha":"b727c029507f100d08d9ab3fccf9dbb591a9cf80","repo":{"id":1208109649,"url":"https://api.github.com/repos/justinli500/simdjson","name":"simdjson"}},"base":{"ref":"master","sha":"486b2a3828d8ea26c763348db0a414ebdabc8028","repo":{"id":126412363,"url":"https://api.github.com/repos/simdjson/simdjson","name":"simdjson"}}}},"public":true,"created_at":"2026-04-12T13:38:05Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8328299149","type":"IssueCommentEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/2677","repository_url":"https://api.github.com/repos/simdjson/simdjson","labels_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/labels{/name}","comments_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/comments","events_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/events","html_url":"https://github.com/simdjson/simdjson/pull/2677","id":4245888438,"node_id":"PR_kwDOB4jmS87RtUyV","number":2677,"title":"Add std::ranges support for On-Demand API (#2382)","user":{"login":"justinli500","id":144944571,"node_id":"U_kgDOCKOtuw","avatar_url":"https://avatars.githubusercontent.com/u/144944571?v=4","gravatar_id":"","url":"https://api.github.com/users/justinli500","html_url":"https://github.com/justinli500","followers_url":"https://api.github.com/users/justinli500/followers","following_url":"https://api.github.com/users/justinli500/following{/other_user}","gists_url":"https://api.github.com/users/justinli500/gists{/gist_id}","starred_url":"https://api.github.com/users/justinli500/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinli500/subscriptions","organizations_url":"https://api.github.com/users/justinli500/orgs","repos_url":"https://api.github.com/users/justinli500/repos","events_url":"https://api.github.com/users/justinli500/events{/privacy}","received_events_url":"https://api.github.com/users/justinli500/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":2,"created_at":"2026-04-11T22:08:27Z","updated_at":"2026-04-12T13:38:05Z","closed_at":null,"assignee":null,"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/simdjson/simdjson/pulls/2677","html_url":"https://github.com/simdjson/simdjson/pull/2677","diff_url":"https://github.com/simdjson/simdjson/pull/2677.diff","patch_url":"https://github.com/simdjson/simdjson/pull/2677.patch","merged_at":null},"body":"**Description:**                                                                                                                                                                                                          \r\n             \r\n  Add `get_range()` and `get_key_value_range()` wrappers that expose `ondemand::array` and `ondemand::object` as `std::ranges::input_range` views, enabling `std::views::transform` and other C++20 range adaptors. This uses direct `simdjson_inline` forwarding with no per-element caching, instead of the #2412 method, which buffered values in `operator++` and added ~27% overhead.                                             \r\n                                                                                                                                                                                                                     \r\nSolves issue: #2382                                                                                                                                                                                                                                                         \r\n  \r\nType of change                                                                                                                                                                                                       \r\n  - Bug fix                                                                                                                              \r\n  - Optimization                                                                                                                                                                                                     \r\n  - New feature \r\n  - Refactor/cleanup\r\n  - Documentation/tests\r\n                                                                                                                                                                                                                       \r\nHow to verify/test:                                                                                                                                                                        \r\n- 12 tests added in `tests/ondemand/ondemand_ranges_tests.cpp` covering concept checks, `std::views::transform`, empty ranges, nested objects, and non-exception paths.                                                    \r\n                                                                                                                                                                                                                     \r\nBenchmark variant added to `large_random/` (500k objects, 3 fields each):                                                                                                                                                                                                                                 \r\n| | Throughput | vs. native range-for |         \r\n| --- |--- | --- |                                                                                                        \r\n  | Native range-for | ~1.92 GB/s | baseline |                                                                                                                                                                          \r\n  | `get_range()` (this PR)   | ~2.05 GB/s | ~0% overhead         |\r\n  | Old `auto_iterator` (removed in #2412) | ~1.51 GB/s | ~27% slower          |\r\n                                                                                                                                       \r\n  \r\n  # Run the ranges test                                                                                                                                                                                                \r\n  cmake -B build -DSIMDJSON_CXX_STANDARD=20 -DSIMDJSON_DEVELOPER_MODE=ON                                                                                                                                               \r\n  cmake --build build --target ondemand_ranges_tests                                                                                                                                                                   \r\n  ./build/tests/ondemand/ondemand_ranges_tests                                                                                                                                                                         \r\n                                                                                                                                                                                                                       \r\n  # Run the benchmark comparison                                                                                                                                                                                     \r\n  cmake --build build --target bench_ondemand                                                                                                                                                                        \r\n  ./build/benchmark/bench_ondemand --benchmark_filter=\"large_random<simdjson_ondemand\"","reactions":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/comments/4231598751","html_url":"https://github.com/simdjson/simdjson/pull/2677#issuecomment-4231598751","issue_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677","id":4231598751,"node_id":"IC_kwDOB4jmS878ORKf","user":{"login":"lemire","id":391987,"node_id":"MDQ6VXNlcjM5MTk4Nw==","avatar_url":"https://avatars.githubusercontent.com/u/391987?v=4","gravatar_id":"","url":"https://api.github.com/users/lemire","html_url":"https://github.com/lemire","followers_url":"https://api.github.com/users/lemire/followers","following_url":"https://api.github.com/users/lemire/following{/other_user}","gists_url":"https://api.github.com/users/lemire/gists{/gist_id}","starred_url":"https://api.github.com/users/lemire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lemire/subscriptions","organizations_url":"https://api.github.com/users/lemire/orgs","repos_url":"https://api.github.com/users/lemire/repos","events_url":"https://api.github.com/users/lemire/events{/privacy}","received_events_url":"https://api.github.com/users/lemire/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2026-04-12T13:27:10Z","updated_at":"2026-04-12T13:27:10Z","body":"@justinli500 Though it builds technically, we have this issue...\r\n\r\n```\r\nIn file included from /home/runner/work/simdjson/simdjson/include/simdjson/generic/ondemand/amalgamated.h:25,\r\n                 from /home/runner/work/simdjson/simdjson/include/simdjson/fallback/ondemand.h:5,\r\n                 from /home/runner/work/simdjson/simdjson/include/simdjson/builtin/ondemand.h:14,\r\n                 from /home/runner/work/simdjson/simdjson/include/simdjson/ondemand.h:4,\r\n                 from /home/runner/work/simdjson/simdjson/include/simdjson.h:56,\r\n                 from /home/runner/work/simdjson/simdjson/tools/json2json.cpp:3:\r\n/home/runner/work/simdjson/simdjson/include/simdjson/generic/ondemand/ranges.h:47:24: error: postfix ‘void simdjson::fallback::ondemand::array_range_iterator::operator++(int)’ should return ‘simdjson::fallback::ondemand::array_range_iterator’ [-Werror=effc++]\r\n   47 |   simdjson_inline void operator++(int) noexcept;\r\n      |                        ^~~~~~~~\r\n/home/runner/work/simdjson/simdjson/include/simdjson/generic/ondemand/ranges.h:114:24: error: postfix ‘void simdjson::fallback::ondemand::object_range_iterator::operator++(int)’ should return ‘simdjson::fallback::ondemand::object_range_iterator’ [-Werror=effc++]\r\n  114 |   simdjson_inline void operator++(int) noexcept;\r\n      |                        ^~~~~~~~\r\ncc1plus: all warnings being treated as errors\r\n```\r\n\r\nTechnically a warning.","reactions":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/comments/4231598751/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2026-04-12T13:27:10Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"10483176031","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"repository_id":126412363,"push_id":32775452235,"ref":"refs/heads/adding_memory_file_padding_to_windows","head":"154181e14f9ded262cf08215f108c4860b69e77e","before":"f269fbc97e01844141456e28f1ac388c2d7af35e"},"public":true,"created_at":"2026-04-12T13:19:58Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"10474352251","type":"PushEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"repository_id":470369330,"push_id":32766615728,"ref":"refs/heads/upgrade-catch2-dep","head":"0a9a5b87102c970a8689a1b98d250d36e51ff468","before":"13169e66ee55b2a3f121601b908cd919c14dadf0"},"public":true,"created_at":"2026-04-12T04:44:23Z"},{"id":"10473290502","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"repository_id":126412363,"push_id":32765553223,"ref":"refs/heads/adding_memory_file_padding_to_windows","head":"f269fbc97e01844141456e28f1ac388c2d7af35e","before":"e1bd3c3e11c1bebef038e05419a52517b03b46f5"},"public":true,"created_at":"2026-04-12T03:31:21Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"10473025840","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"repository_id":126412363,"push_id":32765286867,"ref":"refs/heads/lemire/selector","head":"6c632fc121e993c5c8e01680f30a51959851d507","before":"05fa5c2d7495ba83eb0253296fc05211fe3e39d0"},"public":true,"created_at":"2026-04-12T03:13:55Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8320584424","type":"IssueCommentEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019","repository_url":"https://api.github.com/repos/NVIDIA/stdexec","labels_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019/labels{/name}","comments_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019/comments","events_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019/events","html_url":"https://github.com/NVIDIA/stdexec/pull/2019","id":4246109152,"node_id":"PR_kwDOFdOXg87Rt5_F","number":2019,"title":"upgrade Catch2 to v3.14.0","user":{"login":"ericniebler","id":225757,"node_id":"MDQ6VXNlcjIyNTc1Nw==","avatar_url":"https://avatars.githubusercontent.com/u/225757?v=4","gravatar_id":"","url":"https://api.github.com/users/ericniebler","html_url":"https://github.com/ericniebler","followers_url":"https://api.github.com/users/ericniebler/followers","following_url":"https://api.github.com/users/ericniebler/following{/other_user}","gists_url":"https://api.github.com/users/ericniebler/gists{/gist_id}","starred_url":"https://api.github.com/users/ericniebler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericniebler/subscriptions","organizations_url":"https://api.github.com/users/ericniebler/orgs","repos_url":"https://api.github.com/users/ericniebler/repos","events_url":"https://api.github.com/users/ericniebler/events{/privacy}","received_events_url":"https://api.github.com/users/ericniebler/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":1,"created_at":"2026-04-12T00:43:00Z","updated_at":"2026-04-12T04:44:24Z","closed_at":null,"assignee":null,"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/NVIDIA/stdexec/pulls/2019","html_url":"https://github.com/NVIDIA/stdexec/pull/2019","diff_url":"https://github.com/NVIDIA/stdexec/pull/2019.diff","patch_url":"https://github.com/NVIDIA/stdexec/pull/2019.patch","merged_at":null},"body":null,"reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/comments/4230492862","html_url":"https://github.com/NVIDIA/stdexec/pull/2019#issuecomment-4230492862","issue_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/2019","id":4230492862,"node_id":"IC_kwDOFdOXg878KDK-","user":{"login":"ericniebler","id":225757,"node_id":"MDQ6VXNlcjIyNTc1Nw==","avatar_url":"https://avatars.githubusercontent.com/u/225757?v=4","gravatar_id":"","url":"https://api.github.com/users/ericniebler","html_url":"https://github.com/ericniebler","followers_url":"https://api.github.com/users/ericniebler/followers","following_url":"https://api.github.com/users/ericniebler/following{/other_user}","gists_url":"https://api.github.com/users/ericniebler/gists{/gist_id}","starred_url":"https://api.github.com/users/ericniebler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericniebler/subscriptions","organizations_url":"https://api.github.com/users/ericniebler/orgs","repos_url":"https://api.github.com/users/ericniebler/repos","events_url":"https://api.github.com/users/ericniebler/events{/privacy}","received_events_url":"https://api.github.com/users/ericniebler/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2026-04-12T01:09:14Z","updated_at":"2026-04-12T01:09:14Z","body":"sadly, after this pr lands, stdexec _still_ won't compile with clang-22 in c++26 mode ... because clang crashes. c++23 mode is fine.","reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/comments/4230492862/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2026-04-12T01:09:14Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10471158300","type":"PushEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"repository_id":470369330,"push_id":32763418434,"ref":"refs/heads/upgrade-catch2-dep","head":"13169e66ee55b2a3f121601b908cd919c14dadf0","before":"8d7708a87bb2269876b71a500aae52f554d2b008"},"public":true,"created_at":"2026-04-12T01:06:35Z"},{"id":"8320378611","type":"PullRequestEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"opened","number":2019,"pull_request":{"url":"https://api.github.com/repos/NVIDIA/stdexec/pulls/2019","id":3518472133,"number":2019,"head":{"ref":"upgrade-catch2-dep","sha":"0a9a5b87102c970a8689a1b98d250d36e51ff468","repo":{"id":470369330,"url":"https://api.github.com/repos/ericniebler/stdexec","name":"stdexec"}},"base":{"ref":"main","sha":"73559e8963dab7a4ece32ede22f6472c9a815032","repo":{"id":366188419,"url":"https://api.github.com/repos/NVIDIA/stdexec","name":"stdexec"}}}},"public":true,"created_at":"2026-04-12T00:43:00Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10470805615","type":"CreateEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"ref":"upgrade-catch2-dep","ref_type":"branch","full_ref":"refs/heads/upgrade-catch2-dep","master_branch":"main","description":"`std::execution`, the proposed C++ framework for asynchronous and parallel programming.","pusher_type":"user"},"public":true,"created_at":"2026-04-12T00:42:12Z"},{"id":"10470799607","type":"CreateEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"ref":"lemire/selector","ref_type":"branch","full_ref":"refs/heads/lemire/selector","master_branch":"master","description":"Parsing gigabytes of JSON per second : used by Facebook/Meta Velox, the Node.js runtime, ClickHouse, WatermelonDB, Apache Doris, Milvus, StarRocks","pusher_type":"user"},"public":true,"created_at":"2026-04-12T00:41:47Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8320177131","type":"IssueCommentEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937","repository_url":"https://api.github.com/repos/NVIDIA/stdexec","labels_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/labels{/name}","comments_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/comments","events_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/events","html_url":"https://github.com/NVIDIA/stdexec/issues/1937","id":4087960678,"node_id":"I_kwDOFdOXg87zqVRm","number":1937,"title":"when_all: implementation missing mechanism for explicit resource transition?","user":{"login":"maartenarnst","id":15942677,"node_id":"MDQ6VXNlcjE1OTQyNjc3","avatar_url":"https://avatars.githubusercontent.com/u/15942677?v=4","gravatar_id":"","url":"https://api.github.com/users/maartenarnst","html_url":"https://github.com/maartenarnst","followers_url":"https://api.github.com/users/maartenarnst/followers","following_url":"https://api.github.com/users/maartenarnst/following{/other_user}","gists_url":"https://api.github.com/users/maartenarnst/gists{/gist_id}","starred_url":"https://api.github.com/users/maartenarnst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maartenarnst/subscriptions","organizations_url":"https://api.github.com/users/maartenarnst/orgs","repos_url":"https://api.github.com/users/maartenarnst/repos","events_url":"https://api.github.com/users/maartenarnst/events{/privacy}","received_events_url":"https://api.github.com/users/maartenarnst/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignees":[],"milestone":null,"comments":5,"created_at":"2026-03-17T11:32:03Z","updated_at":"2026-04-12T00:17:11Z","closed_at":"2026-04-12T00:15:37Z","assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"In a `when_all` with child senders that complete on different execution contexts, it appears the resource transitions are not explicit. This appears to be at odds with the `p2300` proposal:\n\n> We propose that, for senders advertising their [completion scheduler](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html#completion-scheduler), all execution resource transitions must be explicit; running user code anywhere but where they defined it to run must be considered a bug.\n\nFor example, if we build a sender like,\n\n```c++\nTEST(WhenAll, different_domain_children) {\n    experimental::execution::single_thread_context cpu{};\n    nvexec::stream_context gpu{};\n\n    auto when_all = stdexec::when_all(\n        stdexec::schedule(cpu.get_scheduler()) | stdexec::then([] { }),\n        stdexec::schedule(gpu.get_scheduler()) | stdexec::then([] __device__ { }));\n\n    auto sndr = std::move(when_all) | stdexec::continues_on(cpu.get_scheduler()) | stdexec::then([] { });\n\n    stdexec::sync_wait(sndr);\n}\n```\n\nthere is a resource transition from the `gpu` to the `cpu`, but it appears the current implementation of `when_all` does not make it  explicit. In particular, the implementation of `when_all` does not insert a `schedule_from` to transition away from the `gpu`.\n\nNote that it appears that the `continues_on` may not be considered to be responsible for the transition because the completion domain of the `when_all` is the `default_domain`. Also note that this snippet does not compile because of a host device error, but this compilation problem might be separate from the conceptual problem of how to think of resource transitions in `when_all`.\n\nWe therefore wanted to ask whether it is a deliberate design decision that the current implementation of `when_all` does not end branches with an explicit resource transition? If so, how should we think of such resource transitions?\n\nJoint work with @romintomasetti.\n\n","reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/timeline","performed_via_github_app":null,"state_reason":"completed","pinned_comment":null},"comment":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/comments/4230424452","html_url":"https://github.com/NVIDIA/stdexec/issues/1937#issuecomment-4230424452","issue_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937","id":4230424452,"node_id":"IC_kwDOFdOXg878JyeE","user":{"login":"ericniebler","id":225757,"node_id":"MDQ6VXNlcjIyNTc1Nw==","avatar_url":"https://avatars.githubusercontent.com/u/225757?v=4","gravatar_id":"","url":"https://api.github.com/users/ericniebler","html_url":"https://github.com/ericniebler","followers_url":"https://api.github.com/users/ericniebler/followers","following_url":"https://api.github.com/users/ericniebler/following{/other_user}","gists_url":"https://api.github.com/users/ericniebler/gists{/gist_id}","starred_url":"https://api.github.com/users/ericniebler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericniebler/subscriptions","organizations_url":"https://api.github.com/users/ericniebler/orgs","repos_url":"https://api.github.com/users/ericniebler/repos","events_url":"https://api.github.com/users/ericniebler/events{/privacy}","received_events_url":"https://api.github.com/users/ericniebler/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2026-04-12T00:17:11Z","updated_at":"2026-04-12T00:17:11Z","body":"i've closed this now that the underlying problem is fixed. it's possible you don't like the resolution. if so, just reopen the issue and we can talk more.","pin":null,"reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/comments/4230424452/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2026-04-12T00:17:11Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10470436956","type":"DeleteEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"ref":"stream-and-default-domains-should-not-be-compatible","ref_type":"branch","full_ref":"refs/heads/stream-and-default-domains-should-not-be-compatible","pusher_type":"user"},"public":true,"created_at":"2026-04-12T00:15:41Z"},{"id":"8320164635","type":"PullRequestEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"merged","number":2018,"pull_request":{"url":"https://api.github.com/repos/NVIDIA/stdexec/pulls/2018","id":3518276316,"number":2018,"head":{"ref":"stream-and-default-domains-should-not-be-compatible","sha":"ab1e015e1e521ed00c5283e3671632ef1f756422","repo":{"id":470369330,"url":"https://api.github.com/repos/ericniebler/stdexec","name":"stdexec"}},"base":{"ref":"main","sha":"6b831318ed0a87e464b28c29a01b88695e5d71c6","repo":{"id":366188419,"url":"https://api.github.com/repos/NVIDIA/stdexec","name":"stdexec"}}}},"public":true,"created_at":"2026-04-12T00:15:36Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"8320164519","type":"IssuesEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"closed","issue":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937","repository_url":"https://api.github.com/repos/NVIDIA/stdexec","labels_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/labels{/name}","comments_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/comments","events_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/events","html_url":"https://github.com/NVIDIA/stdexec/issues/1937","id":4087960678,"node_id":"I_kwDOFdOXg87zqVRm","number":1937,"title":"when_all: implementation missing mechanism for explicit resource transition?","user":{"login":"maartenarnst","id":15942677,"node_id":"MDQ6VXNlcjE1OTQyNjc3","avatar_url":"https://avatars.githubusercontent.com/u/15942677?v=4","gravatar_id":"","url":"https://api.github.com/users/maartenarnst","html_url":"https://github.com/maartenarnst","followers_url":"https://api.github.com/users/maartenarnst/followers","following_url":"https://api.github.com/users/maartenarnst/following{/other_user}","gists_url":"https://api.github.com/users/maartenarnst/gists{/gist_id}","starred_url":"https://api.github.com/users/maartenarnst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maartenarnst/subscriptions","organizations_url":"https://api.github.com/users/maartenarnst/orgs","repos_url":"https://api.github.com/users/maartenarnst/repos","events_url":"https://api.github.com/users/maartenarnst/events{/privacy}","received_events_url":"https://api.github.com/users/maartenarnst/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignees":[],"milestone":null,"comments":5,"created_at":"2026-03-17T11:32:03Z","updated_at":"2026-04-12T00:17:11Z","closed_at":"2026-04-12T00:15:37Z","assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"In a `when_all` with child senders that complete on different execution contexts, it appears the resource transitions are not explicit. This appears to be at odds with the `p2300` proposal:\n\n> We propose that, for senders advertising their [completion scheduler](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html#completion-scheduler), all execution resource transitions must be explicit; running user code anywhere but where they defined it to run must be considered a bug.\n\nFor example, if we build a sender like,\n\n```c++\nTEST(WhenAll, different_domain_children) {\n    experimental::execution::single_thread_context cpu{};\n    nvexec::stream_context gpu{};\n\n    auto when_all = stdexec::when_all(\n        stdexec::schedule(cpu.get_scheduler()) | stdexec::then([] { }),\n        stdexec::schedule(gpu.get_scheduler()) | stdexec::then([] __device__ { }));\n\n    auto sndr = std::move(when_all) | stdexec::continues_on(cpu.get_scheduler()) | stdexec::then([] { });\n\n    stdexec::sync_wait(sndr);\n}\n```\n\nthere is a resource transition from the `gpu` to the `cpu`, but it appears the current implementation of `when_all` does not make it  explicit. In particular, the implementation of `when_all` does not insert a `schedule_from` to transition away from the `gpu`.\n\nNote that it appears that the `continues_on` may not be considered to be responsible for the transition because the completion domain of the `when_all` is the `default_domain`. Also note that this snippet does not compile because of a host device error, but this compilation problem might be separate from the conceptual problem of how to think of resource transitions in `when_all`.\n\nWe therefore wanted to ask whether it is a deliberate design decision that the current implementation of `when_all` does not end branches with an explicit resource transition? If so, how should we think of such resource transitions?\n\nJoint work with @romintomasetti.\n\n","reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1937/timeline","performed_via_github_app":null,"state_reason":"completed","pinned_comment":null}},"public":true,"created_at":"2026-04-12T00:15:38Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10470435764","type":"PushEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"repository_id":366188419,"push_id":32762696708,"ref":"refs/heads/main","head":"73559e8963dab7a4ece32ede22f6472c9a815032","before":"6b831318ed0a87e464b28c29a01b88695e5d71c6"},"public":true,"created_at":"2026-04-12T00:15:37Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10470080945","type":"PushEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"repository_id":470369330,"push_id":32762340036,"ref":"refs/heads/stream-and-default-domains-should-not-be-compatible","head":"ab1e015e1e521ed00c5283e3671632ef1f756422","before":"0e3c1cddcaab8db2e8ef4c082565bb6f8c6a47f6"},"public":true,"created_at":"2026-04-11T23:51:58Z"},{"id":"10469773782","type":"PushEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"repository_id":470369330,"push_id":32762034316,"ref":"refs/heads/stream-and-default-domains-should-not-be-compatible","head":"0e3c1cddcaab8db2e8ef4c082565bb6f8c6a47f6","before":"3b85e67ccbd082c0f1f71671012553fe2dd4d78a"},"public":true,"created_at":"2026-04-11T23:30:06Z"},{"id":"10469233550","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"repository_id":126412363,"push_id":32761493611,"ref":"refs/heads/adding_memory_file_padding_to_windows","head":"e1bd3c3e11c1bebef038e05419a52517b03b46f5","before":"be4fc43f65439344756080a49fdc031897bc868b"},"public":true,"created_at":"2026-04-11T22:53:40Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"10469072113","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"repository_id":126412363,"push_id":32761331907,"ref":"refs/heads/adding_memory_file_padding_to_windows","head":"be4fc43f65439344756080a49fdc031897bc868b","before":"fb89aa334b97b8591a24d436ff1fb0860f6b5d3d"},"public":true,"created_at":"2026-04-11T22:43:36Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8319424948","type":"IssueCommentEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/2677","repository_url":"https://api.github.com/repos/simdjson/simdjson","labels_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/labels{/name}","comments_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/comments","events_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/events","html_url":"https://github.com/simdjson/simdjson/pull/2677","id":4245888438,"node_id":"PR_kwDOB4jmS87RtUyV","number":2677,"title":"Add std::ranges support for On-Demand API (#2382)","user":{"login":"justinli500","id":144944571,"node_id":"U_kgDOCKOtuw","avatar_url":"https://avatars.githubusercontent.com/u/144944571?v=4","gravatar_id":"","url":"https://api.github.com/users/justinli500","html_url":"https://github.com/justinli500","followers_url":"https://api.github.com/users/justinli500/followers","following_url":"https://api.github.com/users/justinli500/following{/other_user}","gists_url":"https://api.github.com/users/justinli500/gists{/gist_id}","starred_url":"https://api.github.com/users/justinli500/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinli500/subscriptions","organizations_url":"https://api.github.com/users/justinli500/orgs","repos_url":"https://api.github.com/users/justinli500/repos","events_url":"https://api.github.com/users/justinli500/events{/privacy}","received_events_url":"https://api.github.com/users/justinli500/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"open","locked":false,"assignees":[],"milestone":null,"comments":2,"created_at":"2026-04-11T22:08:27Z","updated_at":"2026-04-12T13:38:05Z","closed_at":null,"assignee":null,"type":null,"active_lock_reason":null,"draft":false,"pull_request":{"url":"https://api.github.com/repos/simdjson/simdjson/pulls/2677","html_url":"https://github.com/simdjson/simdjson/pull/2677","diff_url":"https://github.com/simdjson/simdjson/pull/2677.diff","patch_url":"https://github.com/simdjson/simdjson/pull/2677.patch","merged_at":null},"body":"**Description:**                                                                                                                                                                                                          \r\n             \r\n  Add `get_range()` and `get_key_value_range()` wrappers that expose `ondemand::array` and `ondemand::object` as `std::ranges::input_range` views, enabling `std::views::transform` and other C++20 range adaptors. This uses direct `simdjson_inline` forwarding with no per-element caching, instead of the #2412 method, which buffered values in `operator++` and added ~27% overhead.                                             \r\n                                                                                                                                                                                                                     \r\nSolves issue: #2382                                                                                                                                                                                                                                                         \r\n  \r\nType of change                                                                                                                                                                                                       \r\n  - Bug fix                                                                                                                              \r\n  - Optimization                                                                                                                                                                                                     \r\n  - New feature \r\n  - Refactor/cleanup\r\n  - Documentation/tests\r\n                                                                                                                                                                                                                       \r\nHow to verify/test:                                                                                                                                                                        \r\n- 12 tests added in `tests/ondemand/ondemand_ranges_tests.cpp` covering concept checks, `std::views::transform`, empty ranges, nested objects, and non-exception paths.                                                    \r\n                                                                                                                                                                                                                     \r\nBenchmark variant added to `large_random/` (500k objects, 3 fields each):                                                                                                                                                                                                                                 \r\n| | Throughput | vs. native range-for |         \r\n| --- |--- | --- |                                                                                                        \r\n  | Native range-for | ~1.92 GB/s | baseline |                                                                                                                                                                          \r\n  | `get_range()` (this PR)   | ~2.05 GB/s | ~0% overhead         |\r\n  | Old `auto_iterator` (removed in #2412) | ~1.51 GB/s | ~27% slower          |\r\n                                                                                                                                       \r\n  \r\n  # Run the ranges test                                                                                                                                                                                                \r\n  cmake -B build -DSIMDJSON_CXX_STANDARD=20 -DSIMDJSON_DEVELOPER_MODE=ON                                                                                                                                               \r\n  cmake --build build --target ondemand_ranges_tests                                                                                                                                                                   \r\n  ./build/tests/ondemand/ondemand_ranges_tests                                                                                                                                                                         \r\n                                                                                                                                                                                                                       \r\n  # Run the benchmark comparison                                                                                                                                                                                     \r\n  cmake --build build --target bench_ondemand                                                                                                                                                                        \r\n  ./build/benchmark/bench_ondemand --benchmark_filter=\"large_random<simdjson_ondemand\"","reactions":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677/timeline","performed_via_github_app":null,"state_reason":null},"comment":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/comments/4230307690","html_url":"https://github.com/simdjson/simdjson/pull/2677#issuecomment-4230307690","issue_url":"https://api.github.com/repos/simdjson/simdjson/issues/2677","id":4230307690,"node_id":"IC_kwDOB4jmS878JV9q","user":{"login":"lemire","id":391987,"node_id":"MDQ6VXNlcjM5MTk4Nw==","avatar_url":"https://avatars.githubusercontent.com/u/391987?v=4","gravatar_id":"","url":"https://api.github.com/users/lemire","html_url":"https://github.com/lemire","followers_url":"https://api.github.com/users/lemire/followers","following_url":"https://api.github.com/users/lemire/following{/other_user}","gists_url":"https://api.github.com/users/lemire/gists{/gist_id}","starred_url":"https://api.github.com/users/lemire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lemire/subscriptions","organizations_url":"https://api.github.com/users/lemire/orgs","repos_url":"https://api.github.com/users/lemire/repos","events_url":"https://api.github.com/users/lemire/events{/privacy}","received_events_url":"https://api.github.com/users/lemire/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2026-04-11T22:41:44Z","updated_at":"2026-04-11T22:41:44Z","body":"@the-moisrex Can you have a look ? This PR seems quite thin and simple.\r\n","reactions":{"url":"https://api.github.com/repos/simdjson/simdjson/issues/comments/4230307690/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2026-04-11T22:41:44Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"10468923621","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":126412363,"name":"simdjson/simdjson","url":"https://api.github.com/repos/simdjson/simdjson"},"payload":{"repository_id":126412363,"push_id":32761183801,"ref":"refs/heads/adding_memory_file_padding_to_windows","head":"fb89aa334b97b8591a24d436ff1fb0860f6b5d3d","before":"09469b7fb7bf864783f5e09640e5cfe53b8a5d6a"},"public":true,"created_at":"2026-04-11T22:34:23Z","org":{"id":62337925,"login":"simdjson","gravatar_id":"","url":"https://api.github.com/orgs/simdjson","avatar_url":"https://avatars.githubusercontent.com/u/62337925?"}},{"id":"8319245215","type":"IssueCommentEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"created","issue":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948","repository_url":"https://api.github.com/repos/NVIDIA/stdexec","labels_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/labels{/name}","comments_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/comments","events_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/events","html_url":"https://github.com/NVIDIA/stdexec/issues/1948","id":4111714955,"node_id":"I_kwDOFdOXg871E8qL","number":1948,"title":"stdexec::spawn_future compilation failure with counting scope","user":{"login":"maxbachmann","id":44199644,"node_id":"MDQ6VXNlcjQ0MTk5NjQ0","avatar_url":"https://avatars.githubusercontent.com/u/44199644?v=4","gravatar_id":"","url":"https://api.github.com/users/maxbachmann","html_url":"https://github.com/maxbachmann","followers_url":"https://api.github.com/users/maxbachmann/followers","following_url":"https://api.github.com/users/maxbachmann/following{/other_user}","gists_url":"https://api.github.com/users/maxbachmann/gists{/gist_id}","starred_url":"https://api.github.com/users/maxbachmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxbachmann/subscriptions","organizations_url":"https://api.github.com/users/maxbachmann/orgs","repos_url":"https://api.github.com/users/maxbachmann/repos","events_url":"https://api.github.com/users/maxbachmann/events{/privacy}","received_events_url":"https://api.github.com/users/maxbachmann/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignees":[],"milestone":null,"comments":1,"created_at":"2026-03-21T07:24:02Z","updated_at":"2026-04-11T22:19:34Z","closed_at":"2026-04-11T22:19:20Z","assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"```cpp\nstdexec::task<void> test()\n{\n    co_return;\n}\n\nstdexec::task<void> test2(stdexec::counting_scope &scope)\n{\n    co_await stdexec::spawn_future(test(), scope.get_token());\n}\n```\ndoesn't compile\n```\ninstall/debug/vendor/include/stdexec/__detail/__receivers.hpp:123:22:   required by the constraints of 'template<class _Receiver, class _Error>  requires (__set_error_member<_Receiver, _Error>) || (__tag_invocable<stdexec::set_error_t, _Receiver, _Error>) constexpr void stdexec::set_error_t::operator()(_Receiver&&, _Error&&) const'\ninstall/debug/vendor/include/stdexec/__detail/__receivers.hpp:120:13: note: no operand of the disjunction is satisfied\n  119 |       requires __set_error_member<_Receiver, _Error>\n      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  120 |             || __tag_invocable<set_error_t, _Receiver, _Error>\n      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n```\n\n\nIt does compile with a `simple_counting_scope`. Using a stdexec::just() instead of the coroutine task also works as expected.\n","reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/timeline","performed_via_github_app":null,"state_reason":"completed","pinned_comment":null},"comment":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/comments/4230279951","html_url":"https://github.com/NVIDIA/stdexec/issues/1948#issuecomment-4230279951","issue_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948","id":4230279951,"node_id":"IC_kwDOFdOXg878JPMP","user":{"login":"ericniebler","id":225757,"node_id":"MDQ6VXNlcjIyNTc1Nw==","avatar_url":"https://avatars.githubusercontent.com/u/225757?v=4","gravatar_id":"","url":"https://api.github.com/users/ericniebler","html_url":"https://github.com/ericniebler","followers_url":"https://api.github.com/users/ericniebler/followers","following_url":"https://api.github.com/users/ericniebler/following{/other_user}","gists_url":"https://api.github.com/users/ericniebler/gists{/gist_id}","starred_url":"https://api.github.com/users/ericniebler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericniebler/subscriptions","organizations_url":"https://api.github.com/users/ericniebler/orgs","repos_url":"https://api.github.com/users/ericniebler/repos","events_url":"https://api.github.com/users/ericniebler/events{/privacy}","received_events_url":"https://api.github.com/users/ericniebler/received_events","type":"User","user_view_type":"public","site_admin":false},"created_at":"2026-04-11T22:19:20Z","updated_at":"2026-04-11T22:19:34Z","body":"when i tried to compile this just now, i got a static_assert about the lack of a start scheduler. that is because the coroutine's environment is not automatically passed to `spawn_future`. you have to do it manually. something like this should work:\n\n```c++\nstdexec::task<void> test()\n{\n    co_return;\n}\n\nstdexec::task<void> test2(stdexec::counting_scope &scope)\n{\n  auto&& env = co_await stdexec::read_env(std::identity());\n  co_await stdexec::spawn_future(test(), scope.get_token(), env);\n}\n```\n","pin":null,"reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/comments/4230279951/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"performed_via_github_app":null}},"public":true,"created_at":"2026-04-11T22:19:20Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"8319245118","type":"IssuesEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"closed","issue":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948","repository_url":"https://api.github.com/repos/NVIDIA/stdexec","labels_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/labels{/name}","comments_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/comments","events_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/events","html_url":"https://github.com/NVIDIA/stdexec/issues/1948","id":4111714955,"node_id":"I_kwDOFdOXg871E8qL","number":1948,"title":"stdexec::spawn_future compilation failure with counting scope","user":{"login":"maxbachmann","id":44199644,"node_id":"MDQ6VXNlcjQ0MTk5NjQ0","avatar_url":"https://avatars.githubusercontent.com/u/44199644?v=4","gravatar_id":"","url":"https://api.github.com/users/maxbachmann","html_url":"https://github.com/maxbachmann","followers_url":"https://api.github.com/users/maxbachmann/followers","following_url":"https://api.github.com/users/maxbachmann/following{/other_user}","gists_url":"https://api.github.com/users/maxbachmann/gists{/gist_id}","starred_url":"https://api.github.com/users/maxbachmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maxbachmann/subscriptions","organizations_url":"https://api.github.com/users/maxbachmann/orgs","repos_url":"https://api.github.com/users/maxbachmann/repos","events_url":"https://api.github.com/users/maxbachmann/events{/privacy}","received_events_url":"https://api.github.com/users/maxbachmann/received_events","type":"User","user_view_type":"public","site_admin":false},"labels":[],"state":"closed","locked":false,"assignees":[],"milestone":null,"comments":1,"created_at":"2026-03-21T07:24:02Z","updated_at":"2026-04-11T22:19:34Z","closed_at":"2026-04-11T22:19:20Z","assignee":null,"type":null,"active_lock_reason":null,"sub_issues_summary":{"total":0,"completed":0,"percent_completed":0},"issue_dependencies_summary":{"blocked_by":0,"total_blocked_by":0,"blocking":0,"total_blocking":0},"body":"```cpp\nstdexec::task<void> test()\n{\n    co_return;\n}\n\nstdexec::task<void> test2(stdexec::counting_scope &scope)\n{\n    co_await stdexec::spawn_future(test(), scope.get_token());\n}\n```\ndoesn't compile\n```\ninstall/debug/vendor/include/stdexec/__detail/__receivers.hpp:123:22:   required by the constraints of 'template<class _Receiver, class _Error>  requires (__set_error_member<_Receiver, _Error>) || (__tag_invocable<stdexec::set_error_t, _Receiver, _Error>) constexpr void stdexec::set_error_t::operator()(_Receiver&&, _Error&&) const'\ninstall/debug/vendor/include/stdexec/__detail/__receivers.hpp:120:13: note: no operand of the disjunction is satisfied\n  119 |       requires __set_error_member<_Receiver, _Error>\n      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  120 |             || __tag_invocable<set_error_t, _Receiver, _Error>\n      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n```\n\n\nIt does compile with a `simple_counting_scope`. Using a stdexec::just() instead of the coroutine task also works as expected.\n","reactions":{"url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/reactions","total_count":0,"+1":0,"-1":0,"laugh":0,"hooray":0,"confused":0,"heart":0,"rocket":0,"eyes":0},"timeline_url":"https://api.github.com/repos/NVIDIA/stdexec/issues/1948/timeline","performed_via_github_app":null,"state_reason":"completed","pinned_comment":null}},"public":true,"created_at":"2026-04-11T22:19:20Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10468431985","type":"PushEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"repository_id":470369330,"push_id":32760691685,"ref":"refs/heads/stream-and-default-domains-should-not-be-compatible","head":"3b85e67ccbd082c0f1f71671012553fe2dd4d78a","before":"faf0a630d27d68299d11ba5db7441cb464d238ed"},"public":true,"created_at":"2026-04-11T22:03:36Z"},{"id":"10467929718","type":"PushEvent","actor":{"id":391987,"login":"lemire","display_login":"lemire","gravatar_id":"","url":"https://api.github.com/users/lemire","avatar_url":"https://avatars.githubusercontent.com/u/391987?"},"repo":{"id":1208082261,"name":"lemire/fastmodrs","url":"https://api.github.com/repos/lemire/fastmodrs"},"payload":{"repository_id":1208082261,"push_id":32760189835,"ref":"refs/heads/main","head":"4c057406d9f0409ca7c7d5d21d67da95c5e597c9","before":"54628af002030cbd1f5d55a18b89b6796a866d28"},"public":true,"created_at":"2026-04-11T21:34:21Z"},{"id":"8318845722","type":"PullRequestEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":366188419,"name":"NVIDIA/stdexec","url":"https://api.github.com/repos/NVIDIA/stdexec"},"payload":{"action":"opened","number":2018,"pull_request":{"url":"https://api.github.com/repos/NVIDIA/stdexec/pulls/2018","id":3518276316,"number":2018,"head":{"ref":"stream-and-default-domains-should-not-be-compatible","sha":"ab1e015e1e521ed00c5283e3671632ef1f756422","repo":{"id":470369330,"url":"https://api.github.com/repos/ericniebler/stdexec","name":"stdexec"}},"base":{"ref":"main","sha":"6b831318ed0a87e464b28c29a01b88695e5d71c6","repo":{"id":366188419,"url":"https://api.github.com/repos/NVIDIA/stdexec","name":"stdexec"}}}},"public":true,"created_at":"2026-04-11T21:32:38Z","org":{"id":1728152,"login":"NVIDIA","gravatar_id":"","url":"https://api.github.com/orgs/NVIDIA","avatar_url":"https://avatars.githubusercontent.com/u/1728152?"}},{"id":"10467892484","type":"CreateEvent","actor":{"id":225757,"login":"ericniebler","display_login":"ericniebler","gravatar_id":"","url":"https://api.github.com/users/ericniebler","avatar_url":"https://avatars.githubusercontent.com/u/225757?"},"repo":{"id":470369330,"name":"ericniebler/stdexec","url":"https://api.github.com/repos/ericniebler/stdexec"},"payload":{"ref":"stream-and-default-domains-should-not-be-compatible","ref_type":"branch","full_ref":"refs/heads/stream-and-default-domains-should-not-be-compatible","master_branch":"main","description":"`std::execution`, the proposed C++ framework for asynchronous and parallel programming.","pusher_type":"user"},"public":true,"created_at":"2026-04-11T21:32:09Z"}]