![]() |
1
7
对: 在库中创建新的高阶函数的能力。
无论如何,列表中最重要的功能之一是
功能语言的好处在于,一旦认识到这个问题,我们就可以解决这个问题,而不是通过引入新的语言特性,而是通过更加智能地使用我们已经拥有的特性。看看怎么做
Guy Steele's talk from August 2009
他解释了原因
这些都是为支持分而治之的编程而设计的。 我对这次谈话感到非常兴奋的是 不需要引入新的语言特性来支持“本机”编程的分而治之。 我们可以利用已有的原语来设计更好的库。 如果你可以访问ACM数字图书馆,你可以看到盖伊谈话的视频。 Organizing Functional Code For Parallel Execution 或者正如本·卡雷尔指出的,你可以看到 video taken by Malcom Wallace 在Vimeo上。 |
![]() |
2
4
自动并行并不像看上去那么容易。这方面的问题是,如果分区是自动完成的,则存在过度分区(太多分区)的风险,这会增加太多的开销,或者分区不足,这不会对CPU中的所有核心进行适当的宣传。 静态地(即在编译时)弄清楚这一点是相当困难的,这就是为什么开发人员通常要对其进行注释的原因。 在哪里? 并行化。 实例:
哈斯克尔有
Data Parallel Haskell :定义一个并行数组数据类型,以允许更隐式的并行化样式,但它似乎以一些限制为代价,并且仍然是实验代码。 ( 免责声明:我不是Haskell开发者 ) 这个 Task Parallel Library in .NET 以下内容: 可以自动并行化数据,也可以实现自己的 Partitioner . 您仍然需要知道并行化是如何工作的,否则最终会 over- or underpartitioning . 里德尸体 great series of articles on the TPL and PLINQ . DryadLINQ 基于plinq并添加自动分布式计算。 这些都不是语言的本土化,但它们是紧密集成的。甚至还有一个 PLINQ integration module for F# . |
![]() |
3
2
看看 Manticore 其前身NESL及其兄弟ZPL。所有这些语言至少都是部分功能语言,具有并行结构,可以一次对数据结构的整个内容进行操作。 |
![]() |
4
1
我不熟悉任何具有分而治之类型模式的语言。正如你所说,很难想象你是如何指定这样的东西的。
如果没有新的符号,我认为经典函数就像
|
![]() |
5
0
这类事情在Ruby中很容易指定。在本例中,我们将一个范围分成三组,并对每个组分配一个求和方法。然后,我们对得到的部分和求和。您可以很容易地扩展它,使之成为多线程的。
这个例子与您的有点不同,但显示了原理。 |
![]() |
nanounanue · 使用python和高级操作符的函数管道 6 年前 |
![]() |
Zazaeil · 这个特定的递归可以用尾部优化的方式重写吗? 6 年前 |
![]() |
corvid · 使用ramda通过变量进行升序/降序 6 年前 |
![]() |
CodingNow · Scala:如何制作多种方法并逐一应用? 6 年前 |