2017-09-01 1 views
13

Je googl'ed un peu, mais aucune autre information que les rares:Quel est l'effet de -Yrangepos autre que me donner des emplacements source dans les macros

-Yrangepos      Use range positions for syntax trees. 

Ok. Et je sais que je dois l'utiliser si je veux capturer des fragments de source dans une macro.

Maintenant mes deux questions sont:

  • pourquoi est-ce pas par défaut?
  • Y at-il des effets secondaires à son utilisation (comme l'augmentation de la taille du fichier de classe)?

Répondre

2

Le numéro introducing -Yrangepos à l'époque où makro était orthographié Burmak (r) o est motivé par votre cas d'utilisation.

Une option -X suggère la permanence, alors qu'un -Y peut disparaître à tout moment, ce qui signifie qu'il pourrait devenir le comportement par défaut.

Peut-être qu'il n'a pas à cause de bugs and crashes.

A a team meeting written up by Moors:

positions Range [martin]

Le respect des positions de gamme - la carie dans le ide qui a à voir avec le fait que les transformations dans le typer ou analyseur ne respectent pas gamme positions

  • tous vérifiés dans le changement - vérifier automatiquement les positions de gamme
  • positions de gamme = pas seulement un point de position, mais début et de fin, contenues dans les nœuds d'arbres (RangePosition est une sous-classe de la position)
  • il y a carte de RangePositions dans CompilationUnit

invariants:

  • positions de la gamme des noeuds enfants sont contenues dans la gamme pos de noeuds parents
  • pas de chevauchement (sauf pour les positions de gamme transparentes)
  • rangepos couvrent ensemble du programme

problèmes:

  • modèles
  • pour

fichiers de contrôle contiennent des positions

rangeposition (début, point final) .focus == offsetposition (point)// s'échappe de l'invariant sans chevauchement

En 2012, la validation PR avec -Yrangepos a échoué fréquemment; il a été corrigé, mais turned into a nightly validation pour réduire les ressources.

Hubert offered these notes:

Quelques choses sur rangepos:

  • si vous essayez d'exécuter un code avec 'scalac -Ybrowse: typer -Yrangepos FILE.scala' vous verrez que la plupart des arbres ont des positions de gamme.
  • certains ne le font pas, oui, c'est un peu dommage, mais nous essayons d'améliorer cela - en fait, chaque fois que vous trouvez un tel mode en Yrangepos est possible que ce soit un bug. La situation s'est considérablement améliorée de 2.9 à 2.10.0-snapshots.
  • arbres syntaxiques sont souvent affectés des positions décalées (ce qui est quelque chose que vous pourriez éprouver, mais je dois voir un exemple )
  • pour le compilateur nous soucions que si les positions de gamme sont valables jusqu'à (et y compris) typer. après ça, on s'en fout.Vous exécutez votre outil après des vérifications de ce que je peux voir, cela peut interférer avec un couple de transformations qui se produisent dans les refchecks qui peuvent manipuler/attribuer des positions de distance ou de décalage.

Il peut sembler facile de passer à des positions de gamme, parce que les mathématiques de base, mais il y a encore des bugs like this one qui démontrent the extra labor involved dans des positions assignant lors de la synthèse ou la restructuration d'un arbre.

Bien que les positions de plage soient nécessaires pour le compilateur de présentation, elles ne figurent pas dans le chemin critique de la compilation par lots. Avec plus de ressources pour améliorer la robustesse, peut-être qu'ils pourraient basculer le commutateur.

1

Je ne peux que deviner que scalac par défaut n'utilise pas les positions de plage pour des raisons de performances.

En compilation régulière, les positions sont utilisées uniquement pour la génération de rapports d'erreurs et la sauvegarde des informations de numéro de ligne dans les fichiers de classe. Les positions de décalage sont suffisantes pour faire cela, donc il ne sert à rien de faire tout le travail nécessaire pour manipuler les positions de portée.

Je ne pense pas que les positions de gamme entraînent d'autres coûts que la simple vitesse de compilation.