[erlang-questions] Current state of packaged modules: net.rtmp.decoder

Nicholas Frechette zeno490@REDACTED
Thu May 13 17:09:23 CEST 2010


I agree with 7 not being ideal. From memory Java imposes something similar
with packages and I never liked it. However, I could live with it.
Also, erlang already imposes a directory structure in other features:
for code:lib_dir to work, your beam files (or is it app file?) must be in a
directory structure resembling: /.../app-version/ebin
If this is not the case, -include_lib("app/include/foo.hrl"). will not work
as code:lib_dir fails to find the app package directory. I recently ran into
this myself and cursed/cussed quite a bit.

Seeing as the evil is already within, it doesn't sound half as bad to let it
stay and spread to packages.

On Wed, May 12, 2010 at 6:40 PM, Robert Virding <rvirding@REDACTED> wrote:

> I quite agree with all Richards comments/critiques and would like to
> add one more:
>
> (7) It imposes a directory structure on packages which I think is
> undesirable. I do not want the language to force me to structure my
> apps in a special way. Currently all that OTP assumes is that the
> source code for a module is in a file called <module name>.erl and the
> BEAM code is in a file called <module name>.beam. This, I think, is
> quite enough. It is actually not too difficult to get around the
> second one if you are prepared to load code yourself.
>
> Otherwise I can add '_' in my module names myself.
>
> -1
>
> Robert
>
> On 12 May 2010 05:52, Richard O'Keefe <ok@REDACTED> wrote:
> >
> > On May 11, 2010, at 9:53 PM, Max Lapshin wrote:
> >
> >> Hi, I can't understand why is not recommended now to use packages of
> >> modules.
> >
> > There are several important things here.
> >
> > (1) Erlang allows dots in atoms, always has.  foo.bar.ugh
> >    and foo@REDACTED@ugh and foo_bar_ugh are just plain atoms.
> >    They are the _same_ atoms as 'foo.bar.ugh', 'foo@REDACTED@ugh',
> >    and 'foo_bar_ugh'.
> >
> >    This does _not_ apply to Java, where foo_bar is one
> >    identifier but foo.bar is not.
> >
> > (2) Historically, the module system treated all atoms alike.
> >    There was no connection between foo.bar and bar any more
> >    than there was any connection between foo@REDACTED and bar or
> >    between foo_bar and bar.  In the same way, Java sees no
> >    connection between a class called Foo_Bar and a class
> >    called Bar.
> >
> >    One of the fundamental concepts in computer programming
> >    is alpha-conversion (the idea that names are *arbitrary*
> >    labels).  It is generally a bad idea to violate this.
> >
> > (3) Formerly, in -module(fred), a call jill:bucket(56) was a
> >    call to the module 'jill'.  Change the -module directive
> >    to -module(demo.fred) and that call now refers to the
> >    module 'demo.jill'.  This is fine when you want it to
> >    happen, but if your code referred to existing OTP modules
> >    such as 'lists', well hello demo.lists breakage.  You _can_
> >    refer to top level modules using ''.lists or .lists, but
> >    that's an incompatible change.
> >
> > (4) It's really not clear how all of this works *dynamically*.
> >    Before dotted module names got special treatment,
> >        jill:bucket(56),                                %A
> >        M = jill, M:bucket(56),                         %B
> >        apply(jill, bucket, [56]),                      %C
> >        'my.module':'my.apply'(jill, bucket, [56])      %D
> >    were all equivalent, where
> >        -module('my.module').
> >        -export(['my.apply'/3]).
> >        my.apply(M, F, A) -> apply(M, F, A).
> >    The abbreviation kluge obviously works for %A.  It could
> >    be made to work for %B by using different (slower!) code
> >    like M = jill, (fix_mod(M, 'my.')):bucket(56), where
> >        fix_mod(M, C) -> case has_dots(M)
> >                           of true  -> M
> >                            ; false -> atom_append(C, M)
> >                         end.
> >    It's easy to make %C work when the first argument is a
> >    constant, like %A, and when the first argument is not a
> >    constant, the same technique used for %B will work.
> >
> >    But how do you make %D work?
> >
> > (5) There are no actual packages.  There are directories where
> >    modules with the same prefix will be sought, but it is not
> >    the case that all files with the same prefix must be in the
> >    same directory.  A "package" is nothing but a bunch of modules
> >    with a common prefix to their names; there are no package
> >    properties.
> >
> > (6) Package names are back to front.  This has been explained repeatedly
> >    in this mailing list.  They are like absolute file names, not like
> >    relative ones.  If I need the same package in two places in the
> >    package hierarchy, I can't do it.  I can't move a package up or
> >    down in the package hierarchy without surgery on every file.  I
> >    cannot make a *component* that my customers can place anywhere
> >    they want in the package hierarchy.  And if I can't do *that*,
> >    what the heck is the package system *for*?
> >
> > So:
> >  - dotted module names was not a new thing
> >  - mapping dotted names to the file system as described in
> >    http://www.erlang.se/publications/packages.html
> >    obviously has its uses, but this could be done with any
> >    character, including @, or indeed by other means entirely
> >    (like Eiffel's LACE)
> >  - the scheme leads to increased work when adopting dotted names
> >    and makes renaming packages difficult and fragile
> >  - it does not seem that dynamic behaviour can match the static
> >    abbreviation facility without increased costs (when known
> >    functions/forms are involved) or at all (when user defined
> >    functions are involved)
> >
> >> What is bad in
> >> using dotted names? What is the future of this feature: it will be
> >> developed or it will be deprecated?
> >
> > It should be taken out and shot.
> >
> > *Some* sort of module connection/configuration facility is needed,
> > but I suggest as a design criterion that it should be possible to
> > move an entire "flotilla" of modules in the package name space
> > by changing *ONE* line in some file.
> >
> >
> > ________________________________________________________________
> > erlang-questions (at) erlang.org mailing list.
> > See http://www.erlang.org/faq.html
> > To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
> >
> >
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
>
>


More information about the erlang-questions mailing list