On Tue, Feb 17, 2015 at 5:06 PM, Nikita Popov <nikita....@gmail.com> wrote:

> On Mon, Feb 16, 2015 at 10:15 PM, Dmitry Stogov <dmi...@zend.com> wrote:
>
>> Hi Nikita,
>>
>> On Tue, Feb 17, 2015 at 12:07 AM, Nikita Popov <nikita....@gmail.com>
>> wrote:
>>
>>> On Mon, Feb 16, 2015 at 10:02 PM, Dmitry Stogov <dmi...@zend.com> wrote:
>>>
>>>>
>>>>
>>>> On Mon, Feb 16, 2015 at 11:05 PM, Benjamin Eberlei <kont...@beberlei.de
>>>> > wrote:
>>>>
>>>>>
>>>>>
>>>>> On Mon, Feb 16, 2015 at 12:07 PM, Dmitry Stogov <dmi...@zend.com>
>>>>> wrote:
>>>>>
>>>>>> hi,
>>>>>>
>>>>>> During discussion of different ways of implementing "Design by
>>>>>> Contract" we
>>>>>> got an idea of using annotations.
>>>>>>
>>>>>> BTW: annotations are useful by their own and may be used for different
>>>>>> purposes. Support for annotations was proposed long time ago:
>>>>>>
>>>>>> https://wiki.php.net/rfc/annotations
>>>>>> https://wiki.php.net/rfc/annotations-in-docblock
>>>>>> https://wiki.php.net/rfc/reflection_doccomment_annotations
>>>>>>
>>>>>> HHVM already implemented similar concept
>>>>>>
>>>>>> http://docs.hhvm.com/manual/en/hack.attributes.php
>>>>>>
>>>>>> I made a quick and dirty PoC that shows how we may implement
>>>>>> annotations in
>>>>>> PHP7 and how powerful they may be :
>>>>>> https://gist.github.com/dstogov/dbf2a8f46e43719bd2c2
>>>>>
>>>>>
>>>>> How about not exposing the AST, and then the userland can pass context
>>>>> to a method $reflection->getAnnotation($name, $context);
>>>>>
>>>>> https://gist.github.com/beberlei/0dc36d4412b8e3454912
>>>>>
>>>>> That way AST is not exposed to userland.
>>>>>
>>>>
>>>> Your example handles just particular use-case.
>>>> I would like to provide a general solution.
>>>>
>>>> Thanks. Dmitry.
>>>>
>>>
>>> Could you provide some more info on how you would imagine this to be
>>> used for the DbC use case? As far as I see, this would require injecting
>>> code into the method body based on the annotations. Does that mean that
>>> annotations handlers will get the chance to modify the AST of the method
>>> itself during compilation? Or how is this supposed to be realized?
>>>
>>
>> In general, it must be possible to plug into compilation process using
>> zend_ast_process() callback and modify function AST, inserting constraints
>> validation in proper places.
>> But for now, I'm thinking only about metadata syntax and representation.
>> I just showed, how it can be used to represent DbC constraints.
>> I don't think we need user-level interface to modify AST.
>>
>
> To make sure I got it right: The AST-based annotations are only there to
> allow handling by PHP extensions (or the engine itself), while evaluated
> annotations are there for use by userland code?
>
> Nikita
>

I think yes,
However, Alexander thinks differently
https://wiki.php.net/rfc/parser-extension-api
Of course this is not for 7.0

Thanks. Dmitry.

Reply via email to