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副作用程序员太不直观?当然,我会说不要在文档中这样做,但大多数程序员不会阅读语言文档。 :-)

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

+0

“他们需要更明确的东西” - 是的,不要称之为“witheach”,而是“WARNING_DO_NOT_SIDE_EFFECT_HERE_PARALLEL_MAP”。 – Svante 2009-10-26 13:35:56

+0

我猜这在脸颊上有点令人讨厌? – cdiggins 2009-10-26 16:10:51

回答

2

你是对的,因为大多数用户不会阅读文档,因此可能会将非线程安全代码放入witheach块(特别是名称和语法与foreach非常相似)。您要么必须信任您的用户,要么对该块的并发安全性进行一些静态分析。如果你选择后者,那么你可能不会打扰witheach - 只要可能,自动平行foreach

至于用户是否愿意承担选择潜在危险的责任,只要他们知道什么是安全的,我就会下注“是”。许多语言强迫你每天做出这样的选择(指针,手动内存管理,共享内存并发)。您可能希望使语法更加模糊(即将其称为parallelforeach),以便人们知道他们要注册的内容。

+0

这些都是好点。 – cdiggins 2009-10-26 13:56:54

1

你的意思是类似pmap

+0

是的,它实际上是一样的东西,只是更多的Java-ISH语法。 – cdiggins 2009-10-26 13:56:06