如果我想要更快的速度,我有点厌倦了明确地为多核编写代码,特别是当我只是编写一次性脚本时。我的开发盒已经有8个核心,这个数字比时钟速度快了很多。功能语言似乎提供了一个潜在的逃避舱口,但我还没有努力掌握它们中的一个。
我希望看到一些现实世界代码的样本块比非功能性替代品更好和/或更可并行化。我对这种语言并不挑剔 - 我对这些概念更感兴趣。
谢谢!
答案 0 :(得分:6)
MapReduce怎么样?它具有令人难以置信的可并行性,即使它没有在函数式语言中实现,但它的灵感来自Lisp的map
和reduce
。
答案 1 :(得分:4)
这个(很长但非常好)的视频给出了F#的介绍和一个引人注目的演示,说明在该语言中并行化代码是多么容易:
答案 2 :(得分:2)
您的问题是在现有技术水平上要求材料。我认为你对这一领域的最佳介绍,有一些例子,是Nikhil和Arvind的书Implicit Parallel Programming in pH。
答案 3 :(得分:1)
在Programming Erlang的第20章(“编程多核CPU”)中有一个使用mapreduce的文本索引器/搜索器的扩展示例。我不知道这是多么令人印象深刻,但看起来代码凡人可以写。
答案 4 :(得分:1)
LINQ是主流语言中函数式编程的一个很好的例子。改进的代码和monads?在我的C#? :)无论如何,w.r.t。线程,提到Parallel LINQ。通过使用不变性和更高阶函数(也许是表达式),库可以为我们并行化。
另一个指向F#的链接async workflows。令人印象深刻的是能够获取同步代码,并通过一些小注释将其转换为异步代码。该代码保留了您可能使用的许多必要品质。你没有必要彻底改变一切来利用这一点;编译器通过处理它。
答案 5 :(得分:0)
Purely Functional Data Structures(长PDF),由Chris Okasaki撰写。
答案 6 :(得分:0)
我的老师曾经开玩笑说功能代码最好的例子就是未编写的代码。