2012-07-02 11 views
16

En Scala, ¿es malo, desde el punto de vista de la eficacia y la velocidad de los compiladores incrementales (sbt, sbt en Eclipse, IntelliJ), utilizar importaciones de comodines? ¿Afecta negativamente la forma en que estos compiladores incrementales deciden qué recompilar en caso de cambios?¿La importación de comodines es mala en Scala con respecto a la compilación incremental?

Por ejemplo, si para una nueva clase X, sólo tendría que importar clases A y B (y no C) del paquete de pack, puedo obtener una penalización por escribir esto:

import pack._ 

vez ¿de esta?

import pack.{ A, B } 

Suponiendo A y B no tienen dependencias en C, sería X compilar con la importación de comodín y no con la importación más específico cuando C cambios, o sería el sistema de seguimiento de dependencias ser lo suficientemente inteligente como para darse cuenta de que C es no utilizado por X a pesar de la importación de comodines?

Respuesta

8

Hay un pequeño impacto, pero probablemente no lo notarás. El impacto es que cuando hay una referencia al símbolo "Foo", el compilador debe resolver "Foo" en un nombre completamente calificado. El alcance de donde se puede buscar "Foo" se ve afectado por las importaciones de comodines. Pero todo esto se hace en la memoria y es casi seguro que no notarás esas pequeñas diferencias en la velocidad de resolución a menos que tengas algo loco como miles de clases en un solo paquete.

Aparte de eso, no hay impacto. Si importas pack._ y alguna clase arbitraria en el paquete._ de la que no dependas de los cambios, entonces no será necesario volver a compilar tu archivo.

+1

No ** tendrá que ** recompilarse, pero ¿no se volverá a compilar? Por, por ejemplo, la versión actual de sbt? En la mayoría de los casos, tengo la impresión de que se están recomponiendo muchas cosas. –

+0

No. Scala hace que el análisis de dependencia sea complicado, pero no debido a las importaciones de comodines. –

+0

OK, por lo que esperar reducir el tiempo de compilación reorganizando las importaciones no conducirá a ninguna parte. –

Cuestiones relacionadas