0

我有兴趣为我的语言定义一个并行映射运算符。它将一个列表转换为一个给定表达式的新列表。它的语法类似于生成器。与 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?当然,我会说不要在文档中这样做,但是大多数程序员不阅读语言文档。:-)

我想更大的问题是,现代程序员能否适应他们语言中的隐式并行列表处理语义,还是他们需要更明确的东西?

4

2 回答 2

2

你说得对,大多数用户不会阅读文档,因此可能会将非线程安全代码放在一个witheach块中(尤其是名称和语法与foreach. 您要么必须信任您的用户,要么对该块的并发安全性执行一些静态分析。如果您选择后者,那么您最好不要打扰witheach- 尽可能自动并行化foreach

至于用户是否准备好承担选择潜在危险的责任,我会打赌“是”,只要他们事先知道什么是安全的。许多语言每天都强迫您做出这种选择(指针、手动内存管理、共享内存并发)。您可能希望使您的语法不那么含糊(即称为它parallelforeach),以便人们知道他们在注册什么。

于 2009-10-26T13:30:08.420 回答
1

你的意思是pmap 之类的东西?

于 2009-10-26T13:34:06.870 回答