如果我想要更多速度,特別是當我只寫一次性腳本時,我已經厭倦了爲多核心而明確編寫代碼。我的開發盒已經有8個核心,這個數字比時鐘速度快得多。功能語言似乎提供了一個潛在的逃生艙口,但我還沒有努力去掌握其中的一個。功能代碼有哪些令人印象深刻的例子?
我很想看到,比非功能性的替代品更好和/或更多並行的實際代碼一些樣本塊。我對語言並不挑剔 - 我對這些概念更感興趣。
謝謝!
如果我想要更多速度,特別是當我只寫一次性腳本時,我已經厭倦了爲多核心而明確編寫代碼。我的開發盒已經有8個核心,這個數字比時鐘速度快得多。功能語言似乎提供了一個潛在的逃生艙口,但我還沒有努力去掌握其中的一個。功能代碼有哪些令人印象深刻的例子?
我很想看到,比非功能性的替代品更好和/或更多並行的實際代碼一些樣本塊。我對語言並不挑剔 - 我對這些概念更感興趣。
謝謝!
這(長,但非常好)的視頻給既是介紹到F#和它是多麼容易的語言並行代碼的一個引人注目的演示:
如何MapReduce?它是令人難以置信的可並行化的,儘管它沒有在函數式語言中實現,但它的靈感來源於Lisp的map
和reduce
。
你的問題是要求在現有技術水平的材料。我認爲你最好的介紹這個領域的例子是Nikhil和Arvind的Implicit Parallel Programming in pH。
在第20章(「編程多核CPU」)Programming Erlang中有一個使用mapreduce的文本索引器/搜索器的擴展示例。我不知道這是多麼令人印象深刻,但它看起來像代碼凡人可以寫。
LINQ是一個很好的例子主流語言的函數式編程。物化代碼和單子?在MY C#中? :)無論如何,w.r.t.線程,有提到Parallel LINQ。通過使用不變性和更高階的函數(也許是Expression),庫可以爲我們並行化事物。
而另一個鏈接到F#與async workflows。令人印象深刻的是能夠採用同步代碼,並且通過一些小標註將其轉換爲異步代碼。代碼保留了許多您可能使用的命令性質。你不必完全改變事物來利用它;編譯器通過處理它。
Purely Functional Data Structures(長PDF),由克里斯·奧卡薩基。
開玩笑說的功能代碼最大的例子是不寫的代碼我的一個老師。
作爲一個具有8個內核的開發盒,你在運行什麼? – 2009-02-08 06:28:22
我的猜測是雙核四核 – 2009-02-08 07:38:01
是的 - 它是一個雙核四核戴爾服務器。 – twk 2009-02-08 16:09:00