[erlang-questions] Why we need a -module() attribute?

Fred Hebert <>
Wed Feb 24 16:07:07 CET 2016


On 02/24, Konstantin Vsochanov wrote:
>
>Regarding modules, I think the flat space for module names is more
>troubling. If you look at almost any Erlang library/application, you can
>see, that file names are like
>
>myapp_file1.erl
>myapp_file2.erl
>myapp_subsystem1_file1.erl
>...
>
>So we manually implement hierarchic module system. It's a clear sign,
>that something going wrong or is missing.
>

It is, but it has some far-reaching implications that are easy to forget 
about when you don't do namespacing by hand. For example, ETS tables and 
processes can both be named, and if you do not manually namespace them, 
the same clashes can happen as would with modules.

So we have to be aware of that. Designing a module namespace without 
having a way to expand this to process names and tables can yield fairly 
confusing cases where only parts of the system clash, but not others, 
and where things can remain nearly as tricky as they would otherwise be.

I'm pretty sure `user' is the module that trips people up the most for 
that reason. HAving a namespace letting you run the equivalent of the 
current `my_project_user' and calling it as `user' in code could work, 
but if you try to register it as `user' you will fail since `user.erl' 
already does this at system boot (unless the --nouser option is passed 
to the VM).

It is easy to think of simple solutions that ultimately don't cover 
enough cases, I'm not sure how things could reasonably be done with the 
actual ecosystem though.

Regards,
Fred.


More information about the erlang-questions mailing list