如何强制计算表达式,使其不会被优化?
@elapsed f()
返回零,因为纯函数的结果f
未被使用。
在 Rust 中,我们可以使用一个名为 的内在函数black_box
,在 Nim - used
pragma 中,在 C 中我们可以创建一个volatile
变量,在 Zig -doNotOptimizeAway
函数中,在 Haskell 中我们可以使用它evaluate
来强制求值,等等。我怎样才能在朱莉娅做到这一点?
另外,@elapsed
实际上是测量经过时间的正确方法吗?我个人需要一个具有纳秒精度的单调计时器......
我正在实现一个简单的迭代斐波那契。为了测试它,我写了一个简单的main
:
fib n = i where (i, _) = foldl (\(i, j) _ -> (j, i + j)) (0, 1) [1..n]
main = do
foldl (\_ n -> print $ fib n) 0 [0, 5, 10]
Run Code Online (Sandbox Code Playgroud)
...并出现错误!
* No instance for `Num (IO ())' arising from the literal `0'
* In the second argument of `foldl', namely `0'
In a stmt of a 'do' block:
foldl (\ _ n -> print $ fib n) 0 [0, 5, 10] …
Run Code Online (Sandbox Code Playgroud)