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
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).