On Mon, Aug 27, 2018 at 12:12:22PM +0100, Ivan Levkivskyi wrote: > On Mon, 27 Aug 2018 at 11:39, Steven D'Aprano <[email protected]> wrote: > > > On Mon, Aug 27, 2018 at 09:24:20AM +0100, Ivan Levkivskyi wrote: > > > TBH, I think one of the main points of design by contract is that > > contracts > > > are verified statically. > > > > No, that's not correct. Contracts may be verified statically if the > > compiler is able to do so, but they are considered runtime checks. > > > > Considered by whom? By people who prefer `assert isinstance(x, int)` over > `x: int`? :-)
No, considered by Bertrand Meyer, the inventor of Design By Contract and the programming language Eiffel. Contracts are not limited to the things which static type-checkers are capable of testing, but can and do involve checks which are impossible or impractical to test at compile-time, like "today is Tuesday" or "the account balance is greater than the amount you are trying to withdraw". > Contract in 99% of cases is just another word for type (maybe a very > complex type like `DAG[T] <: Graph[T]`). > Everything else, like `x >= y` is better expressed as an explicit assert > with an assert message. Contracts ARE assertions. They are assertions about the input a method expects, not merely the type but the value, what result it intends to return, and the invariants of the class after the method is called. Like assertions, they are called at runtime, and can be disabled. Using contracts to enforce type-correctness wouild be silly in Eiffel, because Eiffel already has a powerful static type system. Sybtax-wise, if you're interested in what is possible in a Python-like language, you could do worse than check out Cobra: http://cobra-language.com/trac/cobra/wiki/Contracts -- Steve _______________________________________________ Python-ideas mailing list [email protected] https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
