我有兴趣为我的语言定义一个并行映射运算符。它将列表转换为给定表达式的新列表。它的语法类似于生成器。与C#和Python中的生成器不同,如果编译器需要(例如,存在空闲核心,并且列表非常大),它可能会并行评估。它将被称为 withhe ,以区别于顺序执行的 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 中加入副作用的程序员来说,这是不是太不直观了?当然,我会说不要在文档中这样做,但大多数程序员不会阅读语言文档。 : - )

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

有帮助吗?

解决方案

你是对的,因为大多数用户都不会阅读文档,因此可能会将非线程安全的代码放在带有块的中(特别是名称和语法类似于<代码>的foreach )。您要么必须信任您的用户,要么对该块的并发安全性执行一些静态分析。如果你选择了后者,那么你也可以不打扰 withhe - 只要在可能的情况下自动并行化 foreach

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

其他提示

您的意思是 pmap

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top