On 26 June 2021 02:39:52 CEST, Go Kudo <zeriyo...@gmail.com> wrote:
>Hello Internals.
>
>RFC has been reorganized for finalization.
>
>https://wiki.php.net/rfc/rng_extension
>
>The changes from the previous version are as follows:
>
>- Changed again to a class-based approach. The argument can be omitted, in
>which case an instance of XorShift128Plus will be created automatically.
>- Future scope was specified in the RFC and the functionality was separated
>as a Random extension.
>- Changed to separate it as a Random extension and use the appropriate
>namespace.
>- In order to extend the versatility of the final class, Random, a
>RandomInterface has been added, similar in approach to the
>DateTimeInterface.
>
>I've done a tidy implementation to make this final, but I'm currently
>suffering from error detection by Valgrind for unknown reasons.
>
>Implementation is here: https://github.com/php/php-src/pull/7079
>
>This can be reproduced with the following code.
>
>```sh
># Success
>$ valgrind ./sapi/cli/php -r '$random = new Random(); $random->nextInt();'
>==95522== Memcheck, a memory error detector
>==95522== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
>==95522== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
>==95522== Command: ./sapi/cli/php -r $random\ =\ new\ Random();\
>$random-\>nextInt();
>==95522==
>==95522==
>==95522== HEAP SUMMARY:
>==95522==     in use at exit: 1,286 bytes in 32 blocks
>==95522==   total heap usage: 28,445 allocs, 28,413 frees, 4,333,047 bytes
>allocated
>==95522==
>==95522== LEAK SUMMARY:
>==95522==    definitely lost: 0 bytes in 0 blocks
>==95522==    indirectly lost: 0 bytes in 0 blocks
>==95522==      possibly lost: 0 bytes in 0 blocks
>==95522==    still reachable: 1,286 bytes in 32 blocks
>==95522==         suppressed: 0 bytes in 0 blocks
>==95522== Rerun with --leak-check=full to see details of leaked memory
>==95522==
>==95522== For counts of detected and suppressed errors, rerun with: -v
>==95522== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
>
># Fail
>$ valgrind ./sapi/cli/php -r '$random = new Random(); $random->nextInt()
>=== $random->nextInt();'
>==95395== Memcheck, a memory error detector
>==95395== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
>==95395== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
>==95395== Command: ./sapi/cli/php -r $random\ =\ new\ Random();\
>$random-\>nextInt()\ ===\ $random-\>nextInt();
>==95395==
>==95395== Conditional jump or move depends on uninitialised value(s)
>==95395==    at 0x966925: ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER
>(zend_vm_execute.h:27024)
>==95395==    by 0x99AC27: execute_ex (zend_vm_execute.h:57236)
>==95395==    by 0x99C902: zend_execute (zend_vm_execute.h:59026)
>==95395==    by 0x8DB6B4: zend_eval_stringl (zend_execute_API.c:1191)
>==95395==    by 0x8DB861: zend_eval_stringl_ex (zend_execute_API.c:1233)
>==95395==    by 0x8DB8D6: zend_eval_string_ex (zend_execute_API.c:1243)
>==95395==    by 0xA4DAE4: do_cli (php_cli.c:995)
>==95395==    by 0xA4E8E2: main (php_cli.c:1366)
>==95395==
>==95395==
>==95395== HEAP SUMMARY:
>==95395==     in use at exit: 1,286 bytes in 32 blocks
>==95395==   total heap usage: 28,445 allocs, 28,413 frees, 4,333,070 bytes
>allocated
>==95395==
>==95395== LEAK SUMMARY:
>==95395==    definitely lost: 0 bytes in 0 blocks
>==95395==    indirectly lost: 0 bytes in 0 blocks
>==95395==      possibly lost: 0 bytes in 0 blocks
>==95395==    still reachable: 1,286 bytes in 32 blocks
>==95395==         suppressed: 0 bytes in 0 blocks
>==95395== Rerun with --leak-check=full to see details of leaked memory
>==95395==
>==95395== For counts of detected and suppressed errors, rerun with: -v
>==95395== Use --track-origins=yes to see where uninitialised values come
>from
>==95395== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
>```
>
>However, the detection is internal to the Zend VM and the cause has not
>been identified. From the code, it looks like memory management is being
>done properly.
>
>I have a somewhat tricky way of allocating memory to make the process
>common, do I need to give some hints to Valgrind?
>
>If you know, I would appreciate your advice on this issue.
>
>Regards,
>Go Kudo

>Hello Internals.
>
>RFC has been reorganized for finalization.
>
>https://wiki.php.net/rfc/rng_extension
I think this is a good reorganization.
I would like to point out that this does not quite follow the Namespace Policy
(https://wiki.php.net/rfc/namespaces_in_bundled_extensions):
Notably it says:
> All symbols defined in the extension should be part of the extension's 
> top-level
> namespace or a sub-namespace.
This means that the Random class and RandomInterface interface should be
Random\Random and Random\RandomInterface respectively.
The symbols in the Random\NumberGenerator sub-namespace are okay,
as per the policy.
Note, however, that the policy says "should", and if there is a good argument
made, the guidelines must not be followed.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to