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.

Thanks. Dmitry.


>
> Nikita
>

Reply via email to