On Wed, Feb 11, 2015 at 10:58 AM, Stanislav Malyshev <smalys...@gmail.com>
wrote:

> Hi!
>
> > 1) contracts in doc-commetns https://wiki.php.net/rfc/dbc
> >
> > /**
> >  * @requires ($a >= 0)
> >  */
> > function foo($a) {
> > }
>
> We've spent several years rejecting annotations because no information
> can be in comments, not even a little bit, not even a tiny. Now we'd
> have full-blown running code in comments? How would this code be
> debugged/profiled/interpreted by tools? Writing PHP parser is not easy
> right now, but this would turn it into nightmare (what if you have a
> comment inside @requires? etc.)
>

I don't see how this can be implemented in PHP core as well.
This approach is for external tools.


>
> > 2) contracts as part of the language https://wiki.php.net/rfc/dbc2
> >
> > function foo($a)
> >     require($a >= 0)
> > {
> > }
>
> This is a step better but still we have the similar issues with
> readability, to which reuse of 'require' is added.
>
> > 3) contracts in annotations
> >
> > <<requires($a >= 0)>>
> > function foo($a) {
> > }
>
> That one actually looks better to me, but: I'm not sure how annotation
> syntax is supposed to support expressions or closures,


keep AST.


> yet more - how it
> is supposed to share the scope with the function. I.e., if you define
> annotation class/method/function/data structure/whatever it is, what it
> is supposed to receive?


We may have AST transformation pass that would convert these annotations
into assert() and insert them into AST of the function.


> Is it some special form of annotation for this
> purpose only (meh)?
>

yes. some special attributes. requires/ensures/invariant


> Oh, and <<>> syntax is *ugly* ;)
>

It's from HHVM. I don't like it as well, please, propose the better one.

Thanks. Dmitry.


>
> --
> Stas Malyshev
> smalys...@gmail.com
>

Reply via email to