[erlang-questions] newbie: why c.erl is special?

Bengt Kleberg bengt.kleberg@REDACTED
Mon Mar 3 08:53:30 CET 2008


Greetings,

In the book "Object Oriented Software Construction" Bertrand Meyer
argues (successfully in my opinion) that you need to have the ability to
rename (alias) modules. He also shows that this ability must be outside
of the language/modules themselves.

Otherwise you are just hoping that your code will never be successfully
shared by many people.


bengt

On Sat, 2008-03-01 at 12:59 +0800, shiwei xu wrote:
> I think flat module namespaces is a defect of erlang design.
> 
> For example, I write a foo.erl, It works well. But maybe in a late
> erlang version (eg. R13B)  also write such  module named  foo.erl.
> Then,  you can see  my application goes wrong.
> 
> How to avoid things like this? Let's see the following ways:
> 
> 1. Adjust module searching paths, and let user path (which contains my
> foo.erl) take precedence over erlang stdlib/otp path. But, this way
> can't always work well. If some other stdlib/otp modules use system
> foo.erl (not my foo.erl), Things goes wrong.
> 
> 2. Write erlang modules always named with a prefix (a fake namespace.
> For example, projectname_foo.erl or organization_projectname_foo
> .erl). This way really can solve the problem. But, It seems ugly.
> 
> Is there a way let's user still can call foo:func (not call foo.erl
> provied by stdlib/otp, but my projectname_foo.erl)? I have a
> suggestion:
> 
> Can erlang provide a 'module name alias'? That is, I can rename a
> module's name temporarily in a module? For example:
> 
> -module(a_module_that_call_my_foo).
> -alias(foo, organization_projectname_foo). %% alias
> 
> some_func_call_foo() ->
>     foo:func().  %% same as: organization_projectname_foo:func()
> 
> Currently I can do this by using the 'define' keyword. For example:
> 
> -module(a_module_that_call_my_foo).
> -define(FOO, organization_projectname_foo). %% alias
> 
> some_func_call_foo() ->
>     ?FOO:func().
> 
> It works well, but a bit ugly.
> 
> 
> On Sat, Mar 1, 2008 at 6:51 AM, Matt Stancliff <sysop@REDACTED>
> wrote:
>         
>         On Feb 29, 2008, at 14:34, Anthony Kong wrote:
>         
>         > If I rename c.erl to something else, the problem goes away.
>         >
>         > What is special about "-module(c)" ?
>         
>         
>           Welcome to the world of flat module namespaces.
>         
>           The code module is your friend in these circumstances.
>           Look into code:clash() and code:which(module).
>         
>           code:which(c) should return "<base
>         path>/lib/erlang/lib/stdlib-
>         <ver>/ebin/c.beam"
>         
>         
>         -Matt
>         --
>         Matt Stancliff            sysop@REDACTED
>         AIM: seijimr              iPhone: 678-591-9337
>         "The best way to predict the future is to invent it." --Alan
>         Kay
>         
>         
>         
>         _______________________________________________
>         erlang-questions mailing list
>         erlang-questions@REDACTED
>         http://www.erlang.org/mailman/listinfo/erlang-questions
>         
> 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list