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

时间:2011-09-23 00:15:16

标签: compiler-construction language-design d design-rationale

来自D language reference

  

模块与源文件一一对应。模块名称是文件名,其路径和扩展名已被删除。

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

module foo;

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

2 个答案:

答案 0 :(得分:10)

同一页有点下来(我的)

  

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

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

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

答案 1 :(得分:4)

可以推断它。您没有拥有来提供模块名称。但是,您可以提供模块名称,如果您愿意,可以为其提供完全不同的名称。一个主要的例子是文件名不是有效的模块名称(例如my-module.d)。在这种情况下,您可以使用module声明为其提供有效的模块名称(例如my_module)。

通常的做法是将模块名称放在文件的顶部,通常模块名称与文件名相同,但可以使模块名称与文件名不完全匹配,从而提高了灵活性。 / p>

就个人而言,我一般认为将模块命名为文件名以外的其他内容是个坏主意,我认为如果文件不是有效的模块名,那么应该更改文件名,以便它是一个,但显然决定了使它们不匹配的额外灵活性值得拥有。所以,它是用语言。