Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Meta module in findlib and the need for namespaces
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Gerd Stolpmann <info@g...>
Subject: Re: [Caml-list] Meta module in findlib and the need for namespaces
Hi, 

Am 2002.09.17 16:47 schrieb(en) Alessandro Baretta:
> There seems to be an incompatibility between dynlink.cma and 
> findlib. The following text shows a sample toplevel session 
> where you can see how linking to "dynlink.cma" is rendered 
> impossible by the presence of the findlib module.
> 
>          Objective Caml version 3.06
> 
> # #use "topfind";;
> Findlib has been successfully loaded. Additional directives:
>    #require "package";;      to load a package
>    #list;;                   to list the available packages
>    #camlp4o;;                to load camlp4 (standard syntax)
>    #camlp4r;;                to load camlp4 (revised syntax)
>    Topfind.reset();;         to force that packages will be 
> reloaded
> 
> - : unit = ()
> # #require "afo";;
> Loading /usr/lib/ocaml/site-lib/pcre/pcre.cma
> Loading /usr/lib/ocaml/unix.cma
> Loading /usr/lib/ocaml/site-lib/netstring/netstring.cma
> Loading /usr/lib/ocaml/site-lib/netstring/netmappings_iso.cmo
> Loading /usr/lib/ocaml/site-lib/netstring/netmappings_other.cmo
> Loading /usr/lib/ocaml/site-lib/netstring/netstring_top.cmo
> Loading /usr/lib/ocaml/site-lib/pxp-engine/pxp_engine.cma
> Loading /usr/lib/ocaml/site-lib/pxp-engine/pxp_top.cmo
> Loading 
> /usr/lib/ocaml/site-lib/pxp-lex-iso88591/pxp_lex_iso88591.cma
> Loading 
> /usr/lib/ocaml/site-lib/pxp-lex-iso88591/pxp_lex_link_iso88591.cmo
> Loading /usr/lib/ocaml/site-lib/pxp-lex-utf8/pxp_lex_utf8.cma
> Loading 
> /usr/lib/ocaml/site-lib/pxp-lex-utf8/pxp_lex_link_utf8.cmo
> *Loading /usr/lib/ocaml/dynlink.cma*
> Files /usr/lib/ocaml/dynlink.cma
> and /usr/lib/ocaml/site-lib/findlib/findlib.cma
> make inconsistent assumptions over interface Meta
> 
> This seems to imply that a Meta module is already defined in 
>   dynlink.cma, and that such module is different from that 
> referenced by findlib. I have no evidence to prove this 
> point though, for I have not found in the Ocaml sources 
> where a Meta module is defined.

There is a module "Meta" in the byte compiler, and it is member of
dynlink.cma. So your observation is right.

> ***
> 
> This incompatibility between findlib and dynlink is the 
> first example I have encountered of a nameclash bug in Ocaml 
> software. Of course, Gerd could easily solve the problem by 
> renaming his Meta to Findlib_meta, or something like that, 
> but it would be a lot easier to have a namespace construct 
> to allow Gerd to distinguish *his* Meta from the one in the 
> standard library.

I think there are two problems:

(1) The name clash as such
(2) The fact that dynlink.cma contains a hidden module (no cmi is
    installed for it), making the name clash surprising and hard
    to debug.

Note that dynlink.cma not only contains Meta, but also other modules
with plain names: Misc, Config, Ident, Path, Types, i.e. names for
which name clashes are much more likely than for cryptic names.

Maybe problem (2) can be fixed by using "include" to link the needed
compiler modules to Dynlink, i.e. something like

module Meta = struct include Meta end

so Meta would not occur in dynlink.cma anymore.

Gerd

------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
------------------------------------------------------------
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners