On Tue, Jan 13, 2004 at 10:16:48PM -0700, Luke Palmer wrote: > sub mark_that_we_have_reached_max_records() { > $max_reached = 1; > } > > if !$max_reached && some_expensive_lookup_function() > $MAX_RECORDS { > mark_that_we_have_reached_max_records(); > return; > } > > That's a new feature we're adding called "conditional code removal", > sometimes known as "short circuiting" :-)
Well, not what I asked (the block is not jumped around, just shortcircuited) and doesn't really address the principle (i.e., how to manipulate the bytecode at runtime) I was trying to grok, but ok. [...] > This could well be something the optimizer does, but assuming otherwise, > optimized currying could be to our benefit. > > sub do_the_loop($x, $seen) { > while $x --> 0 { > if $seen || cheap_condition() { > something(); > } > last if !$seen && other_cheap_condition(); > } > return $x; > } > > &do_the_loop.assuming(seen => 1).( > &do_the_loop.assuming(seen => 0).(100_000)); > > If curries are subject to a short constant-folding pass, this should > easily give us the effect we want. Had to study this for a bit to assure myself it all worked, but cool! This is exactly what I was looking for. Thanks. > > (I recall seeing something about how to make assertions drop out, but > > I want to be able to do this at run-time, not compile-time.) > > As uri said, who can tell the difference? Point. --Dks