gpt4 book ai didi

dart - Dart中的元编程性能

转载 作者:行者123 更新时间:2023-12-03 03:27:24 24 4
gpt4 key购买 nike

在Dart中使用运算符重载时,操作功能是在编译时,运行时还是其他时间解析的?

在哪种情况下,vm或dart2js能够绕过以下内容:

function add(left, right) {
if (isPrimitive(left) && isPrimitive(right)) {
return left + right;
} else if (left.hasOverload("+")) {
return left.plus(right);
} else if (left.hasReverseOverload("+")) {
return right.plus(left);
} else {
throw new Error("Cannot add objects");
}
}

在dart中,编译时的 a + b可能会更改为 add(a,b)。这将是运行时检查,并且出于明显的原因,我对此性能有所担忧。因此,基本上,在Dart中时是否要使用运行时检查?

最佳答案

Dart中的运算符与对象上的其他方法没有什么不同。
语言规范允许在运行时解析方法,并且大多数都可以。

但是,如果从代码中非常清楚哪种类型的值流向何处,则智能编译器可能能够在编译时识别正在调用的函数。对于何时发生,没有严格的规定,因为这取决于编译器使用的分析质量,分析可能会每天变化(通常情况会更好)。
可以进行各种分析和优化的dart2js编译器与必须非常快的VM JIT编译器之间有很大的区别。在后一种情况下,当优化重新编译知道实际到达函数的类型时,优化也将在运行时发生。

因此,Dart编译器绝对可以像您展示的那样进行优化。
总的来说,是否以及何时这样做是不可能的。

总而言之,在您真正确定+调用是瓶颈之前,请不要担心。

关于dart - Dart中的元编程性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com