Re: Design by Contract
| From: | Dmitry Stogov | Date: | Fri, 06 Feb 2015 09:34:29 +0000 |
| Subject: | Re: Design by Contract | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-82029@lists.php.net to get a copy of this message | ||
On Fri, Feb 6, 2015 at 2:01 AM, Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
> Hi Dmitry,
>
> On Fri, Feb 6, 2015 at 3:58 AM, Dmitry Stogov <dmitry@zend.com> wrote:
>
>> I don't think we should chose "right" approach right now.
>> It's better to collect few possible solutions e.g. statements,
>> expressions, doc-comments, attributes...
>> then describe their pros and cons to select the best one
>>
>
> I agree.
>
> ensure($ret) {}
>
> is better than my original thought.
> I don't object to restrict pre/post conditions to expressions.
>
> require(is_numeric($a) && $a >= 0, "some error message")
> require(is_numerc($b) && $b >= 0, "another error message")
>
> this requires less lines and meaning is clear. For parsers other than PHP
>
> require {
> assert(is_numeric($a) && $a >= 0, "some error message")
> assert(is_numerc($b) && $b >= 0, "another error message")
> }
>
> may be a little easy to parse. Even if it is, it's marginal.
>
> Allowing any PHP syntax would require other parsers complex parsing.
> Those who would like to get pre/post conditions, it's time to think how
> it looks like including reflection. Restricting pre/post conditions to
> assert expressions may yield clean result. AST would be handy.
>
I think it should not be a big problem extending parser to support
require/ensure syntax.
AST is going to be really helpful :)
Compilation is not going to be trivial but it's solvable.
> Reflection is not too important, since pre/post conditions are for
> development. It may be okay to reflect existence of pre/post conditions.
> These conditions does not exists in production anyway. I'm not sure it's
> worth to support reflection. Rather than reflection, user space AST browser
> could be more useful.
>
> IMHO, E_WARNING is good enough.
> If anyone would like to 'throw' exceptions, it's time to think, too.
>
We may relay on assert() behavior. Depending on some setting it may emit
error or throw exception.
Thanks. Dmtiry.
>
> These are my random thoughts.
>
> Regards,
>
> --
> Yasuo Ohgaki
> yohgaki@ohgaki.net
>
>