[erlang-questions] process will stack overflow after received many message?

Jovi Zhang bookjovi@REDACTED
Fri Sep 16 11:45:08 CEST 2011


On Fri, Sep 16, 2011 at 5:06 PM, Steve Strong <steve@REDACTED> wrote:
> You might find this link useful as
> well http://en.wikipedia.org/wiki/Tail_call - the reason that your new
> example is stacking is that having code after the recursion means that it's
> no longer tail-recursive, and will indeed consume stack space.
> --
> Steve Strong
> @srstrong
> Sent with Sparrow
>
> On Friday, 16 September 2011 at 10:57, Jovi Zhang wrote:
>
> On Fri, Sep 16, 2011 at 4:44 PM, Robert Raschke <rtrlists@REDACTED>
> wrote:
>
> On Fri, Sep 16, 2011 at 9:38 AM, Jovi Zhang <bookjovi@REDACTED> wrote:
>
> Hi,
>    I am a newbie of Erlang, here I have a question for receive
> message in Erlang loop.
>    Like below Erlang code, when process receive one message, it will
> invoke loop again,
>    then it can service like a server, receive message forever.
>    BUT is possible that process will stack overflow after receive too
> many message? the process invoke loop again and again.
>
>    I saw there have many code write like this in <<Programming Erlang>>
> book.
>
> loop() ->
>    receive
>        hello ->
>            io:format("hello\n"),
>            loop();
>        Other ->
>            io:format("I don't know what is this message, ~p is ~n"
> ,[Other]),
>            loop()
>    end.
>
> No stack overflow, due to tail call optimisation. See also
> http://www.erlang.org/doc/reference_manual/functions.html#id74170
>
> Robby
>
> Thanks, but when I test it using escript, the result is like below,
> "loop end" printed two times, it means it stacked!
>
> [root@REDACTED Erlang]# cat jovi.erl
> #!/usr/bin/env escript
>
> loop() ->
> receive
> one ->
> io:format("one\n"),
> loop();
> two ->
> io:format("two\n")
> end,
> io:format("loop end\n").
>
>
> main(_) ->
> Pid = spawn(fun() -> loop() end),
> Pid ! one,
> Pid ! two,
> receive
> _Any -> void
> end.
>
>
> [root@REDACTED Erlang]# ./jovi.erl
> one
> two
> loop end
> loop end
> ^C
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>

Hmm, Thanks very much, I understand it now!

.jovi



More information about the erlang-questions mailing list