Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:97680 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 78368 invoked from network); 11 Jan 2017 14:00:26 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Jan 2017 14:00:26 -0000 Authentication-Results: pb1.pair.com smtp.mail=me@kelunik.com; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=me@kelunik.com; sender-id=unknown Received-SPF: error (pb1.pair.com: domain kelunik.com from 81.169.146.217 cause and error) X-PHP-List-Original-Sender: me@kelunik.com X-Host-Fingerprint: 81.169.146.217 mo4-p00-ob.smtp.rzone.de Received: from [81.169.146.217] ([81.169.146.217:28664] helo=mo4-p00-ob.smtp.rzone.de) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 51/5E-55699-27A36785 for ; Wed, 11 Jan 2017 09:00:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1484143213; l=13537; s=domk; d=kelunik.com; h=Content-Type:Cc:To:Subject:Date:From:In-Reply-To:References: MIME-Version; bh=6dTWhwYXb5uZuwJ9ts56bsXrOBi6a4ZovrzYm9Y1pyY=; b=HHadskK5Fo2yTc84ap3qJfArvSv4hxjyZUf50ASqDrLaoq39kmid6P+1+3Ts5kFuuT vS265lz5EaMsd6I52L+QQGTBG70PdCtvpP5aMNMWsIu7dRtrIvwaGj+RRjCKzJHZi6hT IbUEbUwJ6pUxbBQvqzZgPJxPgS4ixvbPaS2Ac= X-RZG-AUTH: :IWkkfkWkbvHsXQGmRYmUo9mls2vWuiu+7SLDup6E67mzuoBPBqD+ud8= X-RZG-CLASS-ID: mo00 Received: from mail-qk0-f169.google.com ([209.85.220.169]) by smtp.strato.de (RZmta 39.11 AUTH) with ESMTPSA id Y09b3ct0BE0DXlF (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (curve secp384r1 with 384 ECDH bits, eq. 7680 bits RSA)) (Client did not present a certificate) for ; Wed, 11 Jan 2017 15:00:13 +0100 (CET) Received: by mail-qk0-f169.google.com with SMTP id a20so209969261qkc.1 for ; Wed, 11 Jan 2017 06:00:13 -0800 (PST) X-Gm-Message-State: AIkVDXKT0+DP194azUL9CYls3okgaz3oE3gkyzhSH3zDDLpD/JAAiQ/dOCnKMW/XHlVS/Tt5w65Lhf4vzM0Tgg== X-Received: by 10.55.129.194 with SMTP id c185mr7985074qkd.0.1484143212773; Wed, 11 Jan 2017 06:00:12 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: Date: Wed, 11 Jan 2017 14:00:02 +0000 X-Gmail-Original-Message-ID: Message-ID: To: =?UTF-8?Q?Micha=C5=82_Brzuchalski?= , Nikita Nefedov Cc: Dmitry Stogov , PHP Internals Content-Type: multipart/alternative; boundary=94eb2c05f792fe53f30545d204b9 Subject: Re: [PHP-DEV] Change in type-hint representation From: me@kelunik.com (Niklas Keller) --94eb2c05f792fe53f30545d204b9 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Micha=C5=82 Brzuchalski schrieb am Mi., 11. Jan. 2= 017, 14:51: > 2017-01-11 14:35 GMT+01:00 Nikita Nefedov : > > > On Wed, 11 Jan 2017 15:07:39 +0300, Dmitry Stogov > wrote: > > > > Hi, > >> > >> > >> I propose to introduce a unified type representation (zend_type). > >> > >> Now it's going to be used for typing of arguments and return values. > >> > >> Later we should use it for properties and other things. > >> > >> > >> https://gist.github.com/dstogov/1b25079856afccf0d69f77d499cb0ab1 > >> > >> > >> The main changes are in zend_types.h and zend_compile.h, the rest is > just > >> an adoption for new type representation. > >> > >> I don't think we need RFC, because this is just an internal change tha= t > >> doesn't change behavior. > >> > >> > >> I got the idea working on typed properties together with Bob and Joe. > >> > >> https://github.com/php/php-src/compare/master...bwoebi:typed > >> _ref_properties > >> > >> I think it would be better to introduce zend_type and then continue wo= rk > >> on typed properties. > >> > >> > >> Any comments? > >> > >> > >> Thanks. Dmitry. > >> > >> > >> > > Hey Dmitry, > > > > Having worked on callable prototypes I'd say unifying PHP types in Zend > > is something we urgently need for PHP to continue evolving. > > > > I'm not sure if PHP have ever been compatible with less-than-32bit > > archs but if it was I think it should be said that this would break > > such compatibility though. > > > > It would be great if there were some comment in the code near zend_type > > declaration where you'd explain how it is used and how additional > > data is being added to the pointer. > > > > Is there any use of ZEND_TYPE_CE() macro? It seems to be forgotten ther= e? > > > > If I understood this correctly, the layout of zend_type is as follows: > > > > [xxxx xxxx xxxx xxxx] xxxx xxxx xxxx xxy0 - for IS_OBJECT type hint > > where the `xxxx`s are a (zend_string *) pointer and `y` designates > > an allow_null flag > > > > > I've got prepared Object Typehint RFC > https://wiki.php.net/rfc/object-typehint where > IS_OBJECT is used without class name as type hint for any object kind, if > this patch > would be applied how can I deal with this new zend_type? > As far as I undestand last 0 for IS_OBJECT and no (zend_string *) pointer > would give me > empty zend_string value right? So that won't bive me any chances to store > IS_OBJECT > without classname am I right? > Morning. As far as I understand it, 0 just means no built in type. As long as no class name is there, it's just no type at all. Regards, Niklas > [xxxx xxxx xxxx xxxx] xxxx xxxx xxxx xxy1 - for all other type hints > > where the `xxxx`s are a IS_CALLABLE, _IS_BOOL, IS_LONG, IS_DOUBLE, > > IS_STRING or IS_ARRAY > > > > Do we decide here that IS_REF modifier should belong to the concrete > > usages of the type (e.g. referentiality is a property of a variable > > and not of a type)? > > I'm not sure this if is a right decision or not but I feel like this > > question should be raised. It is usually the opposite in other language= s. > > > > How would you plan to extend this further? Let's say at some point we > > will have callable prototypes or generic classes: we will need to encod= e > > somehow this type into zend_type: `callable(A)` or `A`. > > Even right now it might be useful (as you suggest with ZEND_TYPE_CE) > > to store a (zend_class_entry *) instead of (zend_string *) when > > it is known to us in the zend_type. > > Seems like without extending zend_type to the size of two pointers > > it almost isn't doable :\ > > Or, it could be made that zend_type, when it's not a simple type hint, > > would point to the `zend_type_complex` which would store a > > zend_class_entry pointer (or not, if it's for callable) and an array > > of type specifiers. But that introduces another indirection. > > > > Anyway thanks for polishing this part, we definitely need zend_type in > > some form. > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > -- > regards / pozdrawiam, > -- > Micha=C5=82 Brzuchalski > about.me/brzuchal > brzuchalski.com > --94eb2c05f792fe53f30545d204b9--