1
17
首先,要注意的是,为了“纯”一个方法必须不仅没有副作用。在给定相同参数时,它也必须始终返回相同的结果。例如,“math.sin”方法是纯的。你吃了12个,它会把罪还给你,每次都是一样的。getcurrentTime()方法不是纯的,即使它没有副作用;每次调用它时,它都会返回不同的值,不管传入的参数是什么。 还要注意,纯方法确实不应该抛出异常;对于我们的目的来说,异常被视为可观察的副作用。 第二,是的,如果你能解释一个方法的纯度,那么你可以做一些有趣的事情来自动地将它并行化。问题是,几乎没有一种方法是纯粹的。此外,假设您确实有一个纯方法;因为纯方法是记忆化的完美候选者,并且因为记忆化引入了一个副作用(它会改变缓存!)采取应该是纯粹的方法,然后使其不纯洁,这是非常有吸引力的。 正如乔·达菲所说,我们真正需要的是一种“控制副作用”的方法。在一个方法周围画一个方框,然后说“这个方法不是没有副作用的,但是它的副作用在这个方框之外是不可见的”,然后使用 那个 事实上驱动安全自动并联。 我很想找出一些方法把这些概念添加到C语言中,但是这完全是一个蓝天般的开放式研究问题,这里没有任何有意或暗示的承诺。 |
2
13
lambda的
应该
保持纯洁。然后框架提供了一个简单的
但它不是自动的或保证的,程序员有责任使它们保持纯净。 |
3
3
lambda是否是纯的取决于它正在做什么。作为一个概念,它既不纯洁也不纯洁。 例如:下面的lambda表达式在读取和写入主体中的单个变量时是不纯的。并行运行会创建一个竞争条件。
相反,下面的代表是纯粹的,没有种族条件。
|
4
3
对于循环部分,也可以使用
|
5
2
有13个部分在阅读中讨论.NET 4.0中新的并行性支持 here . 它包括关于LINQ和PLINQ的讨论,以及第7部分。这是一本很好的书,看看吧 |
nanounanue · 使用python和高级操作符的函数管道 6 年前 |
Zazaeil · 这个特定的递归可以用尾部优化的方式重写吗? 6 年前 |
corvid · 使用ramda通过变量进行升序/降序 6 年前 |
CodingNow · Scala:如何制作多种方法并逐一应用? 6 年前 |