Joe, Also that would be more helpful if you wrote some examples or guides, with your advises instead of writing one sentence emails. I would be more happy as a rookie that way.
Yours, Midori > On 03 Apr 2016, at 18:17, Midori Kocak <mtko...@gmail.com> wrote: > > Hello Joe, > > Those were examples for your feedback. > > Thanks, > Midori > >> On 03 Apr 2016, at 18:16, Joe Watkins <pthre...@pthreads.org >> <mailto:pthre...@pthreads.org>> wrote: >> >> Morning Midori, >> >> PHP doesn't use PHPUnit tests. >> >> Please see: https://qa.php.net/write-test.php >> <https://qa.php.net/write-test.php> >> >> Cheers >> Joe >> >> On Sun, Apr 3, 2016 at 3:41 PM, Midori Kocak <mtko...@gmail.com >> <mailto:mtko...@gmail.com>> wrote: >> Yes, I think I should too. But still no feedbacks :( >> >> > On 03 Apr 2016, at 13:15, Björn Larsson <bjorn.x.lars...@telia.com >> > <mailto:bjorn.x.lars...@telia.com>> wrote: >> > >> > Hi Midori, >> > >> > Will you update the RFC also? Even if it's not the normal way of doing >> > things, one should keep in mind that RFC's are often listed as references >> > in books about PHP, being the first piece of documentation. Two such >> > examples are: >> > - https://daveyshafik.com/archives/book/upgrading-to-php-7 >> > <https://daveyshafik.com/archives/book/upgrading-to-php-7> >> > # In Appendix B >> > - http://www.php7book.com <http://www.php7book.com/> >> > # At the end of every chapter >> > >> > Regards //Björn Larsson >> > >> > PS Maybe best to finish implementation and tests first. >> > >> > Den 2016-04-03 kl. 03:17, skrev Midori Kocak: >> >> Dear All, >> >> >> >> Based on the concerns I wrote some tests. Can you check those and give >> >> feedback? Also, in ruby, $a ||= $b, the implementation is not equal to $a >> >> = $a || $b, but is equal to $a || $a = $b; I am a little bit confused, I >> >> am not entirely sure, but I guess this approach would solve our problems. >> >> >> >> https://gist.github.com/midorikocak/abc9fd9b6ca30359d201bc859edba9ee >> >> <https://gist.github.com/midorikocak/abc9fd9b6ca30359d201bc859edba9ee> >> >> <https://gist.github.com/midorikocak/abc9fd9b6ca30359d201bc859edba9ee >> >> <https://gist.github.com/midorikocak/abc9fd9b6ca30359d201bc859edba9ee>> >> >> >> >> We can use these examples as the part of the new documentation and as a >> >> guideline for implementation tests. Can you add also any extreme cases >> >> that should raise errors to my test? >> >> >> >> Yours, >> >> Midori >> >> >> >>> On 25 Mar 2016, at 13:42, Nikita Popov <nikita....@gmail.com >> >>> <mailto:nikita....@gmail.com>> wrote: >> >>> >> >>> On Fri, Mar 25, 2016 at 11:59 AM, Midori Kocak <mtko...@gmail.com >> >>> <mailto:mtko...@gmail.com> <mailto:mtko...@gmail.com >> >>> <mailto:mtko...@gmail.com>>> wrote: >> >>> Hi Everyone, >> >>> >> >>> I think it's better idea to combine those two assignment operator RFC’s. >> >>> So I am going to close the current one and open ??= with ?:= >> >>> What do you think? And we have to find better names. >> >>> >> >>> Wishes, >> >>> Midori Kocak >> >>> >> >>> I'd prefer to keep them separate, or at least keep their votes separate. >> >>> The ??= operator vote is currently unanimous at 24:0, while the ?:= vote >> >>> was closed at something like 9:2, so there clearly are differences of >> >>> opinion regarding these two operators. >> >>> >> >>> I'll use this chance for some comments on the proposal. I can see the >> >>> general usefulness of ??=, but right now the RFC is severely >> >>> underspecified and I'm uncomfortable voting on it in it's current form >> >>> as so much will depend on the final implementation. So, what do I mean >> >>> by underspecified? >> >>> >> >>> The only statement the RFC essentially makes is that $a ??= $b will be >> >>> the same as $a = $a ?? $b, for variable-expression $a and expression $b. >> >>> This statement, while a good high-level illustration, does not explain >> >>> the exact behavior of this operator. >> >>> >> >>> For example, consider the expression $a[print 'X'] ??= $b. A simple >> >>> desugaring into $a[print 'X'] = $a[print 'X'] ?? $b will result in 'X' >> >>> being printed twice. However, this is not how all other existing >> >>> compound assignment operators behave: They will print X only once, as >> >>> the LHS is only evaluated once. I assume that ??= would behave the same >> >>> way. >> >>> >> >>> However, with ??= the problem becomes more complicated. Let us assume >> >>> that $a is an ArrayAccess object and consider the expression $a[0] ??= >> >>> $b. Let us further assume that $x = $a->offsetGet(0) is non-null. Will >> >>> $a[0] ??= $b result in a call to $a->offsetSet(0, $x)? This is what >> >>> would normally happen with a compound assignment operator and what would >> >>> be implied by the desugaring $a[0] = $a[0] ?? $b. However this >> >>> assignment is not really necessary, as we're just reassigning the same >> >>> value. So, does the call happen or not? Is the proper desugaring maybe >> >>> if (!isset($a[0])) $a[0] = $b? >> >>> >> >>> Let us now assume that $a is a recursive ArrayAccess object with >> >>> by-reference offsetGet() and consider the expression $a[0][1] ??= expr. >> >>> For a normal compound assignment operator, this would issue the call >> >>> sequence >> >>> >> >>> $b = expr; >> >>> $x =& $a->offsetGet(0); >> >>> $y = $x->offsetGet(1); >> >>> $y OP= $b; >> >>> $x->offsetSet(1, $y); >> >>> >> >>> Note that we only issue one offsetSet() at the end. We do not refetch $x >> >>> via $a->offsetGet(0). How would the same work with the ??= operator? As >> >>> the RHS is evaluated lazily, it is my opinion that only performing the >> >>> offsetSet() call without refetching $x beforehand would violate PHP's >> >>> indirection memory model. Additionally as ??= has to fetch offsets in >> >>> BP_VAR_IS mode, we likely wouldn't be able to write them without >> >>> refetching anymore. >> >>> >> >>> So, what would be the desugared call sequence for $a[0][1] ??= expr? >> >>> Something like this? >> >>> >> >>> if (!$a->offsetHas(0)) { >> >>> goto assign; >> >>> } >> >>> $x = $a->offsetGet(0); >> >>> if (x === null) { >> >>> goto assign; >> >>> } >> >>> if (!$x->offsetHas(0)) { >> >>> goto assign; >> >>> } >> >>> $y = $x->offsetGet(0); >> >>> if ($y === null) { >> >>> goto assign; >> >>> } >> >>> goto done; >> >>> assign: >> >>> $b = expr; >> >>> $x =& $a->offsetGet(0); >> >>> $x->offsetSet(1, $b); >> >>> done: >> >>> >> >>> That would be some first thoughts on the issue, though I'm sure there >> >>> are more subtleties involved. I'd like to see the exact behavior of ??= >> >>> (and ?:=) specified. >> >>> >> >>> I'm also pretty sure that writing a patch for this will not be entirely >> >>> easy. The combination of execute-once LHS side-effects and lazy RHS >> >>> execution does not translate well to PHP's VM constraints. >> >>> >> >>> Regards, >> >>> Nikita >> >> >> > >> >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> <http://www.php.net/unsub.php> >> >> >