[#4766] Wiki — "Glen Stampoultzis" <trinexus@...>

21 messages 2000/09/04
[#4768] RE: Wiki — "NAKAMURA, Hiroshi" <nahi@...> 2000/09/04

Hi, Glen,

[#4783] Re: Wiki — Masatoshi SEKI <m_seki@...> 2000/09/04

[#4785] Re: Wiki — "NAKAMURA, Hiroshi" <nakahiro@...> 2000/09/05

Howdy,

[#4883] Re-binding a block — Dave Thomas <Dave@...>

16 messages 2000/09/12

[#4930] Perl 6 rumblings -- RFC 225 (v1) Data: Superpositions — Conrad Schneiker <schneik@...>

Hi,

11 messages 2000/09/15

[#4936] Ruby Book Eng. translation editor's questions — Jon Babcock <jon@...>

20 messages 2000/09/16

[#5045] Proposal: Add constants to Math — Robert Feldt <feldt@...>

15 messages 2000/09/21

[#5077] Crazy idea? infix method calls — hal9000@...

This is a generalization of the "in" operator idea which I

17 messages 2000/09/22

[#5157] Compile Problem with 1.6.1 — Scott Billings <aerogems@...>

When I try to compile Ruby 1.6.1, I get the following error:

15 messages 2000/09/27

[ruby-talk:4912] Re: [TOY] FL

From: Andrew Hunt <andy@...>
Date: 2000-09-12 21:15:03 UTC
List: ruby-talk #4912
    >Andy wrote:
    >> I wrote a DBC implementation a few weeks ago, but was waiting until
    >
    >Great! Looks really awesome.

Thanks!

    >Few questions:
    >
    >>   def alpha(x)
    >>     post { DBC.result * 2 == x }
    >
    >Is there any concurrency issues with DBC.result?

More than likely.  As I said, I wasn't *exactly* ready to
release to the world yet.  Actually, I like the idea of passing
result as a paramter to the code block; that would get around
a few problems while only causing a few new ones :-)

    >> The invariant should be the last method defined in a class.
    >
    >Indicating that something "ugly" is being done when invariant is defined.
    
I don't think that's really true anymore -- at least, I just tried
a case where the invariant is defined first and it seemed to work :-)

You can add methods dynamically and they'll play well in DBC land;
the whole game is based on hooking method creation and rewriting methods
as they are added.

    >>   check "Descriptive string" { code block }
    >
    >Where does this write the output? To DBC.check_output_stream, which points
    >to $stderr by default?

If I remember rightly, it uses the string as an argument to the
newly created exception.  I would never presume to spray noise
to standard out, by any name :-)

    >> Once an exception has been raised from an object, that object should
    >> not be considered viable any more.  In particular, it may not detect
    >
    >Nice. Promotes not-too-general-exception-catching, so one shouldn't write
    
Exactly.  An assertion failure needs to be considered deadly. In fact,
I don't subclass the DBC exceptions under StandardError, so a plain
rescue won't catch them anyway.  
    
    >> By default, DBC is enabled with full checking.  To change the checks
    >
    >Again nice. But is there a way for partioning checks? Like that this part of
    >the code uses DBC enabled like this, and that other part doesn't use at all
    >for performance reasons (even while it's built with DBC).

There isn't now, but there could be.  Per class or per object checking
is certainly possible.

    >Any chance to get different versions of DBCs (it seems everyone is doing
    >their own these days :) to different parts of the code?

Probably not.  Once my version is in it starts rewriting any class
that needs it :-)

    >Just a joke, but couldn't help. When we want to say enable invariant and
    >post-condition checking we actually say DBC.enable(DBC::INV | DBC::PRE) :).

Then I made a typo somewhere - to enable invariant and post
one should say "enable INV | POST".

    >> dbc.rb must be able to find and parse the source code, so you
    >
    >Maybe there could be ways to provide the source even when evalling (for
    >piping I don't know).

I discovered a trick to get around that at some point, now if I
can just find the PostIt note I wrote it on...

    >Do you have any idea what's the cost? I guess that your way is quite
    >streamlined as you probably just include that extra code which have to be
    >there, so there're no runtime checks for what we should check *each* time
    >there's a method call.

It really depends on complexity of the invariant.  A simple one is 
no big deal, a complex one may well kill you dead.

/\ndy

--
Andrew Hunt, The Pragmatic Programmers, LLC.
Innovative Object-Oriented Software Development
web:   http://www.pragmaticprogrammer.com   email: andy@pragmaticprogrammer.com
--
Books by Andrew Hunt and David Thomas:
    "The Pragmatic Programmer" (Addison-Wesley 2000)
    "Programming Ruby" (Addison-Wesley 2001)
--

In This Thread

Prev Next