[#3986] Re: Principle of least effort -- another Ruby virtue. — Andrew Hunt <andy@...>

> Principle of Least Effort.

14 messages 2000/07/14

[#4043] What are you using Ruby for? — Dave Thomas <Dave@...>

16 messages 2000/07/16

[#4139] Facilitating Ruby self-propagation with the rig-it autopolymorph application. — Conrad Schneiker <schneik@...>

Hi,

11 messages 2000/07/20

[ruby-talk:03903] Re: require, ensure, and Design by Contract

From: "Hal E. Fulton" <hfulton@...>
Date: 2000-07-09 21:36:44 UTC
List: ruby-talk #3903
Patrick,

I'm interested in this, too. I've been trying to 
put something together, but my Ruby is not
(yet!) as good as Dave's.

I'd like to have an implementation that puts as
little burden on the programmer as possible.
Therefore I'm shying away from what I'm looking
at right now: An implementation that requires the
programmer to define two other methods for each
method for which he wants to check pre- and post-
conditions.

I thought there might be some way to generate
these on the fly, at the time the "pre" function was
called, for instance. But there is no way to determine
the class or object of the method that called you.

But I have been thinking of a syntax something like
this:

   pre("positive:x>0  empty:arr.size==0  old.somevar")
   # ...
   post("nonempty:arr.size>0  incr:somevar=old.somevar+1")

The "label:" notation would provide a mnemonic for the
error message. (Doesn't Eiffel provide this?)

The "old.somevar" notation would be a signal to save off the
value of somevar so that it could be checked at the end.

This is all extremely half-baked, though. Inheritance is the real
issue: We have to make sure that contracts are heritable.

Discussion is welcome.

Hal Fulton



In This Thread