2010-01-12 7 views

Répondre

19

Il a à voir avec les traits sont compilés façon, parce que les traits sont un peu comme les interfaces, mais ils peuvent contenir la mise en oeuvre. Cela rend si facile d'apporter des modifications qui ne cassent pas la compatibilité source, mais qui cassent la compatibilité binaire, car lorsque vous ajoutez une nouvelle méthode à un trait avec une implémentation, vous devez recompiler tout ce qui implémente ce trait afin qu'ils va ramasser cette implémentation. Il y a probablement d'autres problèmes, mais je pense qu'ils vont dans le même sens.

+6

Ce n'est que partiellement vrai. La JVM est réellement * vraiment * lâche avec la liaison. Voilà comment JDBC 2.0 pilotes sont binaires compatibles avec les pilotes JDBC 3.0 où les interfaces ont * beaucoup * plus de méthodes. La même chose est vraie dans Scala. Si vous ajoutez une méthode dans un trait qui n'est jamais appelé dans un programme, il est compatible binaire. Ceci est vrai pour val/var ainsi que IIRC. – jsuereth

+1

@jsuereth Merci d'avoir ajouté la clarification, mais si je me souviens bien, il y a encore des façons subtiles de vous mordre. Par exemple, disons dans v1 d'une bibliothèque que vous avez un trait avec une méthode qui a une implémentation, et que vous mélangez le trait dans une classe dans une application. Ensuite, dans v2 de la lib, vous ajoutez une méthode avec implémentation à l'attribut, et appelez cette méthode à partir de la méthode commune à v1 et v2. L'application compilée contre v1 tombera en panne à l'exécution si vous essayez de l'utiliser avec v2, car v2 dépend de la nouvelle méthode mélangée par le compilateur. Il faut donc être très prudent dans la mise à jour des bibliothèques. –

+1

Josh gentiment tort une explication plus détaillée qui mérite un lien d'amour: http://suereth.blogspot.com/2011/12/scala-fresh-is-alive.html –

2

Il est encore relativement jeune et en cours de développement actif.

Il y avait quelques changements dans la nouvelle version qui étaient anxieusement attendus et qui aident avec beaucoup de problèmes, mais il n'était pas possible de les rendre rétrocompatibles. Parce que Sun est plutôt restrictif à propos des mises à jour, Java change assez lentement et essaie généralement de rester rétrocompatible avec l'extrémité amère. Parfois, cela fait obstacle au progrès, mais les grandes entreprises aiment un langage stable. D'autre part, Scala est entre les mains d'un petit groupe d'universitaires, et il n'est pas (encore) largement utilisé dans l'industrie, donc ils ont (ou prennent) plus de liberté avec les changements.

+3

Eh bien, je ne sais pas si la version appelant 2. + « relativement jeune » est une bonne idée. – Opal

+2

Juste une langue de 10 ans n'est pas jeune et en évolution. – tutuca

0

Umm, no. Obtenez vos faits directement. Il n'y avait pas de recompilation nécessaire * en passant de 2.7.2.3b1 -> 2.7.2.3b2, ce qui a été un réel soulagement pour moi à cause de la grande base de clients que nous avions avec un ancien code retranché utilisant les fonctionnalités 2.7.2.3b1.

* caveat - à moins que vous bêtement utilisé le code dans scala.collection._ ou scala.xml._

9

Manque de prise en charge JVM pour les fonctionnalités spécifiques à Scala, telles que les caractéristiques mentionnées, et le fait qu'il évolue activement.

5

est ici fond sur ce point, directement à partir Odersky, si vous voulez comprendre les problèmes linguistiques spécifiques qui posent des problèmes:

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

Il vaut la peine de lire conjointement avec ce post de David Pollack si vous êtes nouveau à la question et que vous voulez comprendre l'impact que cela peut avoir sur les applications:

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

+0

Je pense que vous avez également manqué ma réponse: http://suereth.blogspot.com/2011/12/scala-fresh-is-alive.html qui éclaircit beaucoup de ce qui s'est passé depuis l'email d'Odersky. – jsuereth

2

J'ai mis en soutien à Scala dans le japi-compliance-checker 1.6 et effectué une analyse de rétrocompatibilité pour toutes les versions de Scala (compatibilité binaire et source).

Alors maintenant, vous pouvez voir les changements de rupture dans les détails. Le rapport est disponible ici: http://abi-laboratory.pro/java/tracker/timeline/scala/

Le rapport est mis à jour tous les deux jours, ce qui vous permet de surveiller les modifications apportées aux versions récentes de Scala.

enter image description here

Questions connexes