Segment violation (was Re: Why I could not cast string to int?)

Timon Gehr timon.gehr at gmx.ch
Thu Feb 2 15:10:01 PST 2012


On 02/02/2012 11:47 PM, H. S. Teoh wrote:
> On Thu, Feb 02, 2012 at 10:55:06PM +0100, Timon Gehr wrote:
>> On 02/02/2012 08:04 PM, xancorreu wrote:
> [...]
>>> For the other hand, how can increase the stack in linux?
> [...]
>>
>> I don't know, but it is best to just rewrite the code so that it does
>> not use recursion.
>>
>> (This kind of problem is exactly the reason why any language standard
>> should mandate tail call optimization.)
>
> Doesn't help badly-chosen implementations like:
>
> 	int fib(int n) {
> 		if (n<= 2) return 1;
> 		else return fib(n-2) + fib(n+1);
> 	}
>

This is not a tail-recursive function. And neither is recFactorial, my 
bad. Anyway, my point was that the compiler should not generate code 
that blows up on a (in principle) perfectly sane implementation.

> There's not much the compiler can do to offset programmers choosing the
> wrong algorithm for the job.

Agreed.

> It can't replace educating programmers to
> not implement things a certain way unless they have to.
>
>
> T
>

Or unless they feel like it.

LList!ulong fib(){
     LList!ulong r;
     r=cons(st(1UL),cons(st(1UL),lz(()=>zipWith((Lazy!ulong a, 
Lazy!ulong b)=>lz(()=>a+b),r,r.tail)())));
     return r;
}


More information about the Digitalmars-d-learn mailing list