为什么模块在文件中明确命名?

Max*_*xpm 12 compiler-construction d language-design design-rationale

D语言参考:

模块与源文件一一对应.模块名称是文件名,其路径和扩展名被剥离.

但是,模块名称仍然在文件中明确指定.

module foo;
Run Code Online (Sandbox Code Playgroud)

这有什么意义?如果模块对应于文件,为什么编译器不能从文件名中推断出它们的调用?

rat*_*eak 10

同一页有点下来(我的)

ModuleDeclaration设置模块的名称及其所属的包.如果不存在,则模块名称将被视为源文件名的相同名称 (剥离路径和扩展名).

这意味着如果你想将一个模块放在一个包中你必须明确指定它(就像Java的package声明)并且考虑到人们使用奇/外目录名的奇怪倾向,你不能依赖于检查source/src /导入路径

文件名和模块名称不必相同的原因是你可以使用.di进行导入,并使用-c开关使用实际代码的几个版本来创建.obj文件以链接不同版本(虽然摆弄导入路径更容易)