如果我具有以下功能,则认为它是纯净的,因为它没有副作用,并且在输入x相同的情况下始终会产生相同的结果。

public static int AddOne(int x) { return x + 1; }

据我了解,如果运行时了解函数的纯度,那么它可以优化执行过程,从而不必重新计算返回值。

有没有办法在C#中实现这种运行时优化?我认为这种优化是有名的。它叫什么?

编辑:显然,我的示例函数不会从这种优化中获得很多好处。给出该示例是为了表达我所想到的纯净类型,而不是现实世界中的示例。

最佳答案

正如其他人指出的那样,如果您想节省重新计算已经计算出的结果的成本,则可以记住该函数。这以增加内存使用量来提高速度为代价-记住如果您怀疑如果缓存无限增长而可能耗尽内存,请记住偶尔清理一下缓存。

但是,除了记住函数的结果外,还可以对纯函数执行其他优化。例如,没有副作用的纯函数通常可以安全地调用其他线程。使用大量纯函数的算法通常可以并行化以利用多个内核。

随着大规模多核计算机变得越来越便宜和越来越普遍,这一 Realm 将变得越来越重要。对于C#语言,我们有一个长期的研究目标,以找到某种方法来利用语言,编译器和运行时中纯函数(以及不纯净但“孤立”的函数)的功能。但是这样做涉及许多难题,在工业界或学术界对于最佳方法尚无共识。顶尖人士正在考虑,但是不要期望很快会有任何重大结果。

关于c# - 如何在C#中从 “pure function”获得优化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1363008/

10-16 15:02