[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