He Daniel,


Cool, I just found out the same with the profiler. I have removed the state entirely (it is not really neccesary) and it results in a speedup of 10x. Storing the instructions in an array instead of an list speeded also things up.

But I will test the original with State.Strict and see how it will perform.

Thanks,

Edgar


2010/1/21 Daniel Fischer <daniel.is.fischer@web.de>
Am Mittwoch 20 Januar 2010 16:45:41 schrieb Edgar Klerks:
> Hello,
>
> I just started using haskell and found it many uses for it (mainly for
> scripting purposes at the moment). Now, I have written a brainfuck
> parser and interpreter in haskell, but it produces a stack overflow if
> the program runs too long and I don't understand why. I thought I made
> the interpreter loop tail recursive, which I understood is the most
> common cause of a stack overflow. Can someone help my find my fault? I
> somehow miss something. I added the program as attachment.
>
> Thanks for your help.
>
> With kind regards,
>
> Edgar Klerks

A quick look revealed that you use Control.Monad.State, which defaults to
Control.Monad.State.Lazy. That is very often too lazy for longer
calculations and produces a stack overflow.
Maybe changing the import to Control.Monad.State.Strict helps (that isn't
entirely strict either, but often reduces the opportunities for building
large thunks sufficiently).