http://d.puremagic.com/issues/show_bug.cgi?id=3856


Andrej Mitrovic <andrej.mitrov...@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrej.mitrov...@gmail.com


--- Comment #2 from Andrej Mitrovic <andrej.mitrov...@gmail.com> 2010-08-30 
06:10:35 PDT ---
(In reply to comment #0)
> Currently preconditions and postconditions (D contract based programming) can
> modify input arguments, this prints [0, 2]:
> 
> import std.stdio: writeln;
> 
> void foo(int[] arr)
> out { arr[0] = 0; }
> body {}
> 
> void main() {
>     auto a = [1, 2];
>     foo(a);
>     writeln(a);
> }
> 
> But I think it's better if arguments are seen as const inside preconditions 
> and
> postconditions. Because modifying them alters too much the program behaviour
> between release and not release builds.
> 

Yes. As stated in TDPL, changing the state of the application inside an in/out
contract is *illegal*. An application must run with the same behavior and
results whether or not it executes it's contracts (debug vs release mode).

I'm not sure about invariants. Although it would be best if they didn't modify
the state of 'this', they are still allowed to call private methods and in turn
those methods might change the state of the application.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to