Почему модули явно названы в файлах? - PullRequest
12 голосов
/ 23 сентября 2011

Из справочника D :

Модули имеют непосредственное соответствие с исходными файлами.Имя модуля - это имя файла с удаленным путем и расширением.

Имена модулей по-прежнему явно указаны в файлах.

module foo;

Какой смысл в этом?Если модули соответствуют файлам, почему компилятор не может определить, как они называются из имен файлов?

Ответы [ 2 ]

10 голосов
/ 23 сентября 2011

та же страница немного внизу (моя)

ModuleDeclaration устанавливает имя модуля и пакет для него принадлежит. Если отсутствует, то имя модуля считается таким же (без указания пути и расширения) имени исходного файла.

это означает, что если вы хотите поместить модуль в пакет, вы должны явно указать его (например, объявление package в Java) и учитывая странную склонность людей использовать нечетные / иностранные имена каталогов, на которые вы не можете полагаться при проверке источника / src / import в пути

причина того, что имя файла и имя модуля не должны совпадать, может заключаться в том, что вы можете использовать .di для импорта и использовать несколько версий фактического кода, используя ключ -c для создания файла .obj для компоновки разные версии (хотя для этого удобнее использовать путь импорта)

4 голосов
/ 23 сентября 2011

Это может сделать вывод.У вас нет , чтобы дать имя модулю.Тем не менее, вы можете дать имя модуля, что позволяет вам дать ему совершенно другое имя, если хотите.Ярким примером этого является случай, когда имя файла не является допустимым именем модуля (например, my-module.d).В таком случае вы можете использовать объявление module, чтобы присвоить ему правильное имя модуля (например, my_module).

Обычной практикой является размещение имени модуля в верхней части файла, и обычно модуляимя совпадает с именем файла, но делает возможным, чтобы имя модуля не точно совпадало с именем файла, повышает гибкость.

Лично я бы вообще считал плохой идеей называть модуль чем-либо, кромеимя файла, и я бы сказал, что если файл не является допустимым именем модуля, то имя файла должно быть изменено, чтобы оно было единым, но, по-видимому, было решено, что дополнительная гибкость, делающая его возможным для них, несоответствовать стоило иметь.Итак, это на языке.

...