Add iex option to automatically purge recompiled modules #13919
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
With
IEx.configure(auto_reload: true)
, the iex mix listener will purge the recompiled modules immediately, without waiting forIEx.Helpers.recompile
. Suggestions for the option name are welcome :)Sidenote: given modules
Foo
andBar
, whenFoo
is called in IEx, it is loaded in the memory. When a concurrent compilation changes bothFoo
andBar
, callingFoo
uses the old version of the module, however callingBar
uses the new version of the module, because it's loaded from disk for the first time. One option to address this inconsistency would be to make:auto_reload
the default behaviour, however that could have undesired side effects, for example withiex -S mix phx.server
it could reload module during a request. We decided to make it as an option for now.