Build1 distinct publisher3 min readUpdated
A newcomer's proposal to search part of an array drew 25 messages and a counter-design: build the lazy slice first, and the narrow function is redundant. The RFC still targets an already-closed 8.6.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The whole justification for the function is a copy that should not have to happen. `array_slice()` materialises a second array so that `array_search()` has something to scan, and `array_search_range()` was offered as the way around it [1]. But Rowan Tommins' review of the submitted implementation found it still walking the entire array [14], and the polyfill added to the wiki calls `array_slice()`, which performs the copy the function exists to avoid [13]. As it stands, the artefact does not exhibit the property it is arguing for.
That is fixable. The cost estimate is the harder disagreement. Sepehr Mahmoudi's position is that the general mechanism does not exist, and that building it would mean a new type in the engine plus updates to potentially hundreds of array functions [8]. Rowan's counter-plan does not touch hundreds of array functions: an optimised `ArraySliceIterator` first, then `iter_search` and `iter_any` that work with any iterator, then possibly syntax later [11]. He wrote the first two in under 20 lines each [12], so under 40 lines of prototype for the pieces that make the narrow function unnecessary [1]. Both figures are honest, because they price different jobs. Retrofitting the existing array surface to accept a slice type is expensive. Adding two functions that consume iterators is not, because the iterator contract is already in the language.
Rowan stated the trade in one line: "if we add an ArraySlice type then array_search_range would immediately become redundant" [7]. His preference was for "a way to create a 'lazy array slice', and then accept that in functions which can use it safely", with Swift's non-copying array references as the reference point [5][6]. Larry Garfield agreed and suggested shelving the RFC [9]. mickmackusa went further, saying he had never had a professional project that needed the function and asking whether an array wanting a pagination-style search is the wrong data structure to begin with [10].
The scheduling matters as much as the design. Weilin Du replied on the evening the idea was posted to say the soft feature freeze had already closed 8.6 to it [4], and the RFC is nonetheless still a draft still targeting 8.6 [14]. Anything argued from here is being argued into 8.7, which is exactly the window in which a reviewer can say the general primitive should come first and lose nothing by waiting.
The same reflex appeared elsewhere in the week at higher speed. Henrik Skov floated a `params` keyword to name a block of arguments once and spread it into a call, collapsing a six-argument cookie call to one line [19]; AllenJB answered 22 minutes later that named arguments already do this [20]. Two proposals, both met with a version of the same reply: the general mechanism is either present or cheap, and the specific convenience has to justify permanent surface area against it. Anyone drafting for 8.7 should read the 20-line prototype as the bar, not the freeze date.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
Sepehr Mahmoudi proposed array_search_range(), an array_search() that takes an offset and a length so part of an array can be searched without building an intermediate copy with array_slice().
The five-argument function proposal produced 25 messages across 3 threads and was the central design argument of the week in PHP internals for the week to August 19, 2026.
Sepehr Mahmoudi had introduced himself to the internals list 8 days before the August 19, 2026 recording.
Weilin Du replied the same evening to say the soft feature freeze had already closed 8.6 to the proposal.
Rowan Tommins wrote: "I think it would be better to design something more composable - that is, a way to create a 'lazy array slice', and then accept that in functions which can use it safely."
Rowan Tommins pointed at Swift, which has types that let you refer to part of an array without copying any of it.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single-publisher summary with verbatim quotes but no primary links
Every claim rests on one secondary account, a weekly newsletter summarizing public internals threads. It is specific and checkable in principle — named participants, direct quotes, message and thread counts, RFC and pull-request status — which raises credibility, but the cluster supplies no archive links, RFC page, or second publisher to corroborate any of it.
Nothing shipped: draft RFC on a frozen branch, pull request withdrawn
Adoption is near zero by the story's own account. The proposal is a draft aimed at a branch already closed by the soft feature freeze, the competing lazy-slice design exists only as under-40 lines of list prototype code with no RFC, and the one open pull request in the cluster was withdrawn and deferred to a future deprecations RFC. No release, merge, vote, or user deployment is reported.
Framing inflates a 25-message thread; substance is reported deflationary
The article's own reporting undercuts any hype: it states the RFC is a draft on a closed branch and that the implementation still walks the whole array. The mild overstatement is editorial framing — a 25-message thread that produced no shippable change is presented as the week's 'top story' and 'central design argument' — so claims sit slightly ahead of outcomes rather than far ahead.
Sponsored ad read inside editorial body, unrelated to reported threads
The roundup carries an in-body promotional read for Ballast (ballast.now) with product claims about velocity and durability scores, so the publisher has a commercial interest in newsletter reach. That incentive is not attached to any subject of the reported threads — the participants are volunteer internals contributors and no vendor benefits from the array_search_range or extension-name outcomes — so distortion pressure on the reported claims is limited.
Internally consistent but uncorroborated single account
The narrative is coherent and self-consistent, and the mechanical facts (freeze closing 8.6, draft RFC, withdrawn pull request) are the sort a regular internals summarizer gets right. Confidence is capped by having exactly one publisher, no primary citations, and outcomes that were still open at the recording date, including a thread nobody had yet replied to.
build
Six MariaDB versions, one real difference: the only reason to leave 10.6 is the July 2026 clock1 distinct publisher
build
Thirty lines of Doctrine filter, and the query paths where it is simply not there1 distinct publisher
build
One game, two codebases: where parity belongs when you ship native on iOS and Android1 distinct publisher
build
PHP-FPM's dynamic pool is a one-second idle-worker loop, not a capacity plan1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 21, 2026