Hi Yasuo,

Following our conversation, I tried to imagine how DbC should look like in
PHP from user perspective. Finally, I was influenced by the semantic
proposed in D, and syntax proposed for Java. So, these are my initial
thoughts:

For php it may look like the following:

function foo()
    requre(<input-assert-expression>)
    ensure(<output-assert-expression>)
{
  ...
}

It would require only one new reserved word "ensure".

The assert expressions may be checked or not depending on ini directive.
It should be also possible to prevent code generation for assertions (zero
cost asserts). It was already implemented for
https://wiki.php.net/rfc/expectations

For inherited methods, only the self <input-assert-expression> should be
checked, and all parent <output-asser-expression>. This is borrowed from D
but not necessary to be repeated exactly.

I think we shouldn't introduce "invariant" constraints for classes now. May
be later.

Implementation is going to generate code for input constraint after all
RECV opcodes and before code for function body, and code for output
constraint before RETURN opcode (may be reusing implementation of
"finally").

See:
http://dlang.org/contracts.html
http://jan.newmarch.name/java/contracts/paper-long.html

Thanks. Dmitry.

Reply via email to