39 votes

Quand devrais-je (et ne devrais-je pas) utiliser l'annotation @inline de Scala?

Je crois que je comprends les bases de fonctions en ligne: au lieu d'un appel de fonction qui en résulte dans les paramètres étant placés sur la pile et une opération d'appel, la définition de la fonction est copié au moment de la compilation d'où l'invocation est faite, l'économie de l'invocation de la charge imposée au moment de l'exécution.

Donc, je veux savoir:

  • Ne scalac utilisation smarts inline certaines fonctions (par exemple, un soldat def) sans les conseils d'annotations?

  • Comment juger quand il être une bonne idée de faire allusion à scalac qu'il inlines une fonction?

  • Quelqu'un peut-il donner des exemples de fonctions ou des invocations qui devraient ou ne devraient pas être intégrées?

35voto

oxbow_lakes Points 70013

Jamais @inline tout ce dont la mise en œuvre peut raisonnablement changer et qui va être un public partie d'une bibliothèque.

Quand je dis "la mise en œuvre du changement", je veux dire que la logique en fait peut-être changer. Par exemple:

object TradeComparator extends java.lang.Comparator[Trade] {
  @inline def compare(t1 : Trade, t2 : Trade) Int = t1.time compare t2.time
}

Disons que le "naturel" de comparaison, puis changé pour être basé sur une atomique compteur. Vous pouvez trouver que la fin d'une application jusqu'à 2 composants, chacun construit et inline contre les différentes versions de la comparaison de code.

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