Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!lll-winken!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!van-bc!ubc-cs!uw-beaver!cornell!rochester!kodak!islsun!cok From: cok@islsun.Kodak.COM (David Cok) Newsgroups: comp.std.c++ Subject: Re: "module" facility for top-level namespace control Keywords: namespace, module Message-ID: <1991Apr19.183922.1982@kodak.kodak.com> Date: 19 Apr 91 18:39:22 GMT References: <1991Apr19.163253.22253@kestrel.edu> Sender: news@kodak.kodak.com Distribution: comp.std.c++ Organization: Eastman Kodak Co., Rochester, NY Lines: 55 In article <1991Apr19.163253.22253@kestrel.edu> gyro@kestrel.edu (Scott Layson Burson) writes: > >To see if we can get some discussion going on the matter, let me >sketch a simple proposal. Suppose we were to introduce a keyword >"module" with a simple syntax: > > module Foo { > // ... declarations > } > >The intent here is that the declarations within the braces have >exactly the same form as those normally found at top level, so that >one can write things like > > module Foo { > #include "something.h" > } > >where the author of the header file need not have done anything >special to make such usage possible. Would it work just as well to say class Foo { #include "something.h" } since classes and everything else (?) can -- eventually -- be nested inside classes. > >The only problem I can see with it concerns the issue of binary-only >library distribution, which, it has already been noted, is problematic >anyway. It is not hard to imagine linker extensions that could fix >this, but I gather that is considered an undesirable thing to do. > We already (pre-C++) have namespace problems in libraries. Two functions in different libraries can have the same name and the ambiguity is resolved by the order in which the libraries are linked. The same thing in the C++ case will take care of all situations except where the programmer actually uses a global name which is in both libraries but wants the one from the library later in the compile command line. This is likely to be much more common in C++ than it was in C I think. The linker extension to accommodate this would be straightforward. 1) Be able to associate a scope identifier (e.g. MyLib:: ) with a library either in a program or on the command line. 2) Have the linker defer any references beginning with such scope identifiers until the library associated with that scope id. 3) Global names without scope ids associated with libraries would be resolved as before -- giving backwards compatibility. Still perhaps more than anyone wants to do. However if anyone ever changes the linker for other reasons... David R. Cok Eastman Kodak Company -- Imaging Science Lab cok@Kodak.COM