Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:114117 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 75749 invoked from network); 24 Apr 2021 10:57:11 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 24 Apr 2021 10:57:11 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 287551804C6 for ; Sat, 24 Apr 2021 04:00:42 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,BODY_8BITS, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL, SPF_HELO_PASS,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-Virus: No X-Envelope-From: Received: from mail-40137.protonmail.ch (mail-40137.protonmail.ch [185.70.40.137]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Sat, 24 Apr 2021 04:00:41 -0700 (PDT) Date: Sat, 24 Apr 2021 11:00:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1619262039; bh=EG3gpAWnPTXJ8dhjrdc4QsmlckRusyMErAD02BZY71A=; h=Date:To:From:Reply-To:Subject:In-Reply-To:References:From; b=ITVmF4dx+XwbubUGTcfPj9lVWo766PRolPz3XfEpHhEHGKeVy1eEY22cU4u1Y2D/V nG2Xm5WY1qxviqqF+IspHpgCPKAS8RxYSSRkxM6CTdRjTCEh7B6uAewQWIWI7toIh/ FcRhB5EJKIjJDZkAx4G+OGO+NMVNwz3yFlGnyaq8= To: PHP Internals Reply-To: Saif Eddin Gmati Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg=pgp-sha256; boundary="---------------------3502a3841e3d18594cd7fc8f6521644d"; charset=utf-8 Subject: Re: [RFC][Draft] Sealed Classes From: azjezz@protonmail.com (Saif Eddin Gmati) -----------------------3502a3841e3d18594cd7fc8f6521644d Content-Type: multipart/mixed;boundary=---------------------14b0edd24d31192c465ca4502167ddb5 -----------------------14b0edd24d31192c465ca4502167ddb5 Content-Type: multipart/alternative;boundary=---------------------f1105c9eef3c63eb954e41937037320e -----------------------f1105c9eef3c63eb954e41937037320e Content-Transfer-Encoding: quoted-printable Content-Type: text/plain;charset=utf-8 A major behavior i wanted to discuss is how should sealed interfaces work,= and specially around `Throwable` which is currently sealed to only `Error= ` and `Exception`, but allows other interfaces to extend it, and other cla= sses to implement it as long as they extend `Error` or `Exception` ( or an= other class that does so ). As per the current proposal, if `Throwable` is to be declared `sealed`, pe= rmitting only `Error` and `Exception`, it won't be possible to extend it, = resulting in a major BC-break, considering that too many libraries extend = this interface in their own `ExceptionInterface`. To work around this, there's two solution: 1. don't declare `Throwable` sealed and keep it as a special case. 2. interfaces declared sealed, can be extended by other interfaces, howeve= r, classes that implement either the sealed interface directly, or via ano= ther interface, have to extend one of the classes the sealed interface per= mits. The second solution will allow declaring `Throwable` sealed, and would bri= ng complete consistency between internally sealed symbols, and user land, = without any BC breaks, and IMHO, it doesn't hurt as at the end, no one wil= l be able to implement `Throwable` without extending the permitted classes= . Note: with the second solution, if an interface is sealed and permits only= 2 classes which are final, and you extend that interface into another, th= ere's no way you can actually implement your new interface, and i will be = as if you just declared a final interface. =E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90 Original M= essage =E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90=E2=80=90 On Saturday, April 24, 2021 11:55 AM, Saif Eddin Gmati wrote: > Hello Internals, > = > I'm sending this email to open discussion about sealed classes, interfac= es, and traits feature for PHP 8.1. > = > I have create a Draft RFC here: https://wiki.php.net/rfc/sealed_classes > = > A major concern for few people have been the syntax, in which it introdu= ces 2 new keywords into the languages, therefor, i have added a section ab= out alternative syntax which could be used to avoid this problem. > = > Regards, > = > Saif. -----------------------f1105c9eef3c63eb954e41937037320e Content-Type: multipart/related;boundary=---------------------a443fb0bf85c6eacf3530d699bd58a83 -----------------------a443fb0bf85c6eacf3530d699bd58a83 Content-Type: text/html;charset=utf-8 Content-Transfer-Encoding: base64 PGRpdj5BIG1ham9yIGJlaGF2aW9yIGkgd2FudGVkIHRvIGRpc2N1c3MgaXMgaG93IHNob3VsZCBz ZWFsZWQgaW50ZXJmYWNlcyB3b3JrLCBhbmQgc3BlY2lhbGx5IGFyb3VuZCBgVGhyb3dhYmxlYCB3 aGljaCBpcyBjdXJyZW50bHkgc2VhbGVkIHRvIG9ubHkgYEVycm9yYCBhbmQgYEV4Y2VwdGlvbmAs IGJ1dCBhbGxvd3Mgb3RoZXIgaW50ZXJmYWNlcyB0byBleHRlbmQgaXQsIGFuZCBvdGhlciBjbGFz c2VzIHRvIGltcGxlbWVudCBpdCBhcyBsb25nIGFzIHRoZXkgZXh0ZW5kIGBFcnJvcmAgb3IgYEV4 Y2VwdGlvbmAgKCBvciBhbm90aGVyIGNsYXNzIHRoYXQgZG9lcyBzbyApLjxicj48L2Rpdj48ZGl2 Pjxicj48L2Rpdj48ZGl2PkFzIHBlciB0aGUgY3VycmVudCBwcm9wb3NhbCwgaWYgYFRocm93YWJs ZWAgaXMgdG8gYmUgZGVjbGFyZWQgYHNlYWxlZGAsIHBlcm1pdHRpbmcgb25seSBgRXJyb3JgIGFu ZCBgRXhjZXB0aW9uYCwgaXQgd29uJ3QgYmUgcG9zc2libGUgdG8gZXh0ZW5kIGl0LCByZXN1bHRp bmcgaW4gYSBtYWpvciBCQy1icmVhaywgY29uc2lkZXJpbmcgdGhhdCB0b28gbWFueSBsaWJyYXJp ZXMgZXh0ZW5kIHRoaXMgaW50ZXJmYWNlIGluIHRoZWlyIG93biBgRXhjZXB0aW9uSW50ZXJmYWNl YC48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UbyB3b3JrIGFyb3VuZCB0aGlzLCB0aGVy ZSdzIHR3byBzb2x1dGlvbjo8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4xLiBkb24ndCBk ZWNsYXJlIGBUaHJvd2FibGVgIHNlYWxlZCBhbmQga2VlcCBpdCBhcyBhIHNwZWNpYWwgY2FzZS48 YnI+PC9kaXY+PGRpdj4yLiAgaW50ZXJmYWNlcyBkZWNsYXJlZCBzZWFsZWQsIGNhbiBiZSBleHRl bmRlZCBieSBvdGhlciBpbnRlcmZhY2VzLCAKaG93ZXZlciwgY2xhc3NlcyB0aGF0IGltcGxlbWVu dCBlaXRoZXIgdGhlIHNlYWxlZCBpbnRlcmZhY2UgZGlyZWN0bHksIG9yCiB2aWEgYW5vdGhlciBp bnRlcmZhY2UsIGhhdmUgdG8gZXh0ZW5kIG9uZSBvZiB0aGUgY2xhc3NlcyB0aGUgc2VhbGVkIApp bnRlcmZhY2UgcGVybWl0cy4gPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIHNlY29u ZCBzb2x1dGlvbiB3aWxsIGFsbG93IGRlY2xhcmluZyBgVGhyb3dhYmxlYCBzZWFsZWQsIGFuZCB3 b3VsZCBicmluZyBjb21wbGV0ZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIGludGVybmFsbHkgc2VhbGVk IHN5bWJvbHMsIGFuZCB1c2VyIGxhbmQsIHdpdGhvdXQgYW55IEJDIGJyZWFrcywgYW5kIElNSE8s IGl0IGRvZXNuJ3QgaHVydCBhcyBhdCB0aGUgZW5kLCBubyBvbmUgd2lsbCBiZSAKYWJsZSB0byBp bXBsZW1lbnQgYFRocm93YWJsZWAgd2l0aG91dCBleHRlbmRpbmcgdGhlIHBlcm1pdHRlZCBjbGFz c2VzLiA8YnI+PC9kaXY+PGRpdj4gPGJyPjwvZGl2PjxkaXY+Tm90ZTogd2l0aCB0aGUgc2Vjb25k IHNvbHV0aW9uLCBpZiBhbiBpbnRlcmZhY2UgaXMgc2VhbGVkIGFuZCBwZXJtaXRzIG9ubHkgMiBj bGFzc2VzIHdoaWNoIGFyZSBmaW5hbCwgCmFuZCB5b3UgZXh0ZW5kIHRoYXQgaW50ZXJmYWNlIGlu dG8gYW5vdGhlciwgdGhlcmUncyBubyB3YXkgeW91IGNhbiAKYWN0dWFsbHkgaW1wbGVtZW50IHlv dXIgbmV3IGludGVyZmFjZSwgYW5kIGkgd2lsbCBiZSBhcyBpZiB5b3UganVzdCAKZGVjbGFyZWQg YSBmaW5hbCBpbnRlcmZhY2UuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9InBy b3Rvbm1haWxfc2lnbmF0dXJlX2Jsb2NrIj48ZGl2IGNsYXNzPSJwcm90b25tYWlsX3NpZ25hdHVy ZV9ibG9jay11c2VyIHByb3Rvbm1haWxfc2lnbmF0dXJlX2Jsb2NrLWVtcHR5Ij48YnI+PC9kaXY+ PC9kaXY+PGRpdj7igJDigJDigJDigJDigJDigJDigJAgT3JpZ2luYWwgTWVzc2FnZSDigJDigJDi gJDigJDigJDigJDigJA8YnI+PC9kaXY+PGRpdj4gT24gU2F0dXJkYXksIEFwcmlsIDI0LCAyMDIx IDExOjU1IEFNLCBTYWlmIEVkZGluIEdtYXRpICZsdDthemplenpAcHJvdG9ubWFpbC5jb20mZ3Q7 IHdyb3RlOjxicj48L2Rpdj48ZGl2PiA8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9InByb3Rv bm1haWxfcXVvdGUiIHR5cGU9ImNpdGUiPjxkaXY+SGVsbG8gSW50ZXJuYWxzLDxicj48L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PkknbSBzZW5kaW5nIHRoaXMgZW1haWwgdG8gb3BlbiBkaXNjdXNz aW9uIGFib3V0IHNlYWxlZCBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgdHJhaXRzIGZlYXR1cmUg Zm9yIFBIUCA4LjEuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSBoYXZlIGNyZWF0ZSBh IERyYWZ0IFJGQyBoZXJlOiA8YSBocmVmPSJodHRwczovL3dpa2kucGhwLm5ldC9yZmMvc2VhbGVk X2NsYXNzZXMiPmh0dHBzOi8vd2lraS5waHAubmV0L3JmYy9zZWFsZWRfY2xhc3NlczwvYT48YnI+ PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5BIG1ham9yIGNvbmNlcm4gZm9yIGZldyBwZW9wbGUg aGF2ZSBiZWVuIHRoZSBzeW50YXgsIGluIHdoaWNoIGl0IGludHJvZHVjZXMgMiBuZXcga2V5d29y ZHMgaW50byB0aGUgbGFuZ3VhZ2VzLCB0aGVyZWZvciwgaSBoYXZlIGFkZGVkIGEgc2VjdGlvbiBh Ym91dCBhbHRlcm5hdGl2ZSBzeW50YXggd2hpY2ggY291bGQgYmUgdXNlZCB0byBhdm9pZCB0aGlz IHByb2JsZW0uPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+UmVnYXJkcyw8YnI+PC9kaXY+ PGRpdj48YnI+PC9kaXY+PGRpdj5TYWlmLjxicj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj48YnI+ PC9kaXY+ -----------------------a443fb0bf85c6eacf3530d699bd58a83-- -----------------------f1105c9eef3c63eb954e41937037320e-- -----------------------14b0edd24d31192c465ca4502167ddb5-- -----------------------3502a3841e3d18594cd7fc8f6521644d Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: ProtonMail wsFzBAEBCAAGBQJgg/pSACEJELAOCkaz8cFXFiEEOazMpP0wDQTIQG6zsA4K RrPxwVfmQRAAqKTvNOAULyls34ETe/K/T0pnghfpmFoEs47zahXY0E/vVhPg 8UeRIu9aMaFSV2fTMeLjkk5tbiPdnajfF8hmysSIrAlNYcIgP/vxdeyAAzNL Uwu7UrjKdIYT0qmQKU4ggEHJWiu9xPuMQeinnuNr7h827UNnnJzjj0L5JZdw YbMJdAsKsiV18tztZFEAtpwrx3zXE/78iepW6xPxRJs9V1MJoiny4PgMRamX M0mys5LyrDqop8f6Vj/AvMjou3dgeEbxT/LkJ220CYtxf5R1EGABtSTLXfpi YzY2KFwJPBntJNBkFUUEHRR5ttKmVjnGjYX8rfSGqGv+3CzGbZLCwjUSwUda mkiiGZ8Boz4AjW8uakMSCS7Nu0e50SmDE4CEGzg4B8VDRDwIlzzt+S3LDjda k74ogLS5Ptas8eren4SjYD3IVMnqcOTWSJSGqb4c/ueC9METOBpyRdtAuMwj YVhrD5sispfJfwlZhXuVtD64ino15F+++gR7SZnFe5l3yHVs9Z1HwO4VPZgs ZfjZG2JBF73r31gJBHKLVVrQIL8aFKZy4+gXmR3fvXw65/vqTRkLLwwPQebk w7oqxUBxNuGfU9HDccX5tk5FiV5xFTAEO1f7N4KJsTuAIhQF7gN/on9tIMZ5 MK1f7BaiWABWjDX4elOmrT35tAHoQ5QJm68= =6CMI -----END PGP SIGNATURE----- -----------------------3502a3841e3d18594cd7fc8f6521644d--