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