2010-01-12 40 views

Trả lời

19

Nó đã làm với con đường đặc tính được biên dịch, vì đặc điểm là loại giống như giao diện nhưng chúng có thể chứa thực hiện. Điều này làm cho nó rất dễ dàng để thực hiện các thay đổi không phá vỡ khả năng tương thích nguồn nhưng phá vỡ khả năng tương thích nhị phân, bởi vì khi bạn thêm một phương pháp mới vào một đặc điểm cùng với việc thực hiện, bạn phải biên dịch lại mọi thứ thực hiện đặc điểm đó sẽ đón triển khai đó. Có lẽ cũng có những vấn đề khác, nhưng tôi nghĩ chúng hầu như nằm dọc theo cùng một dòng.

+6

Điều này chỉ đúng một phần. JVM thực sự * thực sự * mất liên kết. Đó là cách JDBC 2.0 trình điều khiển tương thích nhị phân với các trình điều khiển JDBC 3.0, nơi các giao diện có * nhiều * phương pháp khác. Điều tương tự cũng đúng trong Scala. Nếu bạn thêm một phương thức trong một đặc tính mà không bao giờ được gọi trong một chương trình, nó tương thích nhị phân. Điều này đúng với val/var cũng như IIRC. – jsuereth

+1

@jsuereth Cảm ơn bạn đã thêm thông tin làm rõ, mặc dù nếu tôi nhớ lại chính xác thì vẫn còn những cách tinh tế mà điều này có thể khiến bạn khó chịu. Ví dụ: giả sử trong v1 của một thư viện bạn có một đặc điểm với phương thức có triển khai và bạn kết hợp đặc điểm đó vào một lớp trong ứng dụng. Sau đó, trong v2 của lib bạn thêm một phương thức với việc thực hiện cho đặc điểm, và gọi phương thức đó từ phương thức phổ biến đến v1 và v2. Ứng dụng được biên dịch với v1 sẽ bị lỗi khi chạy nếu bạn cố gắng sử dụng nó với v2, vì v2 phụ thuộc vào phương thức mới được trộn vào bởi trình biên dịch. Vì vậy, người ta phải rất cẩn thận trong việc cập nhật libs. –

+1

Josh vui lòng sai một giải thích chi tiết hơn mà xứng đáng với một số liên kết tình yêu: http://suereth.blogspot.com/2011/12/scala-fresh-is-alive.html –

2

Nó vẫn còn tương đối trẻ và đang phát triển tích cực.

Có một số thay đổi trong bản phát hành mới đã được chờ đợi một cách lo lắng và có nhiều vấn đề, nhưng không thể làm cho chúng tương thích ngược.

Vì Sun là loại hạn chế về cập nhật, Java thay đổi khá chậm, và thường cố gắng duy trì tương thích ngược với kết thúc cay đắng. Đôi khi điều này đứng trong con đường tiến bộ, nhưng các công ty lớn yêu một ngôn ngữ ổn định.

Scala, nằm trong tay của một nhóm nhỏ các viện nghiên cứu, và nó chưa được sử dụng rộng rãi trong ngành, vì vậy họ có (hoặc mất) một số tự do hơn với những thay đổi.

+3

Vâng, tôi không chắc chắn nếu gọi phiên bản 2. + 'tương đối trẻ' là một ý tưởng hay. – Opal

+2

Đúng 10 tuổi không phải là ngôn ngữ trẻ và phát triển. – tutuca

0

Umm, no. Nhận sự thật của bạn thẳng. Không cần biên dịch lại * khi đi từ 2.7.2.3b1 -> 2.7.2.3b2, điều này thực sự giúp tôi vì cơ sở khách hàng lớn mà chúng tôi đã có với mã kế thừa cố định sử dụng các tính năng 2.7.2.3b1.

* Nên biết trước - trừ khi bạn dại dột sử dụng mã trong scala.collection._ hoặc scala.xml._

9

Thiếu hỗ trợ JVM cho các tính năng cụ thể của Scala, chẳng hạn như các đặc điểm được đề cập và thực tế là nó đang tích cực phát triển.

5

Dưới đây là nền về vấn đề này, trực tiếp từ Odersky, nếu bạn muốn hiểu các vấn đề ngôn ngữ cụ thể mà gây ra vấn đề:

http://www.scala-lang.org/node/9346

Đó là giá trị đọc kết hợp với bài đăng này từ David Pollack nếu bạn là người mới đến vấn đề này và muốn tìm hiểu tác động này có thể có trên các ứng dụng:

http://lift.la/scalas-version-fragility-make-the-enterprise

+0

Tôi nghĩ bạn cũng đã bỏ lỡ phản hồi của tôi: http://suereth.blogspot.com/2011/12/scala-fresh-is-alive.html làm rõ nhiều điều đã xảy ra kể từ email của Odersky. – jsuereth

2

tôi đã thực hiện hỗ trợ cho Scala trong japi-compliance-checker 1.6 và thực hiện phân tích tính tương thích ngược cho tất cả các phiên bản của Scala (cả nhị phân và khả năng tương thích nguồn).

Vì vậy, bây giờ bạn có thể xem các thay đổi đột phá trong chi tiết. Báo cáo có sẵn tại đây: http://abi-laboratory.pro/java/tracker/timeline/scala/

Báo cáo được cập nhật hàng ngày, vì vậy bạn có thể theo dõi các thay đổi trong các phiên bản Scala gần đây.

enter image description here

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