Is package.d a good idea?
Steven Schveighoffer
schveiguy at yahoo.com
Wed Jul 4 15:09:29 UTC 2018
On 7/4/18 10:59 AM, Adam D. Ruppe wrote:
> On Wednesday, 4 July 2018 at 14:54:41 UTC, Steven Schveighoffer wrote:
>> How would this affect the package attribute?
>
> Nothing should change, since packages are determined from the D module
> declaration, not the filename or directory layout.
>
> This is even true with package.d itself, but it is a weird exception
> because for some inexplicable reason, the compiler ALSO requires a
> certain filename to accept the declaration (whereas it doesn't care for
> any other module).
Hm.. I tested it out:
pack1/pack2/package.d
pack1/pack2/foo.d
pack1/bar.d
package symbols in pack1.pack2 are visible to the package.d and foo.d
file, but not the bar.d file.
pack1/pack2.d
pack1/bar.d
package symbols in pack1.pack2 are now visible to the bar.d file.
So it does make a difference. And the difference would be bizarre if
pack2 was also a package.
Note: I did find that I needed the pack1 top-level package for this to
demonstrate. When pack2 was a top level package, things did not work out
very well.
> If you were to have a dir layout
>
> foo.d
> whatever/bar.d
>
> and foo.d was
>
> module ok.awesome.works.for.me;
>
> and whatever/bar.d was
>
> module ok.awesome.works.for.someone;
>
>
>
> they are both part of the `ok.awesome.works.for` package, regardless of
> their filenames.
Right, the difference though is that package.d is special in that it is
treated like a package, and not a module for purposes of visibility. For
example, I don't think you could do:
module ok.awesome.works.for;
...
module ok.awesome.works.for.me;
without using the package.d filename.
-Steve
More information about the Digitalmars-d
mailing list