En el lenguaje de programación D, ¿cuál es la diferencia entreEn D, ¿cuál es la diferencia entre una importación privada y una importación normal?
private import tango.io.File;
y
import tango.io.File;
?
En el lenguaje de programación D, ¿cuál es la diferencia entreEn D, ¿cuál es la diferencia entre una importación privada y una importación normal?
private import tango.io.File;
y
import tango.io.File;
?
Hubo un momento en que las importaciones eran public
de forma predeterminada; es decir, cuando importó otro módulo, su contenido no solo sería visible desde su módulo sino también desde cualquier módulo que importara su módulo.
Finalmente, se cambió para que fueran private
de forma predeterminada.
Sin embargo, hay algunas razones para especificar manualmente private
:
Las importaciones pueden hacerse public
si están en un contexto public
. Por ejemplo:
public:
// Lots of stuff
import blah; // oh no, everyone can see my imports!
DMD está llena de errores relacionados con las importaciones. Por ejemplo, las importaciones selectivas son públicas por defecto a pesar de ser supuestamente privadas. Esto puede causar todo tipo de situaciones de pesadilla horribles donde los símbolos (erróneamente) importados públicamente en un módulo causan símbolos en un módulo completamente diferente para simplemente desvanecerse y romper su programa.
En otras palabras, probablemente son private
en el Tango ya que los desarrolladores han trabajado con DMD durante demasiado tiempo a confiar en ella para obtener esta materia derecha.
En D 2.0, private import
es sinónimo de import
, en comparación con . Por defecto, las importaciones son privadas. Ver el Modules documentation
EDITAR: Por defecto, las importaciones son privadas D 1.0, también.
+1 ah, correcto, errores ... – stephan
re pt 2 ¿estás hablando de D2 o D1? –
No uso D2. Dicho esto, me sorprendería algo si D2 no tiene los mismos problemas; dmd 1.x y dmd 2.x se crean a partir del mismo código fuente, solo con diferentes definiciones previas al procesador. Las importaciones realmente no han cambiado entre 1.x y 2.x, hasta donde yo sé. –