On 10/18/2014 9:01 AM, Sean Kelly wrote:
So you consider the library interface to be user input?
The library designer has to make that decision, not the language.
What about calls that are used internally but also exposed as part of the
library interface?
The library designer has to make a decision about who's job it is to validate
the parameters to an interface, and thereby deciding what are
input/environmental errors and what are programming bugs.
Avoiding making this decision means the API is underspecified, and we all know
how poorly that works.
Consider:
/******************************
* foo() does magical things.
* Parameters:
* x a value that must be greater than 0 and less than 8
* y a positive integer
* Throws:
* Exception if y is negative
* Returns:
* magic value
*/
int foo(int x, int y)
in { assert(x > 0 && x < 8); }
body {
enforce(y >= 0, "silly rabbit, y should be positive");
... return ...;
}