The Directory Walker revisited

wouter wouter.abraham at pi.be
Tue Sep 2 07:39:00 EDT 2003


On dinsdag, sep 2, 2003, at 08:16 Europe/Brussels, 
use-revolution-request at lists.runrev.com wrote:

> Message: 4
> Date: Mon, 1 Sep 2003 22:59:27 -0600
> Subject: Re: The Directory Walker revisited
> From: Alex Rice <alex at mindlube.com>
> To: use-revolution at lists.runrev.com
> Reply-To: use-revolution at lists.runrev.com
>
>
> On Monday, September 1, 2003, at 01:11  PM, wouter wrote:
>
>>  I am sure you can figure out why.
>
> What is this, a riddle? Actually I can't, which is why I posted my
> question.

< The value is the size in bytes of the CPU call stack.  The actual 
function call depth limit will depend on such factors as the CPU type, 
how functions are called, and the number of parameters passed to each 
function. >

There is a big difference between the mechanism of a recursive 
handler/routine and a repeat loop.
Each handler/routine that calls itself is not finished. So all pointers 
and  params are kept in the stack memory. If the recursive handler has 
reached the end of its purpos, it has to trace back and eventually 
finish  other statements after the recursive call and finish itself for 
each instance of itself. This mechanism can grow the heap and stack in 
memory beyond acceptable limits if there is no recursionLimit. And if 
memory management in the app and/or in the operating system is not 
protected, a collision or an overwrite could happen which results in a 
crash of  the app and in the worst case of the operating system.
A repeat loop on the contrary has a complete different memory 
management, does not have to trace back and lives mostly, if not 
totally, in the heap.


> Are you saying the recursionLimit is so broken and or unhelpful that
> you have to rewrite something as without recursion?

Though recursion can be a very elegant way of programming, only use it 
if you are sure the amount of recursion is not going to exceed its 
limit .
While using a try-catch structure is preventing the blocking by a error 
dialog, it sure is no solution to be used in an app that is meant to be 
used by others as it is not fulfilling its end.


> Alex Rice <alex at mindlube.com> | Mindlube Software | http://mindlube.com

Have a nice afternoon,
WA

PS same as before : I appologize already in advance if the answer is 
redundant because of the slow mail traffic over here.




More information about the use-livecode mailing list