2012-07-02 7 views
16

W Scala, czy jest źle, z punktu widzenia skuteczności i szybkości kompilatorów przyrostowych (sbt, sbt w Eclipse, IntelliJ), do korzystania z importu symboli wieloznacznych? Czy ma to niekorzystny wpływ na sposób, w jaki te przyrostowe kompilatory decydują, które rekompilować w przypadku zmian?Czy wildcard import bad in Scala w odniesieniu do kompilacji przyrostowej?

Na przykład, jeśli dla nowej klasy X, musiałbym tylko importowanie klas A i B (a nie C) z pakietem pack, mogę dostać karę za pisanie to:

import pack._ 

zamiast tego?

import pack.{ A, B } 

Zakładając A i B nie mają zależność C, by X rekompilacji z importu wieloznacznym, a nie z bardziej konkretnym przywozowych C zmian, czy też system śledzenia zależności być na tyle silny, aby uświadomić sobie, że C jest nie jest używany przez X pomimo importu wieloznacznego?

Odpowiedz

8

Występuje jedno małe uderzenie, ale prawdopodobnie go nie zauważysz. Wpływ polega na tym, że gdy występuje odniesienie do symbolu "Foo", kompilator musi rozpoznać "Foo" w pełną nazwę. Na zakres, w którym może on szukać "Foo", wpływa import symboli wieloznacznych. Ale to wszystko dzieje się w pamięci i prawie na pewno nie zauważysz tak niewielkich różnic w szybkości rozdzielczości, chyba że masz coś szalonego jak tysiące klas w jednym pakiecie.

Oprócz tego, bez wpływu. Jeśli zaimportujesz pack._ i pewną dowolną klasę w pack._, że nie będziesz zależał od zmian, to twój plik nie będzie musiał być rekompilowany.

+1

Nie trzeba ** rekompilować, ale czy rzeczywiście nie zostanie zrekompilowany? Na przykład za pomocą bieżącej wersji sbt? Częściej niż nie, odnoszę wrażenie, że wiele rzeczy jest rekompilowanych. –

+0

Nie. Scala sprawia, że ​​analiza zależności jest skomplikowana, ale nie z powodu importu symboli wieloznacznych. –

+0

OK, więc nadzieja na skrócenie czasu kompilacji poprzez reorganizację importu doprowadzi do nikąd. –