Morning Midori, PHP doesn't use PHPUnit tests.
Please see: https://qa.php.net/write-test.php Cheers Joe On Sun, Apr 3, 2016 at 3:41 PM, Midori Kocak <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> > 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 > > # In Appendix B > > - 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> > >> > >> 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> wrote: > >>> > >>> On Fri, Mar 25, 2016 at 11:59 AM, Midori Kocak <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 > >