[REBOL] Re: Trace function
From: coussement:c:js:mil:be at: 22-Jun-2001 9:30
> 1) (re)factoring,
> 2) objects,
> 3) probe
> 1) My favorite way to deal with debugging is to avoid it as
> much as possible (yeah, right! ;-) by (re)factoring the
> code into small, black-box pieces that can be recombined as
> flexibly as possible. This includes the use of higher-order
> functions such as MAP.
> In my experience, I'm much more likely to *need* debugging
> tricks with long sprawling functions than with concise ones.
> 2) Of course, I can get in a hurry and mess up even the most
> simple-looking functions. By wrapping a group of related
> functions into an object, and using data-like members of that
> object as scratch space, I can more easily perform a test and
> then look at the after-effects (or even add snapshot members)
> to see where I went off the rails.
> 3) When I keep my individual functions small and orthogonal,
> I usually find that a small number of well-placed PROBEs
> help me get a function working and tested with less effort.
> In a way, I'm glad that TRACE is so unwieldy! I've used other
> languages/platforms that had big piles of inspectors, "live"
> data displays, breakpoints, etc... While those things may be
> hard to against in *some* situations (embedded software,
> kernel, and device driver development, for example), I find
> that in most programming situations in a reasonable high-level
> language, they make it all too easy for me to get sloppy in
> my design and coding, because I've got such industrial-strength
> automated crutches to fall back on!
[My experiences on that field are similar to those of Joel. - BTW I
don't know *MAP* what does it means ?-
I try to use the most modular code possible by the isolation of
functionnalities into specific functions and objects, and to protect the
global context by the use of a local one (aka 'context). I like to see my
code as an assembly of *LEGO* blocks, being able to test each one
individualy, and putting it together to achieve an higher fonctionnality.
For tracing I mostly use '? which tell me a lot about used words:
>> help ?
Prints information about words and values.
? is a function value.
word -- (Type: any-type)
>> a: 35
>> ? a
A is an integer of value: 35
I put then a visual remainder for finding it back with ease when I
don't need it anymore:
(in the script)
? a ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
I used to develop in PowerBuilder, which has a rather big debug env.
I remember losing more time finding back how to use it efficiently and
finding my vars back, then debugging my code :-(
I definitely prefer the REBOL approach: keep simple things simple