Hi, Scott,

No pro, just prose...  ;-)

"G. Scott Jones" wrote:
> 
> First script rerequests a string within the function.  memory
> usage fluctuates a bit but adds a fair bit of time with
> numerous iterations:
> 
> Second script only sets up the string once, memory usage
> remains essentially flat, and it is four times faster than
> the first.
> 
> These scripts probably mean little, but they confirm the idea
> that it is probably better to do less make-ing and more clear-
> ing.  Maybe a real pro can comment using my feeble scripts.
> 

IMHO "better" is a function of many things, so I prefer to use more
descriptive terms most of the time, especially in cases where there
are significant trade-offs.


Allocating a fresh string each time is more secure, as it reduces
the chances of inadvertent coupling.  For example, in:

    a: func-returning-string-ref
    b: func-returning-string-ref
    append a "foo"

if the function returns a reference to the same string (CLEARed or
not), then the last expression also mutates the value of B.  This
*might* be what the programmer intended, but if not, it is a very
fertile source of subtle bugs.

IIRC, the "classic" C implementation of date formatting used a
single internal buffer for the result, returning a pointer to that
same buffer on every use.  This was almost universally reviled as
a source of needless bugs and confusion.


Re-using the same string (possibly with clearing) certainly has
the advantage of speed, but one must make *sure* that there's not
any possibility that references from a prior evaluation are still
hanging around with the expectation that their former value(s)
will persist.


IMHO this is a stellar example of how tweaking a lower-level bit
of code for some presumably noble purpose can end up making life
much more complex for later, higher-level uses of said code.  I
suggest that the author of a function should almost always try to
maximize simplicity of use for the caller, even at the expence of
making his/her own life more difficult.  Complexity resembles
entropy in this regard; it's much easier to open a can of worms
than it is to re-can them!

-jn-

-- 
; Joel Neely                             joeldotneelyatfedexdotcom
REBOL [] do [ do func [s] [ foreach [a b] s [prin b] ] sort/skip
do function [s] [t] [ t: "" foreach [a b] s [repend t [b a]] t ] {
| e s m!zauafBpcvekexEohthjJakwLrngohOqrlryRnsctdtiub} 2 ]
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to