代码之家  ›  专栏  ›  技术社区  ›  cdiggins

并行映射(生成器)运算符

  •  0
  • cdiggins  · 技术社区  · 15 年前

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

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

    2 回复  |  直到 9 年前
        1
  •  2
  •   Adam Wright    15 年前

    你说得对,大多数用户不会阅读文档,因此可能会将非线程安全代码放在 witheach 块(尤其是名称和语法与 foreach )您要么必须信任您的用户,要么对该块的并发安全性执行一些静态分析。如果你选择了后者,那你就不必费心了 有线电视 -只是自动并联 每人 如果可能的话。

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

        2
  •  1
  •   Svante    15 年前

    你的意思是 pmap ?