[Issue 3856] const arguments/instance attributes in conditions/invariants

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Aug 30 06:10:51 PDT 2010


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


Andrej Mitrovic <andrej.mitrovich at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrej.mitrovich at gmail.com


--- Comment #2 from Andrej Mitrovic <andrej.mitrovich at 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: -------


More information about the Digitalmars-d-bugs mailing list