[erlang-questions] module reloading

Joe Armstrong erlang@REDACTED
Wed Apr 18 13:25:56 CEST 2018


On Wed, Apr 18, 2018 at 12:18 AM, Alex Alvarez <alex@REDACTED> wrote:
> Thanks Joe!  LOL!!!  Might sound silly, but it's very useful to be able to
> load/reload modules manually.  At the very least, it'd be great to at least
> get something like {error, module_loaded}, instead of the current "error
> report" message
>
> Ok, so, why don't I just enter a <module name>:<function name> and allow the
> module to autoload.  That's great for source code, but not that great in the
> command line.  The problem is that I, as I suppose most folks, don't know
> the function names (or even a function name) in every module, which is why I
> tend to manually load them when I'm in Erlang's REPL.

I have the same problem - so I say

   > m('modname').

Which autoloads the module if it's not loaded and prints a list of the
functions in the module. After this <TAB> expansion works.

This has non of the problems you've see with load :-)

/Joe



>  As we know, once a
> module is loaded, you can type the module name, press the <TAB> key and get
> a list of the function names + arity.  This is very powerful. If you don't
> know the exact name of a function, but do know the name of a few modules
> where it might be, you can try loading them, pressing <TAB> and see if you
> can find it before having to consult the documentation.
>
> Thanks,
> Alex
>
>
>
> On 4/16/2018 at 9:55 AM, "Joe Armstrong" <erlang@REDACTED> wrote:
>
> I see :-)
>
> But why I ask do you do "l(math)" ?
>
> This loads or reloads a module - but modules are autoloaded on demand
> the first time the module
> is called, so really there is almost [1] no need to do ever do this.
>
> Cheers
>
> /Joe
>
> [1] there is actually but the use cases are rather obscure
>
>
>
>
> On Mon, Apr 16, 2018 at 4:24 AM, Alex Alvarez <alex@REDACTED> wrote:
>> Thanks for your reply! I can certainly understand that and appreciate the
>> system would be letting me know if I was trying to do that. But the issue
>> is that I was not trying to load any code of mine with the same module
>> name,
>> I just tried reloading the same (e.g., math) module.
>>
>> Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:2:2] [ds:2:2:10]
>> [async-threads:10] [hipe] [kernel-poll:false]
>>
>> Eshell V9.3 (abort with ^G)
>> 1> l(math).
>> {module,math}
>> 2> l(math).
>> {error,sticky_directory}
>> 3>
>> =ERROR REPORT==== 15-Apr-2018::22:09:00 ===
>> Can't load module 'math' that resides in sticky dir
>>
>> As mentioned in my last email, the issue seems to be with the fact that
>> the
>> module was not marked old...
>>
>> 3> code:purge(math).
>> false
>>
>> Now, I just thought that c:l() would load and reload any module
>> regardless,
>> but that doesn't seem to be the case.
>>
>> http://erlang.org/doc/man/c.html#l-1
>> http://erlang.org/doc/man/code.html#purge-1
>>
>> Thanks,
>> Alex
>>
>>
>>
>> On 4/13/2018 at 4:26 PM, "Joe Armstrong" <erlang@REDACTED> wrote:
>>
>> The module called 'math' is a pre-defined system module, and
>> redefining it might have
>> unpleasant and unpredictable consequences - so you really should not
>> do this unless you
>> know exactly what you are doing. Best is to just change the name.
>>
>> If you know what you're doing you can call unstick_dir on the
>> directory where math.beam was loaded from
>> and then you will be able to change the code - again this is not a
>> good idea if you don't
>> really understand the consequences of doing this.
>>
>> System modules are 'sticky' by default to stop you from accidentally
>> shooting yourself in the foot.
>>
>> If you get this warning just change the module name.
>>
>> Cheers
>>
>> /Joe
>>
>> On Fri, Apr 13, 2018 at 7:13 PM, Alex Alvarez <alex@REDACTED> wrote:
>>> Sorry if this was already asked and I missed it... While using v20.3.2,
>>> after I load a module...
>>>
>>> 11> l(math).
>>> {module,math}
>>>
>>> ...if I try to reload it again with the same command...
>>>
>>> 12> l(math).
>>>
>>> =ERROR REPORT==== 13-Apr-2018::13:09:15 ===
>>> Can't load module 'math' that resides in sticky dir
>>> {error,sticky_directory}
>>>
>>> ...I get this error message. It's not particular to any module. From the
>>> error, there seems to be a problem with a stcky bit somewhere. Although I
>>> don't remember having this problem before, who knows, maybe it's just my
>>> install. Has anyone run into this issue recently?
>>>
>>> Thanks,
>>> Alex
>>>
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>



More information about the erlang-questions mailing list