My concern is actually neither performance nor brevity - my concern is, can
you read the code and actually understand what it does, can you write code
without running into surprising side-effects, and so on.

DbC might have merit in terms of performance, but perhaps not so much in a
scripting language - if performance was critical to a given project, I
would not be using a scripting language. The addition of DbC and marginally
better performance for certain specific use-cases wouldn't change that for
me.


On Mon, Apr 10, 2017 at 4:04 AM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:

> Hi Rasmus,
>
> Although DbC is not what you need, but DbC could solve your issue
> more efficiently. i.e. Faster execution, not shorter code.
>
> https://wiki.php.net/rfc/dbc2
>
> With DbC, caller has responsibility to pass correct parameters.
>
> On Sun, Apr 9, 2017 at 6:30 PM, Rasmus Schultz <ras...@mindplay.dk> wrote:
>
>>
>> $one = "1";
>> $one_int = (int) $one;
>> add_one($one_int);
>>
>
>
> add_one(&$value)
>   require (is_int($value))
> {
>    $value += 1;
> }
>
> // Caller has responsibility to pass correct parameters.
> $one = filter_validate($_GET['var'], FILTER_VALIDATE_INT);
> add_one($one);
>
>
>
>
>> class Foo { public function __toString() { return "foo"; } }
>> function append_to(string &$str) { $str .= "_bar"; }
>> $foo = new Foo();
>> append_to($foo);
>> var_dump($foo); // string(7) "foo_bar"
>
>
>
> class Foo { public function __toString() { return "foo"; } }
>
> function append_to(&$str)
>   require (is_string($str))
> {
>   $str .= "_bar";
> }
>
> $foo = new Foo();
>
> // Caller has responsibility to pass correct parameters, but it's not
> append_to($foo); // Error at DbC precondition check in append_foo()
> var_dump($foo); // Cannot reach here in dev mode
>
>
>
> I really like parameter type check.
> Problem is type check makes execution slower.
> Another problem is type check is not enough for many codes.
>
> With DbC support, we can specify any expressions. Therefore, we can
> check much more complex requirements for functions/methods at
> development time.
>
>
>
> e.g.
> function save_age($user_age)
>   require (is_int($user_age))
>   require ($user_age >= 0)
>   require ($user_age < 150)
> {
>    save_to_somewehre($user_age);
> }
> //Note: All input parameters must be validated to be correct value for the
> app. e.g. use filter_validate()/etc
>
>
> What you really need might be DbC.
>
> Regards,
>
> --
> Yasuo Ohgaki
> yohg...@ohgaki.net
>
>

Reply via email to