[erlang-questions] Calling external modules from a fun
Scott Lystig Fritchie
fritchie@REDACTED
Fri Apr 23 20:00:46 CEST 2010
David Mercer <dmercer@REDACTED> wrote:
dm> Since no-one smarter than me responded, here's my take.
I don't claim to be any smarter on this subject, but there's some
empirical study possible while we wait for wisdom.
dm> In order for a fun to work on a remote node, the module that created
dm> the fun must also exist on the remote node.
True and false. If you use this syntax, yes, there's a module
dependency:
spawn(Node, fun some_module:foo_func/0).
There's a noticable difference in the sizes of:
size(term_to_binary(fun some_module:foo_func/0)).
size(term_to_binary(fun() -> some_module:foo_func() end)).
If the fun uses the fun() -> ... end syntax, then any function calls
made externally must be resolvable by the VM, the code server, etc. So
"fun() -> erlang:display(42) end" will work because the BIF definitely
exists over on the remote node ... because it's a BIF.
The same resolvability property can be seen when using intra-module
calls. Using size(term_to_binary(Fun)), we see create experiments that
show that all of the transitively dependent functions are not included
in the fun because the size won't change.
-Scott
More information about the erlang-questions
mailing list