On Aug 24, 2014, at 2:09 PM, Matthias Felleisen <[email protected]> wrote:

> Before you make fondue, ask. As you can see, people answer and answer 
> quickly. Indeed, Robby added an example to the Guide as he responded and 
> pushed it out into the repo. The next release will have an example due to 
> your posts. Thanks! 
> 
> Having said that, Racket is created by people who focus on systematic design 
> of software. The contract system is an example of this; 
> 
>  -- it serves the purpose of creating software systematically (continuing the 
> so-called Design by Contract line of work) 
>  -- it itself is developed systematically with inquires into the semantics of 
> contracts because we took contracts way beyond the primitive notion from the 
> 1980s and 1990s. 
> 
> But, the existence of ->i and ->d should give you a hint that we occasionally 
> make mistakes and we try to correct them without modifying existing code. ->d 
> is mostly okay, but ->i is better. When Robby created ->i, he also used his 
> experience with ->d to force programmers to list dependency variables 
> explicitly. That's why you have to say "(lst)", for example. In addition, the 
> language grows and with it, we have to grow the contract system. Keyword 
> arguments is an example of that kind. 
> 
> As for the philosophy behind our contract system, I think the guide's opening 
> section on boundaries brings across the idea that separates our contracts 
> from old-style stuff. It may not become immediately clear, but when you 
> program with contracts for a while, you will appreciate it. 

Wow! I am increasingly appreciating this approach (along with Racket’s 
systematic approach to design). 

I’m slowly converting my modules over to use contract-out and the ->i form 
makes it easy to see at a glance what the domains and ranges are, and I’m 
thinking the notation might be useful in the function definition’s comments as 
well. Is there a way to integrate unit testing into this approach? The (module+ 
test …) unit testing I’ve been doing is within the boundary of the mode and I 
wonder if there isn’t a way to simply move those test cases into another module 
(within the same file) and require it into the (module+ test …) form? 

-Kevin
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to