[ocaml-platform] Changes to my previous proposal for namespaces

Leo White lpw25 at cam.ac.uk
Fri Mar 15 13:42:55 GMT 2013


Following recent discussions, I would like to propose some changes to my
previous proposal:

## Flat namespaces

It has occured to me that, while I have some good use cases for
hierarchical namespaces, they are not critical for the *initial*
implementation of namespaces in OCaml. Essentially, I'm changing my
position from "We should include support for hierarchical namespaces" to
"We should make sure that we could easily add support for hierarchical
namespaces in the future".

## Pervasive modules

I think that the simplest solution to Yaron's need for "automatically
opened" modules is to say that:

    open namespace Foo

will open the namespace Foo and then, if it exists, open the module
Foo#Pervasives. 

Members of Foo#Pervasives would not be accessible directly from Foo
(i.e. Foo#id != Foo#Pervasives.id).

I think this has the following benefits:

- This is basically a syntactic solution: we don't need to "dirty" the
  semantics or specification of modules with the issue of automatically
  opening modules.

- Only one Pervasives is opened, so conflicts between separate
  specifications of a namespace should be obvious immediately. Its
  relience on a specific name also makes the potential for conflicts
  obvious to users.

- It is clearly a bit of a fudge, which will discourage its excessive
  use, and prevent any percevied overlap bewteen namespaces and
  modules. This also makes it seem less "offensive" that it slightly
  breaks the idea that "let open namespace Foo in id" should be
  basically the same as "Foo#id"

- It fits in with the standard library's use of Pervasives. You could
  consider current behaviour as simply opening the "Std" namespace
  before every program.

I think that simple solution is better than trying to find a generalised
sematics for "automatic opens" in namespaces. As Gabriel's e-mail shows,
these semantics are non-trivial. I think that it is better to solve a
specific problem with a specific solution, rather than creating a
generalised solution for its own sake.

Regards,

Leo


More information about the Platform mailing list