我有兴趣为我的语言定义一个并行映射运算符。它将一个列表转换为一个给定表达式的新列表。它的语法类似于生成器。与 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
?当然,我会说不要在文档中这样做,但是大多数程序员不阅读语言文档。:-)
我想更大的问题是,现代程序员能否适应他们语言中的隐式并行列表处理语义,还是他们需要更明确的东西?