Comment la mise en correspondance de modèles dans Scala est-elle implémentée au niveau du bytecode? Est-ce comme une série de constructions if (x instanceof Foo)
, ou quelque chose d'autre?Comment la mise en correspondance de modèles dans Scala est-elle implémentée au niveau du bytecode?
Quelles sont ses implications en termes de performances? Par exemple, étant donné le code suivant (à partir de Scala By Example pages 46-48), à quoi ressemblerait le code Java équivalent pour la méthode eval
?
abstract class Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr
def eval(e: Expr): Int = e match {
case Number(x) => x
case Sum(l, r) => eval(l) + eval(r)
}
P.S. Je peux lire le bytecode Java, donc une représentation bytecode serait assez bonne pour moi, mais il serait probablement mieux pour les autres lecteurs de savoir à quoi cela ressemblerait en tant que code Java.
P.P.S. Est-ce que le livre Programming in Scala donne une réponse à cette question et à des questions similaires sur la façon dont Scala est mis en œuvre? J'ai commandé le livre, mais il n'est pas encore arrivé.
Pourquoi ne pas simplement compiler l'exemple et le désassembler avec un désassembleur de bytecode Java? – Zifre
Je vais probablement le faire, à moins que quelqu'un donne une bonne réponse en premier. Mais maintenant je veux dormir. ;) –
La question est utile pour les autres lecteurs! – djondal