如果我有以下函数,它被认为是纯粹的,因为它没有副作用,并且在给定相同输入 x 的情况下总是会产生相同的结果。
public static int AddOne(int x) { return x + 1; }
据我了解,如果运行时了解功能纯度,它可以优化执行,这样就不必重新计算返回值。
有没有办法在 C# 中实现这种运行时优化?我假设这种优化有一个名称。它叫什么?
编辑:显然,我的示例函数不会从这种优化中获得太多好处。该示例是为了表达我心目中的纯度类型,而不是真实世界的示例。
最佳答案
正如其他人指出的那样,如果您想节省重新计算您已经计算过的结果的成本,那么您可以内存该函数。这会以增加内存使用量来提高速度——如果您怀疑如果缓存无限增长可能会耗尽内存,请记住偶尔清除缓存。
但是,除了内存它们的结果之外,还有其他可以对纯函数执行的优化。例如,没有副作用的纯函数通常可以安全地调用其他线程。使用大量纯函数的算法通常可以并行化以利用多核。
随着大规模多核机器变得越来越便宜和越来越普遍,这一领域将变得越来越重要。我们对 C# 语言有一个长期的研究目标,即找出某种方法来利用语言、编译器和运行时中纯函数(以及不纯但“孤立”的函数)的强大功能。但这样做涉及到许多难题,对于这些问题,工业界或学术界几乎没有就最佳方法达成共识。高层人士正在考虑这个问题,但不要指望很快会有任何重大成果。
关于c# - 如何从 C# 中的 "pure function"获得优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1363008/