On Sun, 20 January 2002, "Me" wrote 

> 
> - LAST
> (Per Damian's last (LAST/POST) post.)

Yup.

> - FIRST?
> (Symmetry.)

No. We feel that such code just goes at the start of the block. Of
course, there's an argument that you might have several entry points to
a block (via C<goto> labels) and still want some code executed no matter
where you land inside. I'm just not sure we really want to support that
pathology. ;-)


> - ALWAYS?
> (Another plausible addition. Rounds out PRE and POST
> with invariant assertions that get checked twice, once at
> the time PRE does, once at the time POST does.
> Personally I'd leave this out until it became clear, well
> past p6.0, whether it was really worth it, but it seems
> worth mentioning.).

I feel the same way. Invariant checking in most Design-by-Contract
systems doesn't work that way, and has another purpose entirely.
Invariants are implicitly POST blocks that are automatically distributed
to *all* methods of the class for which they're defined, but which only
execute on transitions back to callers *outside* that class's hierarchy.


Perl 6 *will* have invariant checking, but I believe it should be via a
property on the class declaration:

        class Positive
                is always { $.value > 0 }
                is always { $.feelings =~ /optimistic/i }
                is always { $.polarity eq '+' };


Damian 


Reply via email to