В языке программирования D, в чем разница междуВ D, в чем разница между частным импортом и нормальным импортом?
private import tango.io.File;
и
import tango.io.File;
?
В языке программирования D, в чем разница междуВ D, в чем разница между частным импортом и нормальным импортом?
private import tango.io.File;
и
import tango.io.File;
?
Было время, когда импорт был public
по умолчанию; то есть, когда вы импортировали другой модуль, его содержимое будет не только видимым из вашего модуля, но и из любого модуля, который импортировал ваш модуль.
В конце концов, это было изменено так, что они были private
по умолчанию.
Однако, есть несколько причин, чтобы вручную указать private
:
Импорт может быть public
, если они находятся в public
контексте. Например:
public:
// Lots of stuff
import blah; // oh no, everyone can see my imports!
DMD тесемки с ошибками, связанными с импортом. Например, выборочный импорт является общедоступным по умолчанию, несмотря на то, что он предположительно является частным. Это может вызвать всевозможные ужасные сценарии кошмара, где символы (ошибочно), импортированные публично в одном модуле, вызывают символы в совершенно другом модуле, чтобы просто исчезнуть и сломать вашу программу.
Другими словами, они, вероятно, private
в танго, потому что разработчики работали с МДД слишком долго, чтобы доверять ему, чтобы получить этот материал право.
В D 2.0, private import
является синонимом import
, в отличие от public import
. По умолчанию импорт является приватным. См. Modules documentation
EDIT: По умолчанию импорт также является приватным D 1.0.
+1 ah, right, bugs ... – stephan
re pt 2 Вы говорите о D2 или D1? –
Я не использую D2. Тем не менее, я был бы несколько удивлен, если у D2 нет таких же проблем; dmd 1.x и dmd 2.x построены из одного и того же исходного кода, только с различными предопределенными процессорами. Насколько мне известно, импорт не изменился между 1.x и 2.x. –