Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:108775 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 48579 invoked from network); 26 Feb 2020 21:15:04 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 26 Feb 2020 21:15:04 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id B7D8218054C for ; Wed, 26 Feb 2020 11:32:46 -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, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) (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 ; Wed, 26 Feb 2020 11:32:46 -0800 (PST) Received: by mail-pg1-f194.google.com with SMTP id z12so157223pgl.4 for ; Wed, 26 Feb 2020 11:32:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:autocrypt:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=VzobzJ3yNijGqfzYhZ9ODrhen/4GBAT7U2zJojZk9SU=; b=jzMylXu1xJ6zi7Ufb9EoChPSE1hForVzZtnf2ie2vg0FaUmEORpLBInPppDsH4whpt ypcBz8435JcqPcotwJoxPPTq/bbU8/TDP+Kx5KvUDce9gxqAHymnCfFQ7r7KIvq6JS3F zxNN1z16a5fB2OypDhNLWlRZGZVB/075F31tq1h3wP4R0vKIfk1DP+rslfPXgFbHUT14 bgjgm224hRoaj0sYiDuEQplGR7K+XIKM22y8LuSwjsPOi8rmECb+fB/Ph3h/r4n26aEd urV0BUtcI+2fJgvHCUoAnYr4TUOc9+3MSR2hTF4Cm6ZN3uYz4T4LJqSsbHt8JqcHi4OA 1ERw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:autocrypt:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=VzobzJ3yNijGqfzYhZ9ODrhen/4GBAT7U2zJojZk9SU=; b=k8XkbV+5iLmdfOJzkJj5pHgv/5h96DtGFlwkTfReIt3gTZYGFkBffVUJemFDnYPrUi Xzy2BUZpb70Cd3/AWi8RCfSpHU+MZ71WXt8Ya1Svnj9lTXrm5lXwOOhXjMESrW5rgJcd cIJ3Jo5ENY/tcbS3GQsF+wqyK1GH25CImIWtq3CxJhC5IHPmrTIsQPCJ8A0SPSjKqCSi ynU7scNvc7NMr0FJq46H1x966+nm3jmvc3YdpIIkM6JWXkC3b2iTzRL/7/u85bil34/x IQmQqGpFiQtJJybnfO5X4/0A6fl48Vwe0lEkLfOQY6IzcOGJykVgoV3L69ZV23T/vvt2 iZUw== X-Gm-Message-State: APjAAAW8z/ZuRgYFAmnegc7reopg/9ZxSgzNEKcj1pAxb9SyvGd3s5zx lAx7UxwVZj7oZ0x2o/jQM2Wk2THZVg== X-Google-Smtp-Source: APXvYqzbEwVy1E7ZSQTJUVurxwDd0gqjmHtpUvGjrqnCEcn94eIOrZzB5L+iIeUz90ZVszqJf8nT4Q== X-Received: by 2002:a63:2c50:: with SMTP id s77mr391428pgs.182.1582745564489; Wed, 26 Feb 2020 11:32:44 -0800 (PST) Received: from Stas-Mac.local (173-11-90-100-SFBA.hfc.comcastbusiness.net. [173.11.90.100]) by smtp.gmail.com with ESMTPSA id k9sm4066977pfh.153.2020.02.26.11.32.43 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 26 Feb 2020 11:32:43 -0800 (PST) To: Nikita Popov , PHP internals References: Autocrypt: addr=smalyshev@gmail.com; prefer-encrypt=mutual; keydata= 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 Message-ID: Date: Wed, 26 Feb 2020 11:32:43 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Support rewinding of generators From: smalyshev@gmail.com (Stanislav Malyshev) Hi! > There is a relatively simple (at least conceptually) way to make generators > rewindable: Remember the original arguments of the function, and basically > "re-invoke" it on rewind(). That is provided that: 1. The original arguments of the function can be "remembered" - those can be complex object with a lot of state, not always visible to PHP, preserving which may be impossible. 2. The generator function is pure and does not have side effects - or at least side effects of rewinding are expected and desirable. It also means that we'd have to always preserve the arguments of the generator function in the state they were when it was called or at least try to - not sure what performance impact this implies. That or explicitly declare the generator rewindable with the implication that once we declare that we shouldn't pass any arguments to it that can't be or shouldn't be preserved. -- Stas Malyshev smalyshev@gmail.com