Newbie compilation question

Joe Armstrong joe@REDACTED
Thu Dec 17 14:38:41 CET 1998

On Thu, 17 Dec 1998, Mark NG wrote:

> When I was writing a program I wrote "list:append/2" in my code instead of
> the correct one - "lists:append/2".  The compiler fail to notify me of that
> and when I ran it by spawning a process  it just dies out quitely...

    This  is *exactly* what it's  supposed to do. External modules are
dynamically linked into the  system at run-time.  Thus at compile time
the compiler   does  not know   anything about  what  modules  will be
available at run-time.

    The reason you don't get an error is that you use spawn. If you want an error message use spawn_link. I'll explain this in more detail:

    spawn means "spawn off a parallel process" contrast this with
    spawn_link which means "spawn off a parallel process and set a link to it,
the link means "send me an error signal if anything goes wrong".

    Let me give you a small example to illustrate the difference:



start1() ->
    lists:append("abc", "def"),

start2() ->
    listsmispelt:append("abc", "def"),

loop() ->
	Any ->

Look what happens now:

gordons 10> erl
Erlang (JAM) emulator version
Eshell V4.7.3.4  (abort with ^G)
1> c(ex1).
./ex1.erl:19: Warning: function start1/0 not called
./ex1.erl:19: Warning: function start2/0 not called
2> spawn(ex1, start1, []).
3> spawn(ex1, start2, []). 
4> spawn_link(ex1, start1, []). 
5> spawn_link(ex1, start2, []). 
** exited: {undef,{listsmispelt,append,["abc","def"]}} **

	see !

> I had to use the Process Manager's tracing facility to find out that it
> is due to a missing 's' in the function call !
> So, my questions is 
> 1) How can I make the compiler (I am using c:c/1) notify me of undefined 
>    symbols ?

	You can't - the compiler checks that the call is syntactically valid.

> 2) How can I get the error messages of a spawn proces to appear on the shell ?
	Use spawn_link instead of spawn

> I am using Open Source Erlang 4.7.3 (a great language and system ;-).



Joe Armstrong  Computer Science Laboratory  +46 8 719 9452
AT2/ETX/DN/SU  Ericsson Telecom SE-126 25 Stockholm Sweden 

More information about the erlang-questions mailing list