2015-04-13 21 views
7

Tôi đã đọc điều này: http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/CompileStatic.html và điều này: Should I use Groovy's @CompileStatic if I'm also using Java 7 và hiểu chắc chắn có những cải tiến hiệu suất chắc chắn sẽ có nhưng phải không? Tôi không hiểu chính xác những gì @CompileStatic làm.Khi nào/tại sao tôi muốn sử dụng Groovy's @CompileStatic?

Có các lớp học nhất định mà thêm @CompileStatic là không có trí tuệ? Tôi không muốn nó ở đâu?

+3

Các lớp bạn muốn nhanh hơn/được đánh máy và không cần các tính năng động? –

Trả lời

11

Để trích dẫn một phần của tôi về câu trả lời của tôi để Should I use Groovy's @CompileStatic if I'm also using Java 7:

Trong khi nhanh hơn so với Groovy bình thường, nó có thể biên dịch chỉ là một tập hợp con của Groovy và hoạt động một chút khác nhau. Đặc biệt là tất cả các tính năng động không còn khả dụng nữa.

Tất cả MOP sẽ bị bỏ qua. Nhà xây dựng sẽ không làm việc nói chung, một số có phần mở rộng cho trình biên dịch để cho phép họ đi qua mặc dù. Các phương thức cũng được chọn tại thời gian biên dịch sử dụng các kiểu tĩnh, trong khi Groovy thường sử dụng các phương thức có sẵn trong thời gian chạy và các kiểu thời gian chạy. Điều này có thể dẫn đến các phương thức khác nhau được gọi.

Tất nhiên @CompileStatic cũng cung cấp một số bảo mật, vì đó là nhiệm vụ của trình biên dịch để xác minh chương trình lúc chạy. Nhưng kể từ khi thông tin tĩnh là doomed không đầy đủ, có thể không bao giờ có một 100% an ninh.

Vì vậy, ở đâu nó không có trí tuệ ... tốt ... POGO chẳng hạn, vì chúng thường không chứa tất cả các mã đó. Và tất nhiên đối với các lớp được chuyển từ Java sang Groovy bằng cách sao chép & dán.

Tôi muốn nó ở đâu? Vâng, hiện tại có lẽ trên Android, vì có kích thước mã có tác động và mã được biên dịch tĩnh nhỏ gọn hơn. Nếu không, cá nhân tôi không sao cả khi không sử dụng @CompileStatic. Đây là một vấn đề của hương vị. Trong một số trường hợp có cải thiện hiệu suất cho các vòng chặt chẽ, nhưng điều đó đòi hỏi bạn phải đi và xác định bằng cách lập hồ sơ ứng dụng của bạn trước tiên

+0

Khối trích dẫn đó từ đâu? Không giống như câu trả lời mà bạn nói bạn đang trích dẫn. – weston

+0

weston, bạn nói đúng, tôi đã bỏ lỡ một dòng mới, làm cho nó trông giống như trích dẫn tiếp tục. Tôi đã sửa – blackdrag

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