I am trying to implement the best system I can *without* changing the language spec... Of course, I am running into problems. But it remains to be seen whether these problems are insoluble, or just require more digging in the Ruby reference. Hal > On Tue, 28 Mar 2000, Andrew Hunt wrote: > > > Well, that brings up an interesting question. What do > > you think about implementing Design By Contract in a > > non-staticaly typed language such as Ruby? I've toyed around > > with several implementations of DBC in Ruby, and once Dave > > and I get a bit more of the Ruby book finished I'll look at > > it again. > > > > But would that be a usefull feature to have in Ruby? > > > > /\ndy > > Having looked at this a little, I can see it would be a good idea. > > From what I have read a class, method, (whatever), agrees to do certain > things to data meeting certain pre-conditions, and it agrees to produce > certain post-conditions when it does so. It does not agree to do anything > else. Some of these checks can be done at compile time, but mostly they'd > be done at run time. I think that is the heart of the matter. > > So I agree that putting specific keywords to support this into the > language would be a good idea, because their presence would encourage > people to do checks on data, and would also aid the understanding of the > intentions behind code design. Instead of wondering what all these > references to Wands and Handkerchieves are about, one could clearly see > that the pre-conditions are the presence of a Top_Hat and the > post-condition is a Rabbit pulled from it. Given the multi-lingual > environment in which Ruby code is produced, this can only be helpful. > > Now, you ask about a non-statically typed language. I can see that there > is less information about a type in such a case, because it can take any > value, and this was raised when we discussed my enumeration class. > However, there is a case in Ruby where conditions are already imposed on > data, and how these conditions affect the operation of the program is > determined before run-time. I am talking about Taint checks. I wonder if > it would be possible to apply some contractual checks, in a similar way to > Taint checking, to data flowing in and out of methods, even prior to > running the code? I have never tried implement this, so could be talking > out of my Top_Hat, a most unsatisfactory post-condition. :-) > > Hugh > hgs / dmu.ac.uk >