Table of Contents

PHP RFC: Move to RNG functions into ext/random

Note

This RFC has been moved to Decline, as it is no longer needed due to changes in the proposal.

Introduction

This is due to the historical background, starting with lcg.c / php_lcg.h, the first implementation of the linear congruential generator (LCG), followed by rand.c / php_rand.c, which calls the libc random number implementation, and the Mersenne Twister implementation. mt_rand.c / php_mt_rand.h, an implementation of the Mersenne Twister, and random.c / php_random.h, a CSPRNG implementation, respectively, in the ext/standard extension.

The rand.c / php_rand.h to call the libc implementation is no longer relevant due to its alias to the Mersenne Twister in PHP 7.1, and is left for compatibility only.

RNGs are a frequently used feature in various implementations, and it is suggested that RNG-related functionality be carved out of the ext/standard extension and kindly made into an ext/random extension to reduce complexity and allow for future extensibility.

Proposal

Create a new ext/random extension and move all the following functions of the ext/standard extension.

Userland Functions:

Internal APIs:

These features are provided in a single random.c / php_random.h, and ext/random is always bundled with all builds of PHP, as is ext/standard.

In addition, header files containing the following contents will continue to be provided for extensions and downstream projects that previously depended on ext/standard features. These are a transitional measure until the next major version and will be removed in the future.

Backward Incompatible Changes

none

Proposed PHP Version(s)

PHP 8.2

RFC Impact

To SAPIs

none

To Existing Extensions

Will need to change the including header file.

To Opcache

none

New Constants

none

php.ini Defaults

none

Open Issues

none

Patches and Tests

https://github.com/php/php-src/pull/7473

Implementation

https://github.com/php/php-src/pull/7473

References

https://externals.io/message/115918 https://wiki.php.net/rfc/rng_extension