我对为我的语言定义并行映射操作符很感兴趣。它在给定表达式的情况下将列表转换为新的列表。它将具有类似于生成器的语法。与C#和Python中的生成器不同,如果编译器需要,它可能会被并行计算(例如,有一个空闲的核心,并且列表非常大)。它将被称为witheach,以区别于按顺序执行的foreach。
例如,考虑以下内容:
var f = function(int x) : int { return x * 2; }
var my_list = 0..1000000;
var my_mapped_list = witheach (i in mylist) yield f(i);我的问题是,对于可能在f中带来副作用的程序员来说,这会不会太不直观?当然,我会说不要在文档中这样做,但大多数程序员并不阅读语言文档。:-)
我想更大的问题是,现代程序员能适应他们语言中的隐式并行列表处理语义吗,或者他们需要更明确的东西吗?
发布于 2009-10-26 21:30:08
您说得对,大多数用户不会阅读文档,因此可能会将非线程安全代码放在witheach块中(尤其是名称和语法与foreach非常相似的代码)。您要么必须信任您的用户,要么对该块的并发安全性执行一些静态分析。如果你选择了后者,那么你不妨不用witheach了--只要在可能的情况下自动并行化foreach即可。
至于用户是否准备好承担选择潜在危险的责任,我打赌是的,只要他们事先知道什么是安全的。许多语言每天都会迫使你做出这样的选择(指针、手动内存管理、共享内存并发)。你可能想让你的语法不那么模棱两可(也就是叫它parallelforeach),这样人们就知道他们注册的是什么。
发布于 2009-10-26 21:34:07
你的意思是像pmap这样的东西
https://stackoverflow.com/questions/1624767
复制相似问题