Skip to content

[pull] master from php:master#285

Merged
pull[bot] merged 11 commits intoLadyK-21:masterfrom
php:master
Nov 8, 2025
Merged

[pull] master from php:master#285
pull[bot] merged 11 commits intoLadyK-21:masterfrom
php:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Nov 8, 2025

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

* PHP-8.3:
  Fix memory leak in array_diff() with custom type checks
* PHP-8.4:
  Fix memory leak in array_diff() with custom type checks
* PHP-8.5:
  Fix memory leak in array_diff() with custom type checks
Three optimizations:
- If the entire string is returned, we don't need to duplicate it.
- Use packed filling logic.
- Use fast construction of strings. This is useful when splitting
  strings on length=1. In that case I get a 6x speedup in the code
  below.

Bench:
```php
$x = str_repeat('A', 100);
for ($i = 0; $i < 1000000; $i++)
    str_split($x, 10);
```

On an i7-4790:
```
Benchmark 1: ./sapi/cli/php x.php
  Time (mean ± σ):     160.1 ms ±   6.4 ms    [User: 157.3 ms, System: 1.8 ms]
  Range (min … max):   155.6 ms … 184.7 ms    18 runs

Benchmark 2: ./sapi/cli/php_old x.php
  Time (mean ± σ):     202.6 ms ±   4.0 ms    [User: 199.1 ms, System: 1.9 ms]
  Range (min … max):   197.4 ms … 209.2 ms    14 runs

Summary
  ./sapi/cli/php x.php  ran
    1.27 ± 0.06 times faster than ./sapi/cli/php_old x.php
```

The performance gain increases with smaller lengths.
Since this will be copied on the call frame, a refcounted copy is not
necessary.
This makes the code more compact, and less weird: the stub doesn't
indicate that this function can return NULL.
@pull pull bot locked and limited conversation to collaborators Nov 8, 2025
@pull pull bot added the ⤵️ pull label Nov 8, 2025
@pull pull bot merged commit 7b4270a into LadyK-21:master Nov 8, 2025
9 of 10 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant