Re: [PHP-DEV] Re: [RFC] Deprecate dynamic properties

This is only part of a thread. view whole thread
  116355
November 15, 2021 09:52 derick@php.net (Derick Rethans)
Dear Internals,

On Wed, 10 Nov 2021, Nikita Popov wrote:

> On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> wrote: > > > This RFC takes the more direct route of deprecating this > > functionality entirely. I expect that this will have relatively > > little impact on modern code (e.g. in Symfony I could fix the vast > > majority of deprecation warnings with a three-line diff), but may > > have a big impact on legacy code that doesn't declare properties at > > all. > > > > I plan to open voting on this RFC soon. Most of the feedback was > positive, apart from the initial choice of opt-int mechanism, and that > part should be addressed by the switch to the > #[AllowDynamicProperties] attribute.
The voting is now open, but I think one thing was not taken into account here, the many small changes that push work to maintainers of Open Source library and CI related tools. In the last few years, the release cadence of PHP has increased, which is great for new features. It however has not been helpful to introduce many small deprecations and BC breaks in every single release. This invariably is making maintainers of Open Source anxious, and frustrated as so much work is need to keep things up to date. I know they are *deprecations*, and applications can turn these off, but that's not the case for maintainers of libraries. Before we introduce many more of this into PHP 8.2, I think it would be wise to figure out a way how to: - improve the langauge with new features - keep maintenance cost for open source library and CI tools much lower - come up with a set of guidelines for when it is necessary to introduce BC breaks and deprecations. I am all for improving the language and making it more feature rich, but we have not spend enough time considering the impacts to the full ecosystem. I have therefore voted "no" on this RFC, and I hope you will too. cheers, Derick -- PHP 7.4 Release Manager Host of PHP Internals News: https://phpinternals.news Like Xdebug? Consider supporting me: https://xdebug.org/support https://derickrethans.nl | https://xdebug.org | https://dram.io twitter: @derickr and @xdebug
  116367
November 15, 2021 12:51 Andreas Heigl <andreas@heigl.org>
--C4Xq0uG20w1jPRz1KzEy3YghGXvIa3LQT
Content-Type: multipart/mixed;
 boundary="------------4EA4DA2EF1CC261F57DBAC43"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------4EA4DA2EF1CC261F57DBAC43
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hea all.

On 15.11.21 10:52, Derick Rethans wrote:
> Dear Internals, >=20 > On Wed, 10 Nov 2021, Nikita Popov wrote: >=20 >> On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> w= rote:
>> >>> This RFC takes the more direct route of deprecating this >>> functionality entirely. I expect that this will have relatively >>> little impact on modern code (e.g. in Symfony I could fix the vast >>> majority of deprecation warnings with a three-line diff), but may >>> have a big impact on legacy code that doesn't declare properties at >>> all. >>> >> >> I plan to open voting on this RFC soon. Most of the feedback was >> positive, apart from the initial choice of opt-int mechanism, and that=
>> part should be addressed by the switch to the >> #[AllowDynamicProperties] attribute. >=20 > The voting is now open, but I think one thing was not taken into accoun= t
> here, the many small changes that push work to maintainers of Open > Source library and CI related tools. >=20 > In the last few years, the release cadence of PHP has increased, which > is great for new features. It however has not been helpful to introduce=
> many small deprecations and BC breaks in every single release. >=20 > This invariably is making maintainers of Open Source anxious, and > frustrated as so much work is need to keep things up to date. I know > they are *deprecations*, and applications can turn these off, but that'= s
> not the case for maintainers of libraries. >=20 > Before we introduce many more of this into PHP 8.2, I think it would be=
> wise to figure out a way how to: >=20 > - improve the langauge with new features > - keep maintenance cost for open source library and CI tools much lower=
> - come up with a set of guidelines for when it is necessary to introduc= e
> BC breaks and deprecations. >=20 > I am all for improving the language and making it more feature rich, bu= t
> we have not spend enough time considering the impacts to the full > ecosystem. >=20 > I have therefore voted "no" on this RFC, and I hope you will too. >=20 > cheers, > Derick
After some thoughs on this RFC I have reverted my original vote and=20 voted "No" due to several reasons. For one thing it is not clear to me what the benefits are. Yes: The=20 language evolution RFC talks about "Forbidding dynamic object=20 properties" but it also specifies that "there is also a lot of old code=20 that does not declare properties, so this needs to be opt-in"[1]. And as far as I can see from the PR associated with this RFC it will not = make life easier for the internals team. It is not like there will be=20 hundreds of lines code less to maintain. On the contrary. There is more=20 code and more logic to maintain [2]. So when the only reason for the change is that one line in the RFC ("In=20 modern code, this is rarely done intentionally"[3]) then that is not=20 enough of a reasoning for me for such a code change that requires a lot=20 of existing code to change. Those that want a cleaner code can already use static code analysis to=20 find such issues (if not, I'm sure that there will be some analyzers=20 around before PHP8.2 will be around) or write appropriate tests to make=20 sure that they do not use undeclared properties. While I personally would really like to deprecate dynamic properties I=20 believe that it is the wrong thing to do for the language. At least=20 given the presented arguments why we should do it. Cheers Andreas PS: Am I the only one missing whether this is a 2/3 or a 50%+1 vote in=20 the RFC? [1]=20 https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-langu= age-evolution.md#forbidding-dynamic-object-properties [2] https://github.com/php/php-src/pull/7571/files [3] https://wiki.php.net/rfc/deprecate_dynamic_properties --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------4EA4DA2EF1CC261F57DBAC43 Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------4EA4DA2EF1CC261F57DBAC43-- --C4Xq0uG20w1jPRz1KzEy3YghGXvIa3LQT--
  116369
November 15, 2021 13:19 rowan.collins@gmail.com (Rowan Tommins)
On 15/11/2021 12:51, Andreas Heigl wrote:
> PS: Am I the only one missing whether this is a 2/3 or a 50%+1 vote in > the RFC?
All votes require a 2/3 majority as of https://wiki.php.net/rfc/abolish-narrow-margins -- Rowan Tommins [IMSoP]
  116370
November 15, 2021 13:27 Andreas Heigl <andreas@heigl.org>
--5JRW4rOsjUnAPJYc1xZXZjEKT6bVLIu2P
Content-Type: multipart/mixed;
 boundary="------------D6C6A0814B94472EDB9059EA"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------D6C6A0814B94472EDB9059EA
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

On 15.11.21 14:19, Rowan Tommins wrote:
> On 15/11/2021 12:51, Andreas Heigl wrote: >> PS: Am I the only one missing whether this is a 2/3 or a 50%+1 vote in= =20
>> the RFC?=20 >=20 >=20 > All votes require a 2/3 majority as of=20 > https://wiki.php.net/rfc/abolish-narrow-margins
Thanks! I just stumbled over the fact that some other recent RFCs still had the=20 statement "requiring a 2/3 majority" in the "Vote" part which I was=20 missing here. Cheers Andreas --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------D6C6A0814B94472EDB9059EA Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------D6C6A0814B94472EDB9059EA-- --5JRW4rOsjUnAPJYc1xZXZjEKT6bVLIu2P--
  116371
November 15, 2021 13:35 kontakt@beberlei.de (Benjamin Eberlei)
On Mon, Nov 15, 2021 at 1:52 PM Andreas Heigl <andreas@heigl.org> wrote:

> Hea all. > > On 15.11.21 10:52, Derick Rethans wrote: > > Dear Internals, > > > > On Wed, 10 Nov 2021, Nikita Popov wrote: > > > >> On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> > wrote: > >> > >>> This RFC takes the more direct route of deprecating this > >>> functionality entirely. I expect that this will have relatively > >>> little impact on modern code (e.g. in Symfony I could fix the vast > >>> majority of deprecation warnings with a three-line diff), but may > >>> have a big impact on legacy code that doesn't declare properties at > >>> all. > >>> > >> > >> I plan to open voting on this RFC soon. Most of the feedback was > >> positive, apart from the initial choice of opt-int mechanism, and that > >> part should be addressed by the switch to the > >> #[AllowDynamicProperties] attribute. > > > > The voting is now open, but I think one thing was not taken into account > > here, the many small changes that push work to maintainers of Open > > Source library and CI related tools. > > > > In the last few years, the release cadence of PHP has increased, which > > is great for new features. It however has not been helpful to introduce > > many small deprecations and BC breaks in every single release. > > > > This invariably is making maintainers of Open Source anxious, and > > frustrated as so much work is need to keep things up to date. I know > > they are *deprecations*, and applications can turn these off, but that's > > not the case for maintainers of libraries. > > > > Before we introduce many more of this into PHP 8.2, I think it would be > > wise to figure out a way how to: > > > > - improve the langauge with new features > > - keep maintenance cost for open source library and CI tools much lower > > - come up with a set of guidelines for when it is necessary to introduce > > BC breaks and deprecations. > > > > I am all for improving the language and making it more feature rich, but > > we have not spend enough time considering the impacts to the full > > ecosystem. > > > > I have therefore voted "no" on this RFC, and I hope you will too. > > > > cheers, > > Derick > > After some thoughs on this RFC I have reverted my original vote and > voted "No" due to several reasons. > > For one thing it is not clear to me what the benefits are. Yes: The > language evolution RFC talks about "Forbidding dynamic object > properties" but it also specifies that "there is also a lot of old code > that does not declare properties, so this needs to be opt-in"[1]. > > And as far as I can see from the PR associated with this RFC it will not > make life easier for the internals team. It is not like there will be > hundreds of lines code less to maintain. On the contrary. There is more > code and more logic to maintain [2]. >
This RFCs goal is not to have less code to maintain, but to fix a nasty class of errors in user errors where they accidently write/read to a dynamic property due to a typo, instead of accessing the declared one. True this is a mistake of the RFC not to highlight more.
> So when the only reason for the change is that one line in the RFC ("In > modern code, this is rarely done intentionally"[3]) then that is not > enough of a reasoning for me for such a code change that requires a lot > of existing code to change. > > Those that want a cleaner code can already use static code analysis to > find such issues (if not, I'm sure that there will be some analyzers > around before PHP8.2 will be around) or write appropriate tests to make > sure that they do not use undeclared properties. >
Code that intentionally or unintentionally uses dynamic properties often does not write each propery explicitly: $object->$columnName = $value; This cannot be detected by static analysers. For the case where you explitly write a property name, While static analysis and IDEs do help detecing these as problems, this class of bugs happens because you are *not* using an IDE but a text editor like Vim/Notepad++ where you maybe add a typo to a property name while writing code.
> While I personally would really like to deprecate dynamic properties I > believe that it is the wrong thing to do for the language. At least > given the presented arguments why we should do it. > > Cheers > > Andreas > > PS: Am I the only one missing whether this is a 2/3 or a 50%+1 vote in > the RFC? > > > > [1] > > https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-language-evolution.md#forbidding-dynamic-object-properties > [2] https://github.com/php/php-src/pull/7571/files > [3] https://wiki.php.net/rfc/deprecate_dynamic_properties > > -- > ,,, > (o o) > +---------------------------------------------------------ooO-(_)-Ooo-+ > | Andreas Heigl | > | mailto:andreas@heigl.org N 50°22'59.5" E 08°23'58" | > | https://andreas.heigl.org | > +---------------------------------------------------------------------+ > | https://hei.gl/appointmentwithandreas | > +---------------------------------------------------------------------+ >
  116372
November 15, 2021 13:50 nikita.ppv@gmail.com (Nikita Popov)
On Mon, Nov 15, 2021 at 1:52 PM Andreas Heigl <andreas@heigl.org> wrote:

> Hea all. > > On 15.11.21 10:52, Derick Rethans wrote: > > Dear Internals, > > > > On Wed, 10 Nov 2021, Nikita Popov wrote: > > > >> On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> > wrote: > >> > >>> This RFC takes the more direct route of deprecating this > >>> functionality entirely. I expect that this will have relatively > >>> little impact on modern code (e.g. in Symfony I could fix the vast > >>> majority of deprecation warnings with a three-line diff), but may > >>> have a big impact on legacy code that doesn't declare properties at > >>> all. > >>> > >> > >> I plan to open voting on this RFC soon. Most of the feedback was > >> positive, apart from the initial choice of opt-int mechanism, and that > >> part should be addressed by the switch to the > >> #[AllowDynamicProperties] attribute. > > > > The voting is now open, but I think one thing was not taken into account > > here, the many small changes that push work to maintainers of Open > > Source library and CI related tools. > > > > In the last few years, the release cadence of PHP has increased, which > > is great for new features. It however has not been helpful to introduce > > many small deprecations and BC breaks in every single release. > > > > This invariably is making maintainers of Open Source anxious, and > > frustrated as so much work is need to keep things up to date. I know > > they are *deprecations*, and applications can turn these off, but that's > > not the case for maintainers of libraries. > > > > Before we introduce many more of this into PHP 8.2, I think it would be > > wise to figure out a way how to: > > > > - improve the langauge with new features > > - keep maintenance cost for open source library and CI tools much lower > > - come up with a set of guidelines for when it is necessary to introduce > > BC breaks and deprecations. > > > > I am all for improving the language and making it more feature rich, but > > we have not spend enough time considering the impacts to the full > > ecosystem. > > > > I have therefore voted "no" on this RFC, and I hope you will too. > > > > cheers, > > Derick > > After some thoughs on this RFC I have reverted my original vote and > voted "No" due to several reasons. > > For one thing it is not clear to me what the benefits are. >
That's my bad! The RFC did not really go into the motivation for the change, especially after I dropped the discussion of internal motivations in a later revision. I hope that the new "Motivation" section clarifies things a bit, especially in regards to why "static analysis" is only a partial solution to this problem: https://wiki.php.net/rfc/deprecate_dynamic_properties#motivation Regards, Nikita
  116376
November 15, 2021 16:23 Andreas Heigl <andreas@heigl.org>
--PKkULfIY29BI0AsH2p7SJWVRQn0ITCASB
Content-Type: multipart/mixed;
 boundary="------------EB6755401F49E7695936DE0D"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------EB6755401F49E7695936DE0D
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hey Nikita.

On 15.11.21 14:50, Nikita Popov wrote:
> [...] > I hope that the new "Motivation" section clarifies things a bit, especi= ally
> in regards to why "static analysis" is only a partial solution to this > problem: https://wiki.php.net/rfc/deprecate_dynamic_properties#motivati= on
Thanks for the clarification! One thing, that can verify the correct working of properties, whether=20 that is dynamic or static ones, is testing. So when one wants to make=20 sure that their code behaves as it should, then proper testing can help=20 with that. So while the static analysis is one possibility, the other=20 one is writing appropriate tests. While that will still not eliminate=20 the usage of external tools it is fore sure something that most of the=20 projects using modern code already implement. So the mistakes-part would be easy to handle. Being explicit on the other hand is something that I would very much=20 appreciate. And using an Annotation for that is great. What I am still=20 missing is the differentiation between "everything is strict and you=20 have to explicitly opt-in to make it dynamic" and an "everything is=20 dynamic and you can use a marker to mark this explicitly an intended=20 behaviour". That would allow users to mark a class explicitly to use=20 dynamic features even though it would make no difference code-wise. And that could already be implemented via a userland-shim right now=20 which would then use the Core-Attribute as of PHP8.2 The other thing, that I noticed is that you were speaking of a possible=20 reduction of the object-size by 8 byte. Is there a comparison of how=20 much that would be in percent for some default applications? So is that=20 something that actually "pays off"? Thanks again for your insights! Cheers Andreas --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------EB6755401F49E7695936DE0D Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------EB6755401F49E7695936DE0D-- --PKkULfIY29BI0AsH2p7SJWVRQn0ITCASB--
  116377
November 15, 2021 16:52 rowan.collins@gmail.com (Rowan Tommins)
On 15/11/2021 16:23, Andreas Heigl wrote:
> One thing, that can verify the correct working of properties, whether > that is dynamic or static ones, is testing.
Can it? I can't actually see how that would work, without also having a way to detect when dynamic properties were accessed, which brings us full circle. Also:
> So the mistakes-part would be easy to handle.
If you are working with a million lines of code going back 20 years, "write tests for everything" is not "easy to handle"; it's a long-term ambition which you chip away at when priorities allow. "Logging all deprecations and warnings on a production workload", however, *is* easy to handle. Diagnostic messages in logs are the *only* way this behaviour will be spotted in old code.
> What I am still missing is the differentiation between "everything is > strict and you have to explicitly opt-in to make it dynamic" and an > "everything is dynamic and you can use a marker to mark this > explicitly an intended behaviour". That would allow users to mark a > class explicitly to use dynamic features even though it would make no > difference code-wise.
I'm not sure what you mean by that. Do you mean, create the attribute, but don't actually do anything with it? Would the plan be to deprecate later? Never remove at all? Regards, -- Rowan Tommins [IMSoP]
  116382
November 15, 2021 17:20 larry@garfieldtech.com ("Larry Garfield")
On Mon, Nov 15, 2021, at 10:52 AM, Rowan Tommins wrote:
> On 15/11/2021 16:23, Andreas Heigl wrote: >> One thing, that can verify the correct working of properties, whether >> that is dynamic or static ones, is testing. > > > Can it? I can't actually see how that would work, without also having a > way to detect when dynamic properties were accessed, which brings us > full circle. Also: > > >> So the mistakes-part would be easy to handle. > > If you are working with a million lines of code going back 20 years, > "write tests for everything" is not "easy to handle"; it's a long-term > ambition which you chip away at when priorities allow. > > "Logging all deprecations and warnings on a production workload", > however, *is* easy to handle. Diagnostic messages in logs are the *only* > way this behaviour will be spotted in old code. > > >> What I am still missing is the differentiation between "everything is >> strict and you have to explicitly opt-in to make it dynamic" and an >> "everything is dynamic and you can use a marker to mark this >> explicitly an intended behaviour". That would allow users to mark a >> class explicitly to use dynamic features even though it would make no >> difference code-wise. > > > I'm not sure what you mean by that. Do you mean, create the attribute, > but don't actually do anything with it? Would the plan be to deprecate > later? Never remove at all?
A possible idea to help make this transition (which I do support) more gradual: Instead of an "allow" attribute, introduce a boolean flag attribute. #[DynamicProperties(true)] class Beep {} The attribute marks whether dynamic properties are enabled or disabled via boolean. If disabled, then they're an error if used. 8.2: Introduce the attribute, with a default of TRUE. Exactly zero code breaks, but people can start adding the attribute now. That means people who want to lock-out dynamic properties can do so starting now, and those cases that do need them (or can't easily get away from them) can be flagged far in advance. 8.something: Change the default to FALSE. Using dynamic properties when false throws a deprecation, not an error. People have had some number of years to add the attribute either direction if desired. 9.0: Change the deprecation to an error, if the attribute is set false (which by now is the default) and dynamic properties are used. Sometime in the future: Setting the attribute to true triggers a deprecation. Sometime in the future: Remove dynamic properties entirely, and the attribute along with it. People can use __get/__set if they really need. This still gets us to the same place in the end, but introduces another stage along the way to make the transition more gradual. We can debate which version the default should flip in, I don't much mind. That could even wait for 9 if we want to be really really gradual about it. Meanwhile, IDEs and code templates can start including the attribute set to false by default on any new classes that get written, just like they have done for years with strict types. Nikita, would that be feasible? Matthew, Derick, would that be satisfactory? --Larry Garfield
  116427
November 16, 2021 22:10 pollita@php.net (Sara Golemon)
On Mon, Nov 15, 2021 at 11:21 AM Larry Garfield <larry@garfieldtech.com>
wrote:

> A possible idea to help make this transition (which I do support) more > gradual: > > Instead of an "allow" attribute, introduce a boolean flag attribute. > > #[DynamicProperties(true)] > class Beep {} > > The attribute marks whether dynamic properties are enabled or disabled via > boolean. If disabled, then they're an error if used. > > 8.2: Introduce the attribute, with a default of TRUE. Exactly zero code > breaks, but people can start adding the attribute now. That means people > who want to lock-out dynamic properties can do so starting now, and those > cases that do need them (or can't easily get away from them) can be flagged > far in advance. > 8.something: Change the default to FALSE. Using dynamic properties when > false throws a deprecation, not an error. People have had some number of > years to add the attribute either direction if desired. >
This is exactly what Nikita is proposing, except that instead of the attribute being introduced in PHP 8.2, he's proposing to introduce it EARLIER. Roughly PHP 2 sort of timeframe. This is because attributes are forward compatible by design and developers can already start adding #[AllowDynamicProperties] to their code NOW. Even their code that was written to run cleanly on PHP 5.6 because users are terrible at upgrading their servers despite a 2x performance increase. The point is, we don't need 8.2 to be a soft-launch before deprecation because precisely nobody is prevented from adding this attribute preemptively. -Sara
  116431
November 16, 2021 23:55 larry@garfieldtech.com ("Larry Garfield")
On Tue, Nov 16, 2021, at 4:10 PM, Sara Golemon wrote:
> On Mon, Nov 15, 2021 at 11:21 AM Larry Garfield <larry@garfieldtech.com> > wrote: > >> A possible idea to help make this transition (which I do support) more >> gradual: >> >> Instead of an "allow" attribute, introduce a boolean flag attribute. >> >> #[DynamicProperties(true)] >> class Beep {} >> >> The attribute marks whether dynamic properties are enabled or disabled via >> boolean. If disabled, then they're an error if used. >> >> 8.2: Introduce the attribute, with a default of TRUE. Exactly zero code >> breaks, but people can start adding the attribute now. That means people >> who want to lock-out dynamic properties can do so starting now, and those >> cases that do need them (or can't easily get away from them) can be flagged >> far in advance. >> 8.something: Change the default to FALSE. Using dynamic properties when >> false throws a deprecation, not an error. People have had some number of >> years to add the attribute either direction if desired. >> > > This is exactly what Nikita is proposing, except that instead of the > attribute being introduced in PHP 8.2, he's proposing to introduce it > EARLIER. Roughly PHP 2 sort of timeframe. > > This is because attributes are forward compatible by design and developers > can already start adding #[AllowDynamicProperties] to their code NOW. Even > their code that was written to run cleanly on PHP 5.6 because users are > terrible at upgrading their servers despite a 2x performance increase. > > > The point is, we don't need 8.2 to be a soft-launch before deprecation > because precisely nobody is prevented from adding this attribute > preemptively. > > -Sara
It's not *quite* the same, although your point about preemptive attributes is valid. 1. If we adopt the RFC right now as-is, the market has ~12 months to add the attribute. If we instead have a default-true flag that changes to default false in the future, it means at minimum 24 months in which to add the attribute to opt-in to dynamic properties. 2. The RFC as-is has no way for developers to opt-in to actively rejecting dynamic properties. They'll get a deprecation, but... we're shouting from the rooftops that deprecations shouldn't be a big red warning, so if you want a big red warning you can't get that until PHP 9. With the flag attribute, developers could opt into "please slap me across the face if I use dynamic properties by accident" in ~12 months when 8.2 ships, rather than waiting 36-48 months until the likely PHP 9 release. So it gives the nitpickers what they want sooner, and gives the old-codies more time to get their ducks in a row. --Larry Garfield
  116433
November 17, 2021 00:45 claude.pache@gmail.com (Claude Pache)
> Le 17 nov. 2021 à 00:56, Larry Garfield <larry@garfieldtech.com> a écrit : > > They'll get a deprecation, but... we're shouting from the rooftops that deprecations shouldn't be a big red warning, so if you want a big red warning you can't get that until PHP 9.
Deprecation notices *are* big red warnings. They mean: the feature *will* be removed or altered in the next major version. The beauty of deprecation notices is that they warn you about future breakage without actually breaking anything. There is no need to invent some new sophisticated way, but only to learn to use correctly the existing one. —Claude
  116434
November 17, 2021 01:12 pollita@php.net (Sara Golemon)
On Tue, Nov 16, 2021 at 5:55 PM Larry Garfield <larry@garfieldtech.com>
wrote:

> 1. If we adopt the RFC right now as-is, the market has ~12 months to add > the attribute. If we instead have a default-true flag that changes to > default false in the future, it means at minimum 24 months in which to add > the attribute to opt-in to dynamic properties. > > Okay sure, but that's an argument about lead time, not about
implementation. If we agree on targeting 9.0 for this becoming an error (and I think we do), then the argument that's left is whether users get notified as early as 8.2, or if they only get notified as of 8.3. Personally, I want to give users MORE lead time, but having the deprecation warnings come up sooner, rather than later. Assuming 9.0 comes out in late 2025 (guesstimate based on the cadence of 7.x), then including the deprecation with 8.2 (released in late 2022) will give users three years to attach an attribute where needed. If we delay the deprecation notice until 8.3 (released in late 2023), then they only have two years. I know this is the opposite end of lead time than you're talking about (you want max lead time before a deprecation notice even shows up), and here's why you're wrong: Most users don't pay attention to internals. That extra year you give them until notices show up will be wasted in ignorance as they don't know they have any work to do at all. All you will have done is robbed them of a year to implement the escape hatch (though let's be honest, they don't even need ONE year to do it). The only developers paying attention to internals@ traffic are the ones who have literally already added this attribute to their code bases in anticipation of this change.
> 2. The RFC as-is has no way for developers to opt-in to actively rejecting > dynamic properties. They'll get a deprecation, but... we're shouting from > the rooftops that deprecations shouldn't be a big red warning, so if you > want a big red warning you can't get that until PHP 9. With the flag > attribute, developers could opt into "please slap me across the face if I > use dynamic properties by accident" in ~12 months when 8.2 ships, rather > than waiting 36-48 months until the likely PHP 9 release. > > Your premise is that, since deprecation warnings will be ignored, we should
increase the verbosity level of the warning, but only for people who clearly know that a problem exists and can opt in to it? I'm sorry, but I don't track the logic of that. -Sara
  116381
November 15, 2021 17:20 Andreas Heigl <andreas@heigl.org>
--NQeyRYDzHIEGLBG9C99gmkWOk9k2GlzQ7
Content-Type: multipart/mixed;
 boundary="------------349AB84A6DD4E821B5C3754B"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------349AB84A6DD4E821B5C3754B
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hey Rowan, hey all

On 15.11.21 17:52, Rowan Tommins wrote:
> On 15/11/2021 16:23, Andreas Heigl wrote: >> One thing, that can verify the correct working of properties, whether =
>> that is dynamic or static ones, is testing. >=20 >=20 > Can it? I can't actually see how that would work, without also having a= =20
> way to detect when dynamic properties were accessed, which brings us=20 > full circle. Also:
When you are testing whether writing 'X' to a property and then reading=20 from that property gives that 'X' back, then everything should be good. You either typed the name of the property correctly or you have a typo=20 in the setter and getter (or however you set and got the value).=20 Nevertheless you should be able to figure out whether you accidentally=20 misstyped a property name somewhere as that should break the test=20 (unless you misstyped the name twice). ANd whether you are doing the=20 assignement to a static property or to a dynamic one should be=20 irrelevant, the reading and the writing process are the same. Yes: That rips off a completely different topic: Testing "getters" and=20 "setters".
>=20 >> So the mistakes-part would be easy to handle.=20 >=20 > If you are working with a million lines of code going back 20 years,=20 > "write tests for everything" is not "easy to handle"; it's a long-term =
> ambition which you chip away at when priorities allow.
The intention is not to write tests for existing code. As the intention=20 is exactly to be able to leave existing code as it is. Otherwise the=20 approach to "add the Attribute and be done" would be much easier. The intention is much more to make sure that *new* code does not write=20 accidentally to the wrong property. Which is what this RFC is all about. = Make sure that dynamic properties are not accidentally used.
>=20 > "Logging all deprecations and warnings on a production workload",=20 > however, *is* easy to handle. Diagnostic messages in logs are the *only= *=20
> way this behaviour will be spotted in old code.
That is absolutely correct. The main question is: "Do we *need* to spot=20 this behaviour in old code"? Not "Do we *want* to spot this behaviour in = old code".
>=20 >=20 >> What I am still missing is the differentiation between "everything is =
>> strict and you have to explicitly opt-in to make it dynamic" and an=20 >> "everything is dynamic and you can use a marker to mark this=20 >> explicitly an intended behaviour". That would allow users to mark a=20 >> class explicitly to use dynamic features even though it would make no =
>> difference code-wise. >=20 >=20 > I'm not sure what you mean by that. Do you mean, create the attribute, =
> but don't actually do anything with it? Would the plan be to deprecate =
> later? Never remove at all? As currently there is no direct intention to remove the feature for=20
good, why should we force it? And espechialy why do we need to force=20 those maintinaing existing code to adapt their code? For now the possibility could be to keep everything *as is*. Plus add an = attribute to make absolutely explicit that we want to use this feature. The next step could then be to create a setting that will notify about=20 dynamic assignments in classes that are not marked by the attribute. I'm = not talking about a deprecation note here. More something like a notice=20 (not a warning as that is too severe!). That way the behaviour can come=20 up in log files. Perhaps a new Level of notice like a=20 "bad_coding_practice". Or we use different "lanes" of reporting. One for = notices, errors, warnings et al and one for deprecations and such=20 asignment-oddities. When that has been done (should so far all be BC) and code-maintainers=20 have had enough time to modify their codebase (definition of "enough=20 time" is here clearly the main topic and needs discussion with=20 maintainers!) then we can talk about possibly phasing out the feature. My 0.02=E2=82=AC Cheers Andreas --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------349AB84A6DD4E821B5C3754B Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------349AB84A6DD4E821B5C3754B-- --NQeyRYDzHIEGLBG9C99gmkWOk9k2GlzQ7--
  116404
November 16, 2021 09:16 rowan.collins@gmail.com (Rowan Tommins)
On 15/11/2021 17:20, Andreas Heigl wrote:

> When you are testing whether writing 'X' to a property and then > reading from that property gives that 'X' back, then everything should > be good.
I see, yes, code that is 100% perfectly tested can get away without the language performing any error checking at all - the behaviour is all guaranteed by the tests. I would be very surprised if even 1% of PHP applications can claim such comprehensive tests.
> Yes: That rips off a completely different topic: Testing "getters" and > "setters".
Unless you have zero business logic in your classes, testing getters and setters is absolutely not sufficient. Everywhere that accesses a private or protected property has the potential to mistype it and cause subtle bugs.
> That is absolutely correct. The main question is: "Do we *need* to > spot this behaviour in old code"? Not "Do we *want* to spot this > behaviour in old code".
Yes to both questions. A number of "uses" of this feature are not actually deliberate uses which need protecting by adding the attribute, they are mistakes that are going unnoticed in those warrens of untested, un-analysed code. Those code bases are exactly the ones that benefit from the language having the run-time checks built in. Regards, -- Rowan Tommins [IMSoP]
  116405
November 16, 2021 09:27 Andreas Heigl <andreas@heigl.org>
--Jm60aZNVX4g9ud7HU3plKrRxlxnsc4wXu
Content-Type: multipart/mixed;
 boundary="------------DCC6E4FCEE77E4F6C673C79A"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------DCC6E4FCEE77E4F6C673C79A
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hey all

On 16.11.21 10:16, Rowan Tommins wrote:
> On 15/11/2021 17:20, Andreas Heigl wrote: >=20 >> When you are testing whether writing 'X' to a property and then=20 >> reading from that property gives that 'X' back, then everything should= =20
>> be good.=20 >=20 >=20 > I see, yes, code that is 100% perfectly tested can get away without the= =20
> language performing any error checking at all - the behaviour is all=20 > guaranteed by the tests. I would be very surprised if even 1% of PHP=20 > applications can claim such comprehensive tests.
The topic here was that new code can verify the declaration of a=20 property by using tests. That does not need to happen on the language=20 level. I was never talking about adding tests for existing code.
>=20 >=20 >> Yes: That rips off a completely different topic: Testing "getters" and= =20
>> "setters".=20 >=20 >=20 > Unless you have zero business logic in your classes, testing getters an= d=20
> setters is absolutely not sufficient. Everywhere that accesses a privat= e=20
> or protected property has the potential to mistype it and cause subtle =
> bugs. >=20 >=20 >> That is absolutely correct. The main question is: "Do we *need* to=20 >> spot this behaviour in old code"? Not "Do we *want* to spot this=20 >> behaviour in old code".=20 >=20 >=20 > Yes to both questions. A number of "uses" of this feature are not=20 > actually deliberate uses which need protecting by adding the attribute,= =20
> they are mistakes that are going unnoticed in those warrens of untested= ,=20
> un-analysed code. Those code bases are exactly the ones that benefit=20 > from the language having the run-time checks built in.
That highly depends on your view-point. There are a lot of people out=20 there that do not require that this behaviour *needs* to be spotted. Cheers Andreas --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------DCC6E4FCEE77E4F6C673C79A Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------DCC6E4FCEE77E4F6C673C79A-- --Jm60aZNVX4g9ud7HU3plKrRxlxnsc4wXu--
  116407
November 16, 2021 10:23 rowan.collins@gmail.com (Rowan Tommins)
On 16/11/2021 09:27, Andreas Heigl wrote:
> >> I see, yes, code that is 100% perfectly tested can get away without >> the language performing any error checking at all - the behaviour is >> all guaranteed by the tests. I would be very surprised if even 1% of >> PHP applications can claim such comprehensive tests. > > The topic here was that new code can verify the declaration of a > property by using tests. That does not need to happen on the language > level. I was never talking about adding tests for existing code.
Whether the code is "new" or "old" is not what matters; what matters is whether the test suite is comprehensive enough that every possible mistake will be caught by a test. If it will, we can remove a whole bunch of language features - why use parameter and property types, for instance, if your tests guarantee that they will always be given correct values? For most code bases, even new ones being written from scratch in PHP 8.0, that level of testing simply doesn't exist, and having the language tell you "hey, you wrote $this->loger instead of $this->logger" is a useful feature. And, in a lot of cases, more useful than having the language say "OK, I've created your dynamic $loger property for you", which is what currently happens. Regards, -- Rowan Tommins [IMSoP]
  116414
November 16, 2021 14:59 neclimdul@gmail.com (James Gilliland)
On Tue, Nov 16, 2021 at 4:23 AM Rowan Tommins collins@gmail.com>
wrote:

> On 16/11/2021 09:27, Andreas Heigl wrote: > > > >> I see, yes, code that is 100% perfectly tested can get away without > >> the language performing any error checking at all - the behaviour is > >> all guaranteed by the tests. I would be very surprised if even 1% of > >> PHP applications can claim such comprehensive tests. > > > > The topic here was that new code can verify the declaration of a > > property by using tests. That does not need to happen on the language > > level. I was never talking about adding tests for existing code. > > > > For most code bases, even new ones being written from scratch in PHP > 8.0, that level of testing simply doesn't exist, and having the language > tell you "hey, you wrote $this->loger instead of $this->logger" is a > useful feature. And, in a lot of cases, more useful than having the > language say "OK, I've created your dynamic $loger property for you", > which is what currently happens. >
What you described there sounds like a warning and not a fatal error. Maybe that's where some of the trepidation is coming from. I know I'm less worried about the deprecation notice and more worried about what happens in PHP 9 when it's a fatal error.
  116415
November 16, 2021 15:26 deleugyn@gmail.com (Deleu)
On Tue, Nov 16, 2021 at 3:59 PM James Gilliland <neclimdul@gmail.com> wrote:

> On Tue, Nov 16, 2021 at 4:23 AM Rowan Tommins collins@gmail.com> > wrote: > > > On 16/11/2021 09:27, Andreas Heigl wrote: > > > > > >> I see, yes, code that is 100% perfectly tested can get away without > > >> the language performing any error checking at all - the behaviour is > > >> all guaranteed by the tests. I would be very surprised if even 1% of > > >> PHP applications can claim such comprehensive tests. > > > > > > The topic here was that new code can verify the declaration of a > > > property by using tests. That does not need to happen on the language > > > level. I was never talking about adding tests for existing code. > > > > > > > > For most code bases, even new ones being written from scratch in PHP > > 8.0, that level of testing simply doesn't exist, and having the language > > tell you "hey, you wrote $this->loger instead of $this->logger" is a > > useful feature. And, in a lot of cases, more useful than having the > > language say "OK, I've created your dynamic $loger property for you", > > which is what currently happens. > > > > What you described there sounds like a warning and not a fatal error. Maybe > that's where some of the trepidation is coming from. I know I'm less > worried about the deprecation notice and more worried about what happens in > PHP 9 when it's a fatal error. >
I can't say that this line of reasoning has its merits, but then there's no benefit to the engine itself. Issuing a warning and carry on materializing dynamic properties will never bring the original performance improvement that was part of the original state of the RFC. -- Marco Aurélio Deleu
  116416
November 16, 2021 16:00 Andreas Heigl <andreas@heigl.org>
--BDMuKZxW0a2WrqgLri8TmqhBoU06AG7hg
Content-Type: multipart/mixed;
 boundary="------------F16981764FC49360954F6486"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------F16981764FC49360954F6486
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hey list.

On 16.11.21 16:26, Deleu wrote:
> On Tue, Nov 16, 2021 at 3:59 PM James Gilliland <neclimdul@gmail.com> w= rote:
>=20 >> On Tue, Nov 16, 2021 at 4:23 AM Rowan Tommins collins@gmail.com= > >> wrote: >> >>> On 16/11/2021 09:27, Andreas Heigl wrote: >>>> >>>>> I see, yes, code that is 100% perfectly tested can get away without=
>>>>> the language performing any error checking at all - the behaviour i= s
>>>>> all guaranteed by the tests. I would be very surprised if even 1% o= f
>>>>> PHP applications can claim such comprehensive tests. >>>> >>>> The topic here was that new code can verify the declaration of a >>>> property by using tests. That does not need to happen on the languag= e
>>>> level. I was never talking about adding tests for existing code. >>> >>> >>> >>> For most code bases, even new ones being written from scratch in PHP >>> 8.0, that level of testing simply doesn't exist, and having the langu= age
>>> tell you "hey, you wrote $this->loger instead of $this->logger" is a >>> useful feature. And, in a lot of cases, more useful than having the >>> language say "OK, I've created your dynamic $loger property for you",=
>>> which is what currently happens. >>> >> >> What you described there sounds like a warning and not a fatal error. = Maybe
>> that's where some of the trepidation is coming from. I know I'm less >> worried about the deprecation notice and more worried about what happe= ns in
>> PHP 9 when it's a fatal error. >> >=20 > I can't say that this line of reasoning has its merits, but then there'= s no
> benefit to the engine itself. Issuing a warning and carry on materializ= ing
> dynamic properties will never bring the original performance improvemen= t
> that was part of the original state of the RFC.
Which performance improvement of the "original state" of the RFC? As=20 that was one of the questions that were not 100% answered: What are the=20 benefits for the language. And while those 8 bit that Nikita mentioned=20 in the "Motivation" part of the RFC look nice, he also stated that "this = is a fairly long-term benefit that will require additional technical=20 work to realize". Or did I miss something? Cheers Andreas --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | https://andreas.heigl.org | +---------------------------------------------------------------------+ | https://hei.gl/appointmentwithandreas | +---------------------------------------------------------------------+ --------------F16981764FC49360954F6486 Content-Type: application/pgp-keys; name="OpenPGP_0xA8D5437ECE724FE5.asc" Content-Transfer-Encoding: quoted-printable Content-Description: OpenPGP public key Content-Disposition: attachment; filename="OpenPGP_0xA8D5437ECE724FE5.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFzEA7MBEACpvo0AbmZG6lUGMvDUebQcYVjOPrdqtnlb2WoZH9FrJyHyenzejO29VCjue= kdh u44sUNgEHXxExUekguLDGZOzC9926g2rGDWO3MU1oqRlKURnOWsp/i0d9WM07ihj/lL6smT9Y= Lea gtPCJporUiFW8JyIusBWWhlL8hp8ZDvEfmvi06xDXML3wXzH/KWmoew3LgdwCZPkQSIWemUDP= ZKc UL8eeVkhYIJA9VKQnGSx36p5T7Ch/l+iqiPlyY1GUNItX9AQjpr07V0kIjyK+yHn6Aw1uy1xW= rLn 7ATDX8YuMvaz72+c/P2zQReMWoZNfggd2FHOPRUHvHcC9C91PuzJh8e9hvtU/szDrPvvCVpg5= aRy mN/YPFJBSEqZfDelhD+8A1TJNPqSyzc21Qdd61636ynryawIW+HxFT/UN1eA7V5/fdjeRyNUJ= d7B 99Vo5A/lI25bIpg6cPLOLpVPFHEpNlGPQ8pcMRwnjG9GR74PTfH7Dy8Ksq8lpygPljJInZbz0= 870 cHlM5XSdIPTXWQFfJi0e2kfaLCEni/Vih+eL0e5F7X3RtaXY0HRFYHX8dY7ojf3sZJjdPVm3A= QXY 1yNkjnRxyJ/4gIwdFwYplU6lRBL92jdDLavPWVK4Dsil/woKmsCpxClWfU/MzmQlhbdH+x8V2= SYO a4aJWiixx59DxQARAQABzSFBbmRyZWFzIEhlaWdsIDxhbmRyZWFzQGhlaWdsLm9yZz7CwY4EE= wEK ADgWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQDswIbAwULCQgHAwUVCgkICwUWAgMBAAIeA= QIX gAAKCRCo1UN+znJP5clsD/4vnmCp5oVIXdNXkK3PNajHR1ddpr2+Ake+bo6TS801MSd638f2U= g/e Qmu6j0XuHbgJql9wnoDh0Oq47bPxGTszPbbhD0FL1s6YBDqJKcz2okbmYRutumC52u4h8dGxb= VjC M9le1rckK54aDjkzL27iGRNfQLw1vg9gdl1yRz866bZ75MItk/7BewJrodQ5zweNcDVOmYseP= Lpo 13peB1mzDP/tuBH4CpoeDtAb/+Rc5Qv/J6P7iMDC4fPbFIl5//Ge7blMV98seXOAYMCvDYmLc= JFb nESBla/8te8lKE2E1PjwnIeMvDfYHn17CYd2UqnmlQbJbN30/Y2eiPT9w7wjrgc+qGRWEU+hu= GMl rDXQmmAtHPADf08QwOWpDVoZ+WFsQEB3f2fsZtfOnxXv8yb+Q16kVcPWaRyvusT5KLT39h2Vv= Zlh H8uporNimjs7+Rl8Fs7PP6n2L+OCnI1sSCTixBQT4MDNM6IVxqhy5j8M9ig3vR7czJgVVsDmK= CFi gOibvIFgxfRH2A7JjyplO034eUw7I3IJdffuBWjZ8SCfwZ3sS67UaPy01UVovSQKikEJBfADE= cl4 X25YsHvHXCksYLoZHb6wvtFzUrjxXwipwzlWtNBR2gTB2lCfeCLcwYcHdN8qcgg+emxDkBHeL= /Ml w5OLGW86dy6ha3BJDQgdL8LBcwQQAQoAHRYhBJZ8z6UN/+4Du4v18sqSE8db/ORyBQJcxBvDA= AoJ EMqSE8db/ORyHLUP/iADAMreqincMvKf8A0BMhAl79ZFhXkcFeEvb7KreVNp9pFBqUMtpvD6M= wY8 MpX+B9ys7qL8uY01Mf4ovex+O3tDmRRDMtho7Af2bO7Dyku7gnjtR0qdb+ceMDyVbmODVoMN+= Sh8 a9bj0uY0BlCsOkDb6hYyIf1xXAHkrX4wZbbjzpwNWoTQxsJo5ho7V/7CXMBYL6nLYpXR7vmgU= ori 2FbmiDIu+sKWbDezWcTNXItkn0WpIGTGSPWMLzEIJznOFJZlBd2q+/YHKqO/3G53tl62XLBjj= 9TC u1cnScsFJKhVRjn/mcwI9rrg4tLuSIfGqAoq29YSd832r9iC8CBuHc/T7MySekxNrdxnpecHy= Ajw AI+RhF1g+fVrmeYt1+4stwfpmLp+gEFPiHxoQkKc2q8pjNRmtoKvf2Z9cqauB+8QWyIKjgrab= dJy ev/b54o+CqxNo4KSjhwSBjb/ihVw1W2AWLkEGJUysHP6r1E12dXlYrEvBm13LIP+OOqpZRY5K= MKi WNjmQF3wtEr6SjMYXcLx+1ydVQLqFa6in57YotfNqlehiU1KDhJ/AyU+tgBJ3OxShS6p4Gmia= Dvh 8qDp0bm7GxkQEA+8kOmn+4mY5E5LzzlbIkHoDqqZs/RkWoxNpXyhIx6zqqlE4yASuWwY98tco= mx8 /CClg5DoQAl2NvWPwsFzBBABCgAdFiEEclTRxmnDsSbzEk7xbQJ8ZCRit3gFAlzEHMsACgkQb= QJ8 ZCRit3jsmA/+JJUt4Bg9cJ3itTdP+0PfSVYh0xwR+ev5b0sAj2moWowk1U0IEzHhM5eHlAJ/5= s4/ peG2Bkv2vCB+mTMFCbcuZfdsF1N13MSFqJH9ZLjZY5QGo9IqAF+JI1Tu0zArKOXWI+Fs4WXaY= lp2 f+aMccVrd6LIObbgKKQzH2n4u3nxwfVsWSZcNVCvIQVI9FPexH9C4EbPN/ocxx4/Qewx/ie+s= slL M8CVULcZmJeN+rcjWR4hr2l9zY925WpbQ/LE6cmnqDWVS+SgFQGF6j1nsUJzRA2pYk/Q12o+2= ka9 1/o9pPu3Z8gEFu7ljflT3iO4G139crRNXRE00qfBQft9VvMl02iGQlCbK1ZER8Rou5yDPjfBk= MHP DoSUa45ILQqsUB/3rKT08ApA80QkgCh+cTyhvVCrZJPKWjusRn8mX9FM+lotL9ZWID9/Q90FJ= hli XyPj8gmsoFh+37/AV+Wl2jcNbG1CIzX1cx2KJ+2AWciBlE0046ztGuaHzpqzjeyvwxUHYTDJh= 2+t DyRCt7lrRrZuMTBlHCQw1GlSSrlPw9l1CASXto0gxnFgCpulTBHJQVPUr0XbjmT52xbmRlv3y= 4CR MCp+/0ZKzXddKZTA6XyIHuumRuKW0L1rBIfqgbUB0icE7tM/+bkYZzMExhnILF05nIIQKN5Rq= 59p t+KxrjK2t13OwU0EXMQFSAEQAL++X487itN2+5NbNK0O2iUkG6OOCK8Uiep+KpWwsfwf8rz5U= FUx Tn2EBfiTRCd9NXEMeiptjp8zsRVN2MSEv77a+aiMahUyIbI+4PUX+Y2fZRIXx7kpTn4T817iw= 19m FrSQ6c/qI88JUvmMA/r9FYbUAh0vjZEPc+WUmPnZYCShnna0pDhiJe1b3pjoxPTNA2arBkGhm= m1x th/rKN80Saf77ZtxOpRx+wiwXAKG54B6Q9fVWUzT5pRzJFPl6UEt4WaWVA8kMkbjLcv8k3fJT= MK0 ZpxjTIDFIqqYxiJIKE5TbuMvN9ilx/grUhdQ+Nu5kOJlOUiFfeqTUi/hJOljtRsh3WxJhpEmV= u+w 7/PJpLPPys1Xa7Ax6DHr/nR5iNL1tDZEjrW6/Wav7AYX8OnlZF6irml7APAusOfv4XemZfUb/= qva /pQjbJpeVYmedFyGgC96yR55bRbzXI4CHMvApRFxyUekQp09h49MvTNJ0dV3Uj9+V+PMS05OY= BIs KbRv+C9QaoCiuUK83BSd0XFvR1KuO3FRY3Dtc5zrdWuGNa0tUYAd82Dnu/pR1wmdyYdbXEcQH= uW0 Vx5Dm6TDQ1ZLNEh2ZZRqWQ8Qrppb3n5lhbjyNiPO0upJlxYl3qo6mRXzuQMoZOeH50ZPyqmZu= d+Z kHfg/Sq8PRHNdlBhtIZ6/FBTABEBAAHCw6wEGAEKACAWIQRZ7tBmhrXNAHaUcA2o1UN+znJP5= QUC XMQFSAIbAgJACRCo1UN+znJP5cF0IAQZAQoAHRYhBDh6O3rdFXWZPESSt+BX/kgit7ZFBQJcx= AVI AAoJEOBX/kgit7ZFM28QALr4HOTaNkpLZMxJAECLxFQg8Yzg9GdUE4l6Xqeea+Qz6Hv2fO0AV= 8VQ ug7h7mFoAQQwG0lK5yHa/RF3tcApVEXMyL19AamMNnA5H0mXEUcTvge2JeVK9ONTBYjSR6llO= nUK Co24p3lnzmp6eZNEfaTPbSGo7UTmWcqfHtkvH4C5hOhDyY6GTVrgcMV2G2B1jq4evn0XxdqTi= po3 VyAMtwW/HlTHKXpXpW0QhzD+D6ioNUgyQjpPjkI3BWJHzSCWVUKgWD2EdOu+IsciDM115APvd= yeX vgWNF8jphl+PJf2inqS8iSrd4pf04//tqNhkmBHSIFh6LwPlUUMEjKI4sWUYcL8zZimUmaK9H= yZe bZq+IQFnjMw80h4iMc4YpY8mKgz4ld7wNV68+NFpgn+YaK6EVCpML91ret5kR4PyhO3tlMydY= zW3 SFmmYFIEOEn+l5V223/8RDsg7XilBPZXtYDDpCJSedo3+d9eeBTyLnaXhnmhs1N06IVMbga/x= g6B YT0OxJ7KFhyLW9SQ2+22oVqtfqGR9+Qx8UaiLnAx2a0ZjCHOspg/RTsXz7jqC8Ez9AVEPLOrw= /It IFI8Mx1AoJxfdoK9JIIsSNHeKrvCNmRK1n7NnNLa1JDRXYNgxsCD81YJzpQjtUC4KBKbFevs/= MHD Ksg/o2mlfeNy3AAEYckW7aMP/AjhDWZuUB+WoPnVO3qoaRdtt4aMRI+8Vjwsci3HHcueQa7Xs= S/J fzg85MUXqN7PozrfEBgwk5Z+kdFW+4dhiaEXntEqWUgwkExJ5ysmP597WIQG2hUpX0jwkrzdZ= q6r Z/87mHCAMgFk1Lg/6oPOQqXvBdLFlMo6RIPawC8EeROcIuszvzKR4GIEIyXyR5rflLUUFfvLr= NPk MeuxA5CKoN1IidlngMO/sH58aac2Z67k7nrNQk62QeMFQndcKb45Pt3bgPjDSB98hlAklKzuH= kxx lwreilFcBqx/8f1qeg3tTkF29RkSaP38K9RnLhrfRrt4Tz8fKTF/C6A1HqL2dMQmto14S8U2o= zq9 3xiu0oUpLFdOoqfqPxgiqbqWUFIAY4JS4J2o9HXwjFii6X7/VJ9Yj0DNCrZytvSRR24j6p2r2= HFg fEPDs6NFPGoF9vNksJhc1FViEkjt1z5vTdmu3+DRSD3QTpRUujVnUL8jr0ggoZ3CI6qjVqb8K= 2+d dubT9SxWKNbBOcNOwGtqQtw2z8FZ/2tQOvu9A44A5gCYJ5fHj9uvcvEKJe6X7hX7WBpAItZUe= Y8x D91uNSY2/uceh0pE6APHxNMRaLCKMRpyvRCHqRbA2iiLT0qF4pmwYUtYIig1TkNczbtzj38mv= H+G OQ6onUMxyW18qrqJn8LzvlhkzsFNBFzEBbgBEACo/XIhTsNMVM1XLI2qzKWWLIIIYN/uTcoum= h0A eh98saWYjg68H/fv2CZhF0CZ7JXcW3EqCjWzLnHiGXTMumYwCm5vgxic1uHTS6tv97hNPNA80= vKK Fgs/ofYM4MtzQWdLw/c7lzF6qomhbr9woKbYgwRnp8qh2C84aH6+OQv6I1t2fWE7qhoLMrSh2= EiK xeogXkyNqKzlRibBUOsjurTXg+UJt7NEnrp/qgm1m9zhAkMoadFs5bROEb24qZ7eDij1HmrM6= mUb 4OkL2PnDzkUBJ2At5otp+uUCJrATS2tAz0OGNu3ijJP94+Y1d3Nt6jC5pAI40ZcxSXMMrLFAT= XJi NYLaD/Y6tpLgXaLQF1krgtvcGVkxJ8/fJVrKVcmF8Cfnab+rbNDIxLAwWT+dor2BwDgRoRI45= cyG XB7YHstdk9kBUZqff1BrMZLGEmp+M6xE2wFPWan4kD2oIh5B14CKUMYB+CBmMlJhkIzBl2GvO= 3Hv VyywCk2EourRxjDocZxyajE/fwFuAK5emuFKrucMmsnxzZMMJdkoJmnozsBS9Oj9e8YiR+yAM= Dex x4152G6SOCR9JSxnFUBPEKOgabIPLY3eQfn0nBdh/mr/iKSg+5zj3bsbvUetvRFdTbUTFnqss= L7b 3Q5ydaL3Q6PjCO/Fe0bmLKXnY2AzY8emb3xc/wARAQABwsF2BBgBCgAgFiEEWe7QZoa1zQB2l= HAN qNVDfs5yT+UFAlzEBbgCGwwACgkQqNVDfs5yT+XL9w//VJKq2qxGxS1IGSaaowcneiRx88ZfB= Tzk takhbqXhnWFwP9vuTaHcSzRowFIVzea55k/5mQeKuTTEt7k0Yb29lwoT+iqi12V/73EBIaUK+= JT5 ZP28bnQXkkqqpRzcro4lDzi5geamt7KMsWDmYqCHyXU2xXeALnqfLv1jfsJJMeoDzLl8ql50q= m1z +u94VOXf94dlqmV9v6QWoxww2k2xNWBAeUD2YzUXAZncpXbCK1MIRFBHmbg4HAapmpFUewPfs= O4P pUEJqG1IA6rl9csZnc97BvCCha6SZMvXGrEIi/ajNfD0mU2p3Iy5F1UXNx9yJlMziQvqUziA7= MSW olT2ZYr/unSrckXUh7lAwE4tq8RhhXZ2cjL+5ubk/xGFBJycn+YKoT5gmZ+gwGrluN0VJFogf= pY2 RJbF8j8VbUR+vGKxlusgyeC7uEFAoVsIUJFQ3QaPtGmnIZgP3KSz7HsZkAwiXHJ5P6wpH3CWM= u4J aOQlOMo0NPxRZOvtfAkdDb+i4jd+YjvuJkJlur1p6yhu/02cE7/BoDONgATHZqFmYzubWtCU9= Lrf q1RnVBVnH/hLM2IxMGyBYsNDRW3FwSZh7nj6vxjijS9KsxwNiAFzNl78BKlIkHgAjWVDejezm= ncB 5ixg8G0GzKxIBt3S5nrkQNz3HBJEuIwmP7HyMbLbG27OwU0EXMQF6wEQAMUl2EK3LUUh6uunJ= 55v s0z8D0XZFpgm6cwVJgaWw+1H/bXJQR56oosOf+WUM0x1jhBVTLhI+oOK+uz1VkeZRMvTRxYob= fNq n7V5Gn8D8tO8z55yuHgHxn8T8+ZV8RzEbITDNmnK3VNC+mGvWCOe03gU6rhaE9qb3fhFreQA1= e85 XR3WqwxR/m/Vxdc0ANxgrij+VEOZDzlknAt9s93sPQDCqCGfNtRaKgVi/xvZUWvrYSBb1v5d3= wit KlADmuqWCWtc9+PuBmjUIObGP7Zll1dQ6enrtQ943ZsUujXYsdrfuaf5m47u/1G1IzwznIJwl= ZUU M2RAHQkCu+yjnXjtW0/ZEYV0RV+xZ5Qf2CtSq2rS5jpPKbtqhkzclX6ziV2ycRypR/vtbo81U= dP1 cbwSlSlxwp65Y7D+uV1F/7vI+OjUqJpD8mHgdh9OOZCWI2zHTSaH2FqS4LaT6kJIcd0sLoRPV= C3E U2vQQIM5aMyYpFlacZgmAryldp8cHwvbtpR4R2GWlXAW3w/pz2B7BD+xiUHvu2cXgeRYWgvtA= 7kw monmnhJ0NiN6cB4GPjr0ivysDNvdnnvCQ2FNMrqUGMhAK1fFh3nJF5CgMGZSyricZvE8tl7nl= XN4 TUlhhNqhSKyqHL7b0WjPhAUBNZvf1hutnl72rDAMBhTjYbEkLAl2/I5RABEBAAHCwXYEGAEKA= CAW IQRZ7tBmhrXNAHaUcA2o1UN+znJP5QUCXMQF6wIbIAAKCRCo1UN+znJP5d4OD/9YMP8rUtR43= z0v Y1UnqMyZH9I8mOIL12AqRhsroaFb8rs3QU+u5cZGf2QvP2uOF6wFzjQGelZLjgVmctBYzutzs= jzX Id0D+B3O2KJhquRXEZ5HQlvZ6/YY0KDzNcYk2Tghg/NqvGltJtJuHrysPIL/0csA91mVUFs25= iap RwLrZfizTEzyh8KCrsV8j+c7r/UTRNkwDbTuq+s7kAyLVEWMTlBRkXg9IsxyX1F+k6xjSKRGf= XnI cct2BEYDcwNxzcPDOHpwzNCH3DCGDmuOLQGspp40liJ1cY1B7a1t3kpNRUv2YDth+jHs58BmF= Nfx WrBwv8OYulI+ehtErPTmOt6eNBhMp5EvoQuT6YwnL+2UwnA1SdNseG1y6tmgeEl/1PeGuYnze= vgk olNUS+4jzyWMG5deRldsjlHxMJBdT5VQXlXP8xb8oHQAkeR3KtlNyrtCi4R62btnIoSF7W9NY= heG aXXa2rHTVi82pqIg6p/E35MVh7X5nXIVOlGM6YXrdKapL/tRNExAW0xfrtwSJfMoxNAqFcwyR= e+i f3/7YeeVW9uqs8gSzAqD9x7JAYI2eW3JW6N3bdiZxIJ7wuk67zaW5rh36h9FhRM9KONvWbzXD= KN2 qyGMI8nCoorTHcnGOw8TqLh9cni59kQ+lEw/6d/vglsWEWhDJdt9r3ZWpMJW9w=3D=3D =3DQgWh -----END PGP PUBLIC KEY BLOCK----- --------------F16981764FC49360954F6486-- --BDMuKZxW0a2WrqgLri8TmqhBoU06AG7hg--
  116417
November 16, 2021 16:24 drealecs@gmail.com (=?UTF-8?Q?Alexandru_P=C4=83tr=C4=83nescu?=)
On Tue, Nov 16, 2021 at 6:00 PM Andreas Heigl <andreas@heigl.org> wrote:

> Hey list.
> Which performance improvement of the "original state" of the RFC? As > that was one of the questions that were not 100% answered: What are the > benefits for the language. And while those 8 bit that Nikita mentioned > in the "Motivation" part of the RFC look nice, he also stated that "this > is a fairly long-term benefit that will require additional technical > work to realize". >
I think these two messages might have some information about the performance improvements: https://externals.io/message/115800#115848 https://externals.io/message/115800#115872 Yes, maybe not everything was captured in the final RFC text. I also think all the evaluated options should have been present in the RFC as it brings more context to voters. Regards, Alex
  116373
November 15, 2021 13:53 drealecs@gmail.com (=?UTF-8?Q?Alexandru_P=C4=83tr=C4=83nescu?=)
On Mon, Nov 15, 2021 at 2:52 PM Andreas Heigl <andreas@heigl.org> wrote:

> > And as far as I can see from the PR associated with this RFC it will not > make life easier for the internals team. It is not like there will be > hundreds of lines code less to maintain. On the contrary. There is more > code and more logic to maintain [2]. >
Sometimes it needs to be worse until it's better. Some points that evolved during discussion also mentioned the intention of how easy to allow it to be to opt-in and in the end the attribute was chosen as the easiest one. Even if the intention was to simplify the code to maintain, it was not clear how much PHP users would want to stay without this feature. And the problem was that using the attribute, it would not be easy to remove it in PHP 9. But at least it would give a better sense of usage once we get to PHP 9 so it can be completely removed only in PHP 10+ or to use a more strict opt-in mechanism. So yes, you are right, having it like this would make the code a bit worse to maintain for 8 years and easier to maintain after that, if I got it right. But the benefit related to the dynamic properties bugs reduction would be seen in userland starting with PHP 8.2. Regards, Alex
  116387
November 15, 2021 20:02 neclimdul@gmail.com (James Gilliland)
On Mon, Nov 15, 2021 at 3:53 AM Derick Rethans <derick@php.net> wrote:

> Dear Internals, > > On Wed, 10 Nov 2021, Nikita Popov wrote: > > > On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> > wrote: > > > > > This RFC takes the more direct route of deprecating this > > > functionality entirely. I expect that this will have relatively > > > little impact on modern code (e.g. in Symfony I could fix the vast > > > majority of deprecation warnings with a three-line diff), but may > > > have a big impact on legacy code that doesn't declare properties at > > > all. > > > > > > > I plan to open voting on this RFC soon. Most of the feedback was > > positive, apart from the initial choice of opt-int mechanism, and that > > part should be addressed by the switch to the > > #[AllowDynamicProperties] attribute. > > The voting is now open, but I think one thing was not taken into account > here, the many small changes that push work to maintainers of Open > Source library and CI related tools. > > In the last few years, the release cadence of PHP has increased, which > is great for new features. It however has not been helpful to introduce > many small deprecations and BC breaks in every single release. > > This invariably is making maintainers of Open Source anxious, and > frustrated as so much work is need to keep things up to date. I know > they are *deprecations*, and applications can turn these off, but that's > not the case for maintainers of libraries. > > Before we introduce many more of this into PHP 8.2, I think it would be > wise to figure out a way how to: > > - improve the langauge with new features > - keep maintenance cost for open source library and CI tools much lower > - come up with a set of guidelines for when it is necessary to introduce > BC breaks and deprecations. > > I am all for improving the language and making it more feature rich, but > we have not spend enough time considering the impacts to the full > ecosystem. > > I have therefore voted "no" on this RFC, and I hope you will too. > > cheers, > Derick >
I appreciate that Derick. I know there have been some pretty big efforts required for some recent php updates in Drupal. And I've mentioned in a couple threads on Twitter but Drupal requires a pretty heavy change to support this. It adds properties to classes _outside_ its codebase which means none of the mitigations in the RFC apply. It was on my radar when the vote popped up because the system in question has long been known to be less than ideal but "php wouldn't ever remove this ancient feature right?" and every other option is just a ton more complicated. I've talked with some maintainers and it looks like we're going to deal with the cost of converting the system but if this dirty hack hadn't been on our radar it could have really hurt. Like maybe not getting the fix in place before the next major release in time for backwards compatibility commitments bad. So I worry what sort of earthquake this might trigger through libraries. Like, I'm pretty sure the OpenApiGenerator templates used dynamic properties for some things so how many little internal libraries are going to have to be regenerated? What other lightly maintained library are people going to be stuck waiting to update because someone's CI didn't catch the deprecation? I think this sort of change is probably for the better, but I worry about how disruptive this could end up being.
  116388
November 15, 2021 20:05 chasepeeler@gmail.com (Chase Peeler)
On Mon, Nov 15, 2021 at 3:02 PM James Gilliland <neclimdul@gmail.com> wrote:

> On Mon, Nov 15, 2021 at 3:53 AM Derick Rethans <derick@php.net> wrote: > > > Dear Internals, > > > > On Wed, 10 Nov 2021, Nikita Popov wrote: > > > > > On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> > > wrote: > > > > > > > This RFC takes the more direct route of deprecating this > > > > functionality entirely. I expect that this will have relatively > > > > little impact on modern code (e.g. in Symfony I could fix the vast > > > > majority of deprecation warnings with a three-line diff), but may > > > > have a big impact on legacy code that doesn't declare properties at > > > > all. > > > > > > > > > > I plan to open voting on this RFC soon. Most of the feedback was > > > positive, apart from the initial choice of opt-int mechanism, and that > > > part should be addressed by the switch to the > > > #[AllowDynamicProperties] attribute. > > > > The voting is now open, but I think one thing was not taken into account > > here, the many small changes that push work to maintainers of Open > > Source library and CI related tools. > > > > In the last few years, the release cadence of PHP has increased, which > > is great for new features. It however has not been helpful to introduce > > many small deprecations and BC breaks in every single release. > > > > This invariably is making maintainers of Open Source anxious, and > > frustrated as so much work is need to keep things up to date. I know > > they are *deprecations*, and applications can turn these off, but that's > > not the case for maintainers of libraries. > > > > Before we introduce many more of this into PHP 8.2, I think it would be > > wise to figure out a way how to: > > > > - improve the langauge with new features > > - keep maintenance cost for open source library and CI tools much lower > > - come up with a set of guidelines for when it is necessary to introduce > > BC breaks and deprecations. > > > > I am all for improving the language and making it more feature rich, but > > we have not spend enough time considering the impacts to the full > > ecosystem. > > > > I have therefore voted "no" on this RFC, and I hope you will too. > > > > cheers, > > Derick > > > > I appreciate that Derick. I know there have been some pretty big efforts > required for some recent php updates in Drupal. And I've mentioned in a > couple threads on Twitter but Drupal requires a pretty heavy change to > support this. It adds properties to classes _outside_ its codebase which > means none of the mitigations in the RFC apply. It was on my radar when the > vote popped up because the system in question has long been known to be > less than ideal but "php wouldn't ever remove this ancient feature right?" > and every other option is just a ton more complicated. I've talked with > some maintainers and it looks like we're going to deal with the cost of > converting the system but if this dirty hack hadn't been on our radar it > could have really hurt. Like maybe not getting the fix in place before the > next major release in time for backwards compatibility commitments bad. > > So I worry what sort of earthquake this might trigger through libraries. > Like, I'm pretty sure the OpenApiGenerator templates used dynamic > properties for some things so how many little internal libraries are going > to have to be regenerated? What other lightly maintained library are people > going to be stuck waiting to update because someone's CI didn't catch the > deprecation? >
By design my REST API utilizes dynamic properties. I've always found it to be a feature of PHP, not a bug.
> > I think this sort of change is probably for the better, but I worry about > how disruptive this could end up being. >
-- Chase Peeler chasepeeler@gmail.com
  116389
November 15, 2021 20:11 deleugyn@gmail.com (Deleu)
> > By design my REST API utilizes dynamic properties. I've always found it to > be a feature of PHP, not a bug. > > -- > Chase Peeler > chasepeeler@gmail.com >
I am in the unfortunate position of inheriting a system with such REST API design. I can never build new REST APIs to replace the old ones because nobody can ever know how many combinations of possible input parameters there are. -- Marco Aurélio Deleu
  116392
November 15, 2021 20:39 chasepeeler@gmail.com (Chase Peeler)
On Mon, Nov 15, 2021 at 3:11 PM Deleu <deleugyn@gmail.com> wrote:

> By design my REST API utilizes dynamic properties. I've always found it to >> be a feature of PHP, not a bug. >> >> -- >> Chase Peeler >> chasepeeler@gmail.com >> > > I am in the unfortunate position of inheriting a system with such REST API > design. I can never build new REST APIs to replace the old ones because > nobody can ever know how many combinations of possible input parameters > there are. > > Our inputs and outputs are both well defined. I've built a framework around
our entities that convert them into API payloads - attributes (symfony, but eventually we might update it to use native attributes) define what fields are visible based on user and whether it's the short (e.g. part of a collection) or full version. The thing is that occasionally we'll have a payload to return that requires additional attributes. Dynamic properties allow us to just tack that on to the existing entity without having to define it as a property on the entity (outside of the one use case the property isn't needed and it definitely doesn't correspond to a database column).
> -- > Marco Aurélio Deleu >
-- Chase Peeler chasepeeler@gmail.com
  116391
November 15, 2021 20:39 internals@lists.php.net ("Björn Larsson via internals")
Den 2021-11-15 kl. 10:52, skrev Derick Rethans:
> Dear Internals, > > On Wed, 10 Nov 2021, Nikita Popov wrote: > >> On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov ppv@gmail.com> wrote: >> >>> This RFC takes the more direct route of deprecating this >>> functionality entirely. I expect that this will have relatively >>> little impact on modern code (e.g. in Symfony I could fix the vast >>> majority of deprecation warnings with a three-line diff), but may >>> have a big impact on legacy code that doesn't declare properties at >>> all. >>> >> >> I plan to open voting on this RFC soon. Most of the feedback was >> positive, apart from the initial choice of opt-int mechanism, and that >> part should be addressed by the switch to the >> #[AllowDynamicProperties] attribute. > > The voting is now open, but I think one thing was not taken into account > here, the many small changes that push work to maintainers of Open > Source library and CI related tools. > > In the last few years, the release cadence of PHP has increased, which > is great for new features. It however has not been helpful to introduce > many small deprecations and BC breaks in every single release. > > This invariably is making maintainers of Open Source anxious, and > frustrated as so much work is need to keep things up to date. I know > they are *deprecations*, and applications can turn these off, but that's > not the case for maintainers of libraries. > > Before we introduce many more of this into PHP 8.2, I think it would be > wise to figure out a way how to: > > - improve the langauge with new features > - keep maintenance cost for open source library and CI tools much lower > - come up with a set of guidelines for when it is necessary to introduce > BC breaks and deprecations. > > I am all for improving the language and making it more feature rich, but > we have not spend enough time considering the impacts to the full > ecosystem. > > I have therefore voted "no" on this RFC, and I hope you will too. > > cheers, > Derick > Hi,
Maybe the RM's should have a mandate to keep track on deprecations for a specific release and be able to say: "Sorry the shop are closed for further deprecations in this release". What do you think? One could count the deprecations in the 8.x track and have a straw poll on it and/or ask what key deprecations do we see further for the 8.x? Is even the "Dynamic properties" one, one of the last ones? r//Björn L