【发布时间】:2009-10-26 13:25:11
【问题描述】:
我有兴趣为我的语言定义一个并行映射运算符。它将一个列表转换为一个给定表达式的新列表。它的语法类似于生成器。与 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 中添加副作用的程序员来说是否过于不直观?当然,我会说不要在文档中这样做,但大多数程序员不阅读语言文档。 :-)
我想更大的问题是,现代程序员能否适应他们语言中的隐式并行列表处理语义,还是他们需要更明确的东西?
【问题讨论】:
-
“他们需要更明确的事情吗”——是的,不要称它为“witheach”而是“WARNING_DO_NOT_SIDE_EFFECT_HERE_PARALLEL_MAP”。
-
我猜这有点过分了吧?
标签: concurrency functional-programming generator semantics language-design