2010-01-12 13 views

Respuesta

19

Tiene que ver con la forma en rasgos se compilan, porque los rasgos son algo así como las interfaces pero pueden contener implementación. Esto hace que sea MUY fácil realizar cambios que no rompan la compatibilidad con el origen sino que rompan la compatibilidad binaria, porque cuando agrega un nuevo método a un rasgo junto con una implementación, debe recompilar todo lo que implementa ese rasgo para que recogerá esa implementación. Probablemente haya otros problemas también, pero creo que son más o menos en la misma línea.

+6

Esto es parcialmente cierto. La JVM es realmente * realmente * suelta con enlaces. Así es como JDBC 2.0 controladores son binarios compatibles con controladores JDBC 3.0 donde las interfaces tienen * muchos * más métodos. Lo mismo es cierto en Scala. Si agrega un método en un rasgo que nunca se llama en un programa, es binario compatible. Esto también se aplica a val/var IIRC. – jsuereth

+1

@jsuereth Gracias por agregar la aclaración, aunque si recuerdo correctamente todavía hay maneras sutiles que esto puede morderte. Por ejemplo, supongamos que en v1 de una biblioteca tiene un rasgo con un método que tiene implementación, y mezcla el rasgo en una clase en una aplicación. Luego, en v2 de la lib, se agrega un método con implementación al rasgo, y se llama a ese método desde el método común para v1 y v2. La aplicación compilada contra v1 fallará en el tiempo de ejecución si intenta usarla con v2, porque v2 depende del nuevo método que el compilador haya mezclado. Entonces uno debe tener mucho cuidado al actualizar libs. –

+1

Josh amablemente erró una explicación más detallada que merece un enlace amor: http://suereth.blogspot.com/2011/12/scala-fresh-is-alive.html –

2

Todavía es relativamente joven y está en desarrollo activo.

Hay algunos cambios en la nueva versión que fueron esperados con ansiedad y que ayudan con muchos problemas, pero no fue posible hacerlos compatibles con versiones anteriores.

Dado que Sun es un tanto restrictivo con respecto a las actualizaciones, Java cambia de forma bastante lenta y, por lo general, intenta permanecer compatible con versiones anteriores hasta el final. A veces esto obstaculiza el progreso, pero las grandes empresas aman un lenguaje estable.

Scala, por otro lado, está en manos de un pequeño grupo de académicos, y no es (todavía) ampliamente utilizado en la industria, por lo que tienen (o toman) más libertad con los cambios.

+3

Bueno, no estoy seguro de si se llama la versión 2 + 'relativamente joven' es una buena idea. – Opal

+2

Derecho, un idioma de 10 años no es joven y evoluciona. – tutuca

0

Umm, no. Obtenga sus datos correctos. No se necesitó ninguna recompilación * cuando pasé de 2.7.2.3b1 -> 2.7.2.3b2, lo que fue un verdadero alivio para mí debido a la gran base de clientes que teníamos con el código heredado arraigado utilizando las características 2.7.2.3b1.

* Advertencia - a menos que tontamente acostumbrado código en scala.collection._ o scala.xml._

9

Falta de compatibilidad con JVM para características específicas de Scala, como los rasgos mencionados, y el hecho de que está evolucionando activamente.

5

Aquí hay antecedentes de esta, directamente desde Odersky, si se quiere entender las cuestiones lingüísticas específicas que causan problemas:

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

Vale la pena leer en conjunción con este post de David Pollack si es nuevo para la emisión y quieren entender el impacto que esto puede tener en aplicaciones:

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

+0

Creo que también se perdió mi respuesta: http://suereth.blogspot.com/2011/12/scala-fresh-is-alive.html que aclara mucho de lo sucedido desde el correo electrónico de Odersky. – jsuereth

2

he implementado soporte para Scala en el japi-compliance-checker 1.6 y realizó un análisis de compatibilidad con versiones anteriores para todas las versiones de Scala (tanto de compatibilidad binaria como de fuente).

Ahora puede ver los últimos cambios en los detalles. El informe está disponible aquí: http://abi-laboratory.pro/java/tracker/timeline/scala/

El informe se actualiza cada dos días para que pueda supervisar los cambios en las versiones recientes de Scala.

enter image description here

Cuestiones relacionadas