Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:112765 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 23779 invoked from network); 5 Jan 2021 15:17:29 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 5 Jan 2021 15:17:29 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id DBA961804D4 for ; Tue, 5 Jan 2021 06:53:41 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Tue, 5 Jan 2021 06:53:41 -0800 (PST) Received: by mail-lf1-f52.google.com with SMTP id o17so73196941lfg.4 for ; Tue, 05 Jan 2021 06:53:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=1XaUS54lFJXKhA/uyIaJjnyOU6Glv3hyQMWLGYqHOx4=; b=dOAv+blay7BaAPgFdimHoGEhQJ9U1RUNDdsgfL6oxU6igwNrJRrm3CZ2Y/+GzvJALE cVw1knf6zkLQ9rbYr6jMuOCj9DLpSkredxp95mAhNToLk8mhovpmaFyNclBF1btWRrlc VEVvsNUq+pnWF6kslJ1MVmel0DyaqbNOjPYXvs2UTxUGyDNQUwhK011YCzcen87jOrCI U3H/eUC29X99soMwZdQnQm0ZR8lJfs5Hi5aN9sow7VXDs+BKObF3tsEIlHjOGzA1e3R6 OFYRqTqSBsmyGwPn9muyV60QkN7dh1wO3UPINZROaaUrXqKPiai0qi8+28F6fMN1u/7i 7XKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=1XaUS54lFJXKhA/uyIaJjnyOU6Glv3hyQMWLGYqHOx4=; b=fRystxcd+WoTOybrk1FJUV1W76UB2lgYOUg8W0zbA3sG7DcB4soc00FGPvUKp6udxX gt9yWeScH8tjeJtQDxQs2PB7CZP8Lu5h1tS/C1BiA38tRO1x3GFwN2PsEjBuwhulSkQF M6DShO1LHn68UYWAOe2dvPORPOLiY2xaRe3AR9LnFHvsT058Hj8eONWet41zzhMTLZob Chup0rLsFFbY0zmZMqf7QL2JzdQ4ppS5tR1O37xDbcOjOmj7ZJsk1m8DyZ2stwxT7dq2 z4ra7MMzxvMgaAFT8Pubxdd2uwjbm3SvR8Y7SRxNkWAR85QiUbbnrT3qKJd/6GytUpd5 tYrg== X-Gm-Message-State: AOAM533m1m1XEuRGqW+b/fHdq9jgfupMRk0EuGWQeFgZRkeQEFiggy31 +mFPjujtP4M0LjGkmFofcaCwAj9PqOO8JKu3h6A= X-Google-Smtp-Source: ABdhPJzj5OlDpvIpeX2IHYhejg1Q6ObsoH1iQ6Kj3weDhoFd2ubp3HULIOriNF5tdgDuUoK3dz6wkqlkRiESOmsyQ2E= X-Received: by 2002:a05:6512:108b:: with SMTP id j11mr36874681lfg.44.1609858416971; Tue, 05 Jan 2021 06:53:36 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: Date: Tue, 5 Jan 2021 15:53:20 +0100 Message-ID: To: zeriyoshi Cc: PHP internals Content-Type: multipart/alternative; boundary="0000000000001514f805b8285fff" Subject: Re: [PHP-DEV] Re: Improving PRNG implementation. From: nikita.ppv@gmail.com (Nikita Popov) --0000000000001514f805b8285fff Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 24, 2020 at 5:12 PM zeriyoshi wrote: > I updated the RFC draft and changed it to a proposal to bifurcate the > interface. > > https://wiki.php.net/rfc/object_scope_prng > > At the same time, I was looking into the RNG problem in Swoole and found > out that the problem was actually occurring. > > https://www.easyswoole.com/En/Other/random.html > > The above problem with Swoole is only for child processes and can be fixe= d > by the user, but as mentioned above, I think it will become more serious = as > PHP becomes more complex in the future. > I hadn't thought of this before, but we might want to consider deprecatin= g > existing state-dependent RNG functions. > > I am seeking feedback on this proposal in order to take the RFC to the ne= xt > step. > Thank you in advance. > > Regards, > Go Kudo > I think the general direction of your second proposal (B) is the right one, but I'm concerned about some of the details. First and foremost, I don't think that RNG should extend Iterator. Just having a single "next()" method or similar is sufficient. The Iterator interface provides many additional things that don't really make sense in this context and only complicate the implementation. We should clearly specify the value range of next() though. I assume that for portability reasons (ensure same sequence on 32-bit and 64-bit) this would have to be a sign-extended 32-bit value. The type B proposal distinguishes between a RNG and a PRNG interface. Is this really useful? I don't think the value of the "getSeed()" method is high enough to justify the split interface. The RNGUtil class has methods like: public static function shuffleArray(int $randomNumber, array $arr): array; This doesn't make sense to me, as a single random number is not enough to shuffle a whole array :) Instead this should be accepting the RNG and perform an internal call to next() (of course, with a fast by-pass mechanism if the RNG is implemented internally): public static function shuffleArray(RNG $rng, array $arr): array; I'm also wondering why this is a static class rather than a set of free-standing functions. Why RNGUtil::shuffleArray() rather than rng_shuffle_array()? Regards, Nikita 2020=E5=B9=B412=E6=9C=8816=E6=97=A5(=E6=B0=B4) 23:46 zeriyoshi : > > > Nice to meet you, internals. > > > > PHP 8.0 has been released. With the inclusion of JIT, PHP is about to b= e > > extended beyond the web. > > > > So I'd like to make a few suggestions. > > > > First , PHP has the historical Mersenne Twister PRNG. However, this > > implementation keeps its state in a global and cannot be handled as an > > object like other languages (e.g. Java). > > > > So, I created a PHP Extension and proposed it to PECL. > > > > https://marc.info/?l=3Dpecl-dev&m=3D160795415604102&w=3D2 > > https://github.com/zeriyoshi/php-ext-orng > > > > But, Then I looked at the mailing list archives and noticed that a > similar > > proposal had been made before. > > > > https://externals.io/message/98021#98130 > > > > I feel that this suggestion is needed now to expand PHP beyond the web. > > > > Second suggestion is to stop using the Combined LCG as the default seed > > value for each function. > > > > PHP's Combined LCG only uses PID (or ZTS Thread ID) and time as entropy= . > > https://github.com/php/php-src/blob/master/ext/standard/lcg.c#L72 > > > > With the development of container technology, this problem seems to be > > getting more serious. So I think we should use the random numbers > provided > > by the OS (getrandom on Linux) if available. > > > > I would like to hear your opinions. > > > > Regards > > Go Kudo > > > --0000000000001514f805b8285fff--