[erlang-questions] semantics hot code swapping in Erlang

Gleb Peregud gleber.p@REDACTED
Sun Dec 14 16:07:48 CET 2008


Yes, system automatically kills all the processes using the old
version of code when it is removed from the system

On 12/14/08, Austin Anderson <ama08r@REDACTED> wrote:
> *"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 <richardc@REDACTED>
>
>> 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
>>
>


-- 
Gleb Peregud
http://gleber.pl/

Every minute is to be grasped.
Time waits for nobody.
-- Inscription on a Zen Gong


More information about the erlang-questions mailing list