[erlang-questions] semantics hot code swapping in Erlang

Austin Anderson <>
Sun Dec 14 15:36:19 CET 2008


*"It is possible to find the set of processes that refer to the old version
of a module, so that they can be forced to terminate before purging the old
code"*
Does the system automatically terminate processes using the old version if
that old version is removed? Or does it have to be done 'manually' by the
programmer?

2008/12/12 Richard Carlsson <>

> Austin Anderson wrote:
>
>> I'm wanting to get into researching hot code swapping and was wondering if
>> there was a (formal) semantics for Erlang's behaviour with respects to hot
>> code swapping. I have read the Erlang 4.7.3 Reference Manual which I found
>> through the website, which gives a semi-formal specification, but if there
>> exists either in Erlang or in one of its spin off statically typed versions
>> a formal specification as to how the system behaves with respects to hot
>> code swapping I would appreciate being pointed in its direction.
>>
>
> No, I don't think anyone has written such a document. E.g., Lars-Åke
> Fredlund did not include the module system in the semantics in his
> thesis ("A Framework for Reasoning about Erlang Code", 2001).
>
> However, the rules are actually rather simple, and it should be
> straighforward for someone who knows his formal semantics to model
> the hot code swapping in a convincing way, given the informal
> specification you have already read.
>
> Basically:
>
>  - A module has a name, some attributes (a map from atoms to terms),
>    and some exported functions (a map from atom+arity pairs to funs);
>    see also the Core Erlang specification for comparison.
>
>  - There can be at most two loaded versions of a module: the current
>    and the old version.
>
>  - A remote call M:F(...), or a call to one of the variants of the
>    apply and spawn BIFs, always uses the current module to map the
>    module name to the actual function to be called. (In practice,
>    the linker does most of the job at load time, so there is no
>    lookup overhead at run time for M:F(...) calls.)
>
>  - It is possible to find the set of processes that refer to the
>    old version of a module, so that they can be forced to terminate
>    before purging the old code (in preparation for loading yet another
>    version).
>
>  /Richard
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20081214/69fdf534/attachment.html>


More information about the erlang-questions mailing list