2012-07-02 12 views
16

Trong Scala, có tệ không, từ quan điểm về hiệu quả và tốc độ của các trình biên dịch gia tăng (sbt, sbt trong Eclipse, IntelliJ), để sử dụng nhập khẩu ký tự đại diện? Nó có ảnh hưởng bất lợi đến cách các trình biên dịch gia tăng này quyết định những gì cần biên dịch lại trong trường hợp thay đổi không?Có phải nhập ký tự đại diện xấu ở Scala đối với việc biên dịch gia tăng không?

Ví dụ, nếu vì một lớp mới X, tôi sẽ chỉ cần import các classes AB (và không C) từ gói pack, để tôi có được một hình phạt cho việc viết này:

import pack._ 

thay điều này?

import pack.{ A, B } 

Giả sử AB không có sự phụ thuộc vào C, sẽ X được biên dịch lại với việc nhập khẩu ký tự đại diện và không phải với việc nhập khẩu cụ thể hơn khi C thay đổi, hoặc hệ thống theo dõi phụ thuộc sẽ đủ thông minh để nhận ra rằng C là không được sử dụng bởi X mặc dù nhập khẩu ký tự đại diện?

Trả lời

8

Có một tác động nhỏ, nhưng có thể bạn sẽ không nhận thấy nó. Tác động là khi có một tham chiếu đến biểu tượng "Foo" trình biên dịch phải giải quyết "Foo" thành một tên đầy đủ. Phạm vi của nơi mà nó có thể tìm kiếm "Foo" bị ảnh hưởng bởi nhập khẩu ký tự đại diện. Nhưng đó là tất cả được thực hiện trong bộ nhớ và bạn gần như chắc chắn sẽ không nhận thấy sự khác biệt nhỏ như vậy trong tốc độ phân giải, trừ khi bạn có một cái gì đó điên rồ như hàng ngàn lớp học trong một gói.

Ngoài ra, không có tác động. Nếu bạn nhập pack._ và một số lớp tùy ý trong gói._ mà bạn không phụ thuộc vào thay đổi thì tệp của bạn sẽ không phải được biên dịch lại.

+1

Nó sẽ không ** phải được biên dịch lại, nhưng nó có thực sự không được biên dịch lại không? Theo, ví dụ: phiên bản sbt hiện tại? Thường xuyên hơn không, tôi có ấn tượng rằng rất nhiều thứ đang được biên dịch lại. –

+0

Không. Scala làm cho phân tích phụ thuộc phức tạp, nhưng không phải vì nhập khẩu ký tự đại diện. –

+0

OK, vì vậy hy vọng giảm thời gian biên dịch thông qua việc tổ chức lại nhập khẩu sẽ dẫn đến hư không. –

Các vấn đề liên quan