[erlang-questions] load_file() and purge()

Salikhov Dinislam Dinislam.Salikhov@REDACTED
Fri Nov 25 13:45:55 CET 2016

On 11/25/2016 03:38 PM, Per Hedeland wrote:
> On 2016-11-25 13:20, Salikhov Dinislam wrote:
>> Let's assume there is a module forty_two.beam loaded by VM.
>> Then the module is updated and hot loaded:
>>      > code:load_file(forty_two).
>>      {module, forty_two}
>> Then let's assume that there is no process using an old version of the module (for example, the module contains only pure functions).
>> Despite of that following attempt to update the module fails:
>>      > code:load_file(forty_two).
>>      Loading of forty_two.beam failed: not_purged
>>      {error,not_purged}
>> Is there any rationale why the old code is not automatically purged?
> code:load_file/1 *never* purges old code. Try the handy shell function
> l/1, defined in c.erl:
> l(Mod) ->
>      code:purge(Mod),
>      code:load_file(Mod).
Yes, I know that. I'd like to know why load_file() is implemented this way.
IMHO, in the case I've provided soft_purge() could be nicely called by 
load_file() to ease programmer's life :)
>> IMO, it would be convenient if _unused_ old version of the code would be implicitly removed in such case.
> You could define your own load function with appropriate use of
> code:soft_purge/1 for that.
> --Per Hedeland

More information about the erlang-questions mailing list