[TUHS] Lorinda Cherry
    Otto Moerbeek 
    otto at drijf.net
       
    Wed Feb 23 01:53:06 AEST 2022
    
    
  
On Tue, Feb 22, 2022 at 10:39:48AM +0000, Ralph Corderoy wrote:
> Hi Otto,
> 
> > MacOS uses the GNU implementation which has a long standing issue with
> > deep recursion.  It even cannot handle the tail recursive calls used
> > here and will run out of its stack.
> 
> When learning dc and seeing it relied on tail calls, the first thing
> I did was check it did tail-call elimination, and it did.  That was
> GNU dc.
> 
> Trying just now, I see no growth in memory usage despite heavy CPU load
> shown by TIME increasing.
> 
>     $ dc
>     !ps u `pidof dc`
>     USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
>     ralph    11489  0.0  0.0   2332  1484 pts/1    S+   10:33   0:00 dc
>     [lmx]smlmx
>     ^C
>     Interrupt!
>     !ps u `pidof dc`
>     USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
>     ralph    11489 75.5  0.0   2332  1488 pts/1    S+   10:33   0:46 dc
> 
> The memory used remained at that level during the macro execution too,
> watched from outside.
> 
> Do you have more detail on what GNU dc can't handle?  dc without
> tail-call elimination is a bit crippled.
> 
> -- 
> Cheers, Ralph.
On MacOS:
$ dc --version
dc (GNU bc 1.06) 1.3
...
$ dc
[lmx]smlmx 
Segmentation fault: 11
$
On debian bullseye:
$ dc --version
dc (GNU bc 1.07.1) 1.4.1
...
$ dc
[lmx]smlmx 
...
all ok.
So the basic tail recursion case seems to be fixed in recent versions.
But note that 
	[laxp]sa
	1 lax
still segfaults on both GNU dc versions while on OpenBSD, using the
dc I wrote:
dc: recursion too deep: Cannot allocate memory
This is not a tail recursion case, but segfaulting is not nice at all.
	-Otto
    
    
More information about the TUHS
mailing list