[racket] static variables question

From: Neil Van Dyke (neil at neilvandyke.org)
Date: Sun Feb 19 13:29:00 EST 2012

Joe Gilray wrote at 02/19/2012 12:52 PM:
>     You are doing "(integer-sqrt x)" a few times, when "x" can't
>     change in between.  You might want to have the code look like
>     "(integer-sqrt x)" is computed only once in the block of code in
>     which "x" can't change.  Just good practice, IMHO; I don't promise
>     that it makes a performance difference.
> Hmmm, yes, I left that as an exercise for the compiler!  More 
> seriously, will the Racket compiler optimizes those calls?

Matthew F. could answer this authoritatively, but I think that a good, 
if vague, general practice is to not rely on fancy compiler 
optimizations for things that you can instead reasonably do in code.  
Also, for now, I assume that the code will run on a single CPU, so 
automatic parallelization won't save one from the cost of multiple 
identical function evaluations (although I do secretly fantasize about 
things like "let" clauses someday being run in parallel).  It's pretty 
intuitive for single-CPU; parallel is harder to reason about.

Sam T-H's disassembler might also be helpful:

That said, I suggest trying not to worry too much about optimal run-time 
speed at this point, and focus first on learning idiomatic Racket.  I am 
sympathetic, though; here is something I wrote when I was starting to 
learn Scheme, in 2001: "One of the few drawbacks I'm finding to Scheme 
hacking is that I'm painfully conscious of performance issues when 
writing reusable modules, but the low-level execution model of a 
particular Scheme implementation is much more opaque than that of a C 
compiler. For most rapid-prototyping application work, Scheme is a big 
win, but I find myself cringing those few times when I'm struggling with 
how to do something efficiently in Scheme and happen to think of an 
elegant and super-fast C implementation."

> Interesting!  Is there a Racket profiler available?

Yes, if you search the docs or the Web, you'll find at least two 
profilers.  This one is the most useful for now, although it's not 
integrated into DrRacket: http://docs.racket-lang.org/profile/index.html


Posted on the users mailing list.