布尔表达式评估和性能

Boolean expression evaluation and performance

我认为 Pine Script 评估布尔表达式的方式存在缺陷,这会极大地影响性能。

看这个例子

//@version=4
study("PlayGround", overlay=true)

var int y = 0

f1() =>
    label.new(bar_index, high)
    true

if false and f1()
    y := y + 1

plot(y, title="y")

语句 if false and f1() 不需要评估函数 f1() 的结果,以便知道结果将始终是 false.
然而 - 正如图表上绘制的标签所证明的那样 - 函数 f1() 仍然在每个柱上执行。
所以 Pine Script 似乎在做出决定之前评估 entire 表达式,这是不必要的。

不知道这是否是设计使然,但我认为这应该得到纠正。

上下文信息
我有一个脚本,其中包含大量连续的 if 语句,用于检查当前柱线是否在特定日期。
为了提高性能,我在每个 if 语句中添加了一个要首先评估的布尔变量。
(例子见Plotting custom data - daily = ok, weekly = not ok中的f_prediction_daily()函数)
但是随着我的 if 语句列表越来越大,我注意到性能下降。
因此,我创建了这个小测试和问题。

正确。布尔表达式的求值目前在 Pine 中没有短路,所以表达式中的所有元素都被求值。