Pourquoi le binaire Scala est-il incompatible entre différentes versions?Scala: incompatibilité binaire entre les versions
Répondre
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.
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.
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._
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.
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:
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
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.
- 1. incompatibilité auto-type dans Scala
- 2. Scala incompatibilité de type de classe anonyme
- 3. Différence entre les versions IE6
- 4. La compatibilité binaire entre les distributions Linux
- 5. système de type Scala: incompatibilité de type de base
- 6. Différences entre les versions de Visual Studio
- 7. Paramètres python QThread.run - changés entre les versions?
- 8. Couleur TabHost changée entre les versions Android
- 9. Compatibilité des applications entre les versions
- 10. différences entre cellules différentes entre les différentes versions de IE
- 11. Incompatibilité entre ggplot2 et d'autres paquets dans R?
- 12. Comment contrôler les versions de versions avec Visual Studio?
- 13. Conflits trouvés entre les différentes versions du même assemblage dépendant
- 14. Différence entre les versions de Report Viewer Control
- 15. compter les lignes de code entre deux versions
- 16. Relation entre la source Opensolaris et les versions Solaris
- 17. Silverlight DataGrid change entre les versions 3 et 4
- 18. NSDateFormatter problèmes entre les versions 10.4 et 10.5
- 19. Génération d'une liste des fichiers modifiés entre les versions hg
- 20. ÉNORME différence de framerate entre les versions release/debug
- 21. Incompatibilité entre la définition du constructeur et la déclaration
- 22. incompatibilité de journalisation Python entre 2.5 et 2.6
- 23. Incompatibilité entre Sun JRE javac et le compilateur java Eclipse?
- 24. relation entre les types internes dépendant du chemin Scala
- 25. Les valeurs flottantes se comportent différemment entre les versions de version et de débogage
- 26. Compatibilité iPhone App entre différentes versions d'OS
- 27. différence dans les versions SYBASE
- 28. Incompatibilité de type pour les classes génériques
- 29. Incompatibilité de Firefox Netscape
- 30. Comment puis-je suivre et synchroniser les versions entre les produits et les composants
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
@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. –
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 –