2012-07-02 3 views
16

스칼라에서 와일드 카드 가져 오기를 사용하는 점진적 컴파일러 (Eclipse의 IntBlash, IntelliJ의 sbt)의 효율성 및 속도면에서 좋지 않습니까? 이러한 점진적인 컴파일러가 변경 사항이 발생했을 때 재 컴파일 할 방법을 결정하는 방식에 부정적인 영향을 줍니까? 새로운 클래스 X를 들어, 난 단지, 패키지 pack에서 클래스 AB (그리고 C)를 수입해야하는 경우증분 컴파일과 관련하여 스칼라에서 와일드 카드 가져 오기가 잘못 되었습니까?

는 예를 들어, 내가이 글을 쓰는에 대한 처벌을받을 수 있나요 :

import pack._ 

대신 이의? AB 가정

import pack.{ A, B } 

XC 변경 와일드 카드 가져 오기가 아니라보다 구체적인 가져 오기를 다시 컴파일 할 것 C에 의존성이 없으며, 또는 의존성 추적 시스템은 C이 실현 똑똑 것 와일드 카드 가져 오기에도 불구하고 X에서 사용하지 않습니까?

답변

8

하나의 작은 영향이 있지만 아마 눈치 채지 못할 것입니다. 그 영향은 기호 "Foo"에 대한 참조가있을 때 컴파일러가 "Foo"를 완전한 이름으로 해석해야한다는 것입니다. "Foo"를 찾을 수있는 범위는 와일드 카드 가져 오기의 영향을받습니다. 그러나 그것은 모두 메모리에서 이루어지며 한 패키지에 수천 개의 클래스가있는 것이 아니라면 해결 속도에있어서의 작은 차이를 거의 눈치 채지 못할 것입니다.

이외의 영향은 없습니다. pack._ 및 pack._에있는 임의의 클래스를 가져 오면 변경에 의존하지 않으므로 파일을 다시 컴파일 할 필요가 없습니다.

+1

** 다시 컴파일하지 않아도 되겠지만 실제로는 다시 컴파일되지 않습니까? 예를 들어, sbt의 현재 버전? 종종 나는 많은 것들이 재 컴파일되고 있다는 인상을 받는다. –

+0

아니요. 스칼라는 종속성 분석을 복잡하게 만듭니다. 그러나 와일드 카드 가져 오기로 인해 복잡하지는 않습니다. –

+0

좋습니다. 수입을 재구성하여 컴파일 시간을 줄이면 아무데도 갈 수 없습니다. –