Skip to content

Propose the bulk helpers, and a voice pass on the paper - #56

Open
steve-downey wants to merge 3 commits into
mainfrom
paper-voice-and-bulk-api
Open

Propose the bulk helpers, and a voice pass on the paper#56
steve-downey wants to merge 3 commits into
mainfrom
paper-voice-and-bulk-api

Conversation

@steve-downey

Copy link
Copy Markdown
Owner

Bulk helpers

decode_to / encode_to / decode_into / encode_into already existed in detail/bulk_transcode.hpp, and detail/ is only a directory convention in this repo — the umbrella header includes it and the module exports it, the same as null_term and transcode_string. So they were public API while the paper, the README, and the header comment all said they were not proposed. The tests had been rewritten to exercise the pipelines instead (// decode(codec) | ranges::to — replaces decode_to(codec, range)), leaving all eight helpers with no coverage.

This settles it the other way and proposes them. They are trivial wrappers, and that is the point: converting a buffer to a container is the operation users come for, and withholding the name does not stop anyone wanting it — it only moves the question to every code review and every committee discussion of the paper.

  • Paper — the section now runs the concession instead of the assertion: the principled reason not to propose them, then However, we propose them. Overview, user-facing examples, the API comparison table, and footnote 2 follow.
  • README — drops "no dedicated bulk API is needed" and "not proposed for standardization"; the four bulk rows name the helpers.
  • Header comment — no longer claims they are not proposed.
  • constexpr — added to the WHATWG decode_to/encode_to overloads, which lacked it while the pluggable overloads had it.
  • Tests — 18 new cases covering all eight helpers, four of them consteval via constify/STATIC_REQUIRE. Each container-returning case is checked both against a literal and against the pipeline it is specified as.

Voice pass on the paper

Separately, a pass over the paper's prose. The abstract opens on the thesis with no wind-up, Context and Motivation is broken into short paragraphs, and the two design decisions that had a real objection worth raising — rejecting char8_t, and the compile-time codec parameter — now argue by concession rather than asserting and then supplying reasons.

Five <!-- TODO(sdowney) --> markers are left in for prose only I can write:

  1. The answer to Jan Schultke's epigraph, which the paper quotes and then never addresses.
  2. The two motivation sections with the comparison table wedged between them.
  3. Prior Art: four paragraphs on the same template, no owned judgment anywhere.
  4. The ending, which currently stops on a table.
  5. The codec count — the enum lists 40, the prose says 39 in two places.

Verification

make compile clean, 729/729 ctest pass, make lint clean except gitleaks erroring on its own CLI (unknown command "git" for "gitleaks"), which is pre-existing and not a finding.

Not verified locally: the paper does not render here — make transcode-view.html fails fetching wg21.link behind a TLS-intercepting proxy — so fence, div, and table balance were checked by hand. CI should render it. That is part of why this PR exists.

🤖 Generated with Claude Code

steve-downey and others added 3 commits August 12, 2026 18:10
4269f434 Improve paper layout make rules and tests
7a81154f Split Makefile fragments by project layout

git-subtree-dir: papers/wg21
git-subtree-split: 4269f434ed688170d404be3324235768e82d5e77
decode_to / encode_to / decode_into / encode_into already existed in
detail/bulk_transcode.hpp, and detail/ is only a directory convention here:
the umbrella header includes it and the module exports it, the same as
null_term and transcode_string. So they were public API while the paper, the
README, and the header comment all said they were not proposed. The tests had
been rewritten to exercise the pipelines instead ("replaces decode_to(codec,
range)"), leaving all eight helpers with no coverage.

Settle it the other way: propose them. Converting a buffer to a container is
the operation users come for, and withholding the name only moves the question
to every code review and every committee discussion of the paper. Each helper
is a one-line forward to the pipeline it names, and the paper specifies it as
that pipeline.

- paper: the section now runs the concession rather than the assertion --
  the principled reason not to propose them, then why we do anyway. Overview,
  examples, comparison table and footnote 2 follow.
- README: drop "no dedicated bulk API is needed"; name the helpers in the
  four bulk rows.
- constexpr on the WHATWG decode_to/encode_to overloads, which lacked it
  while the pluggable overloads had it.
- 18 tests covering all eight helpers, four of them consteval. Each
  container-returning case is checked against a literal and against the
  pipeline it is specified as.

Also a voice pass over the paper's prose. The abstract opens on the thesis,
Context and Motivation is broken up, and the design decisions that had an
objection worth raising -- rejecting char8_t, the compile-time codec -- now
argue by concession instead of asserting. Five TODO markers are left for
prose only I can write, including the answer to Jan's epigraph.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant