Program logic bugs vs input/environmental errors
rst256 via Digitalmars-d
digitalmars-d at puremagic.com
Mon Oct 20 12:59:02 PDT 2014
On Saturday, 18 October 2014 at 17:55:04 UTC, Walter Bright wrote:
> 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 ...;
> }
Contract Programming. Contract-rider list all required for this
item api conditions. In that case is a list of exseption handler
on client side.
Epic sample of first post, may be like this:
in {rider(except, "this class may trowing io exception, you must
defined ...") }
More information about the Digitalmars-d
mailing list