Re: Design by Contract
| From: | Dmitry Stogov | Date: | Wed, 11 Feb 2015 07:32:11 +0000 |
| Subject: | Re: Design by Contract | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-82440@lists.php.net to get a copy of this message | ||
So, I think we have to support them as well.
On Wed, Feb 11, 2015 at 10:12 AM, Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
> Hi Dmitry and Joe,
>
> On Wed, Feb 11, 2015 at 4:02 PM, Dmitry Stogov <dmitry@zend.com> wrote:
>
>> I think we can't support contracts on interfaces and abstract methods.
>> How D works?
>
>
> D supports contract in structure and interface. Structure is more like
> classes in D, though.
>
> interface I
> {
> int foo(int i)
> in { assert(i > 7); }
> out (result) { assert(result & 1); }
>
> void bar();
> }
>
> http://dlang.org/interface.html
>
>
> Eiffel support contracts for interfaces.
>
> class interface DICTIONARY [ELEMENT] feature
>
> put (x: ELEMENT; key: STRING) is
> -- Insert x so that it will be retrievable
> -- through key.
> require
> count <= capacity
> not key.empty
> ensure
> has (x)
> item (key) = x
> count = old count + 1
>
> ... Interface specifications of other features ...
>
> invariant
>
> 0 <= count
> count <= capacity
>
> end -- class interface DICTIONARY
>
>
> https://archive.eiffel.com/doc/manuals/technology/contract/
>
> If there is no technical difficulties, I would like to have it.
>
> Regards,
>
> --
> Yasuo Ohgaki
> yohgaki@ohgaki.net
>