31 votes

Quelles capacités de réflexion pouvons-nous attendre de Scala 2.10?

Scala 2.10 apporte une réflexion autre que celle à condition que le JVM (ou je suppose CLR).

Qu'est-ce que nous devons attendre avec impatience en particulier, et comment cela va-t-il s'améliorer sur la plate-forme?

Par exemple, y aura-t-il une classe qui reflète la convertibilité de la langue entre les champs et les méthodes d'accesseur, afin que je puisse itérer sur les propriétés d'un objet?

14voto

VonC Points 414372

mise à jour 2012-07-04:

Daniel SOBRAL (également sur DONC) détails dans son blog "la sérialisation JSON avec la réflexion dans l'Scala! Partie 1 - Si vous voulez faire la réflexion?" certaines des fonctionnalités à venir avec la réflexion:

Pour récapituler, Scala 2.10 viendra avec un Scala de réflexion de la bibliothèque.
Cette bibliothèque est utilisée par le compilateur lui-même, mais divisé en couches à travers le modèle de gâteau, de sorte que les différents utilisateurs de voir différents niveaux de détail, en gardant pot de tailles adéquates à chaque utilisation, et j'espère que le masquage des détails indésirables.

La réflexion de la bibliothèque également s'intègre à la prochaine macro, ce qui permet en entreprenant des codeurs de manipuler le code au moment de la compilation.


mise à jour 2012-06-14. (à partir de Eugene Burmako):
En Scala 2.10.0-M4, nous avons publié la nouvelle API reflection qui seront les plus susceptibles d'en faire 2.10.0-finale, sans changements notables.
Plus de détails sur l'API peut être trouvé:

Extraits:

Les univers et les miroirs sont maintenant entités distinctes:

  • les univers de l'hôte de la réflexion des artefacts (des arbres, des symboles, types, etc),
  • miroirs résumé de chargement de ces artefacts (par exemple, JavaMirror charges de trucs à l'aide d'un chargeur de classe et d'annotation unpickler, tandis que GlobalMirror utilise en interne le compilateur classreader pour atteindre le même but).

Public API reflection est divisé en scala.reflect.base et scala.reflect.api.

  • Le premier représente un minimaliste instantané qui est suffisante pour construire réifiée des arbres et des types.
  • De construire, mais de ne pas analyser - tout à puce (par exemple, l'obtention d'un type de signature) est mis en œuvre en scala.reflect.api.

À la fois réflexion domaines ont leur propre univers: scala.reflect.basiset scala.reflect.runtime.universe.

  • Le premier est super léger et n'implique pas de tout les chargeurs de classe,
  • tandis que le second représente une dépouillé compilateur.

Première réponse, Sept. 2011:

Vous pouvez voir les évolutions de la refléter dans le package du Scala dépôt GitHub, avec ces deux très récentes s'engage à:

(Liftcode être, d'après ce fil, vise à simplifier "l'écriture de code qui écrit le code")

La classe scala/reflect/internal/Importers.scala (créé hier!) est un bon exemple de l'utilisation de ces dernières réflexion fonctionnalité.

11voto

Brian Smith Points 2439

Deux liens qui devraient vous intéresser:

  • La scala-les éléments internes de la liste de diffusion sur la réflexion de l'api.
  • La nightly build doc api pour 2.10-INSTANTANÉ.

Personnellement, je suis l'espoir de l'utiliser pour faire runtime découverte d'extensions (c'est à dire un type qui s'étend connu trait), et la génération d'une INTERFACE utilisateur formes et de quelques autres choses à partir de ceux-ci.

5voto

Nikita Volkov Points 19844

Avec 2.10M4 actuel, vous pouvez déjà itérer sur les membres d'une classe:

Le code ci-dessus répertorie les objets représentant les membres d'une classe qui ne sont pas des méthodes. Il ya des tonnes de façons que vous pouvez affiner cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X