有沒有並行化的R5RS或更高版本的Scheme實現?例如,如果我說要做:是否存在並行的Scheme實現?
(map (lambda (x)
(pure-functional-stuff x))
'(1 3 5 7 11 13))
它會同時處理1,3,5和7如果機器可以做到這一點?這應該是函數式編程的一大優點,但我找不到一個維護的,最新的Scheme。除非我斷言該函數沒有副作用,否則我會很好地處理這個問題。
有沒有並行化的R5RS或更高版本的Scheme實現?例如,如果我說要做:是否存在並行的Scheme實現?
(map (lambda (x)
(pure-functional-stuff x))
'(1 3 5 7 11 13))
它會同時處理1,3,5和7如果機器可以做到這一點?這應該是函數式編程的一大優點,但我找不到一個維護的,最新的Scheme。除非我斷言該函數沒有副作用,否則我會很好地處理這個問題。
我是Schemik的開發人員,我認爲它是您正在尋找的方案。該項目仍在開發和維護中。今年年初,我發佈了一個可以提高與R5RS兼容性的版本。不幸的是,Schemik是一個專注於表達評估過程的研究項目,因此其標準庫仍然比較小。 Schemik有什麼特別的功能嗎?
我正在挖掘它。我當然不知道,但它看起來很有希望。 – JasonFruit 2010-07-20 18:55:43
它現在就做我需要的東西---謝謝!我一直想嘗試這樣的方式。 – JasonFruit 2010-07-22 17:59:03
它讓我感到困惑,它聲稱它是一種「Scheme和Common Lisp的方言」。他們的意思是「Lisp的一種方言」嗎? – JasonFruit 2010-07-19 11:47:12
它確實接近R5RS,儘管我不得不通過提交評論來發現它。作爲一個整體,嚴重沒有記錄,它的公交係數爲1,但它有潛力。 – JasonFruit 2010-07-19 21:51:19
我會讀一下Racket的未來。我沒有注意到他們。 – JasonFruit 2010-07-19 11:47:43
事實證明,你真的不希望編譯器來嘗試,因爲你最終會做一些簡單的像時,甚至浪費時間協調努力並行一切,
(map add1 '(1 2 3))
會更快只在一個線程上做。然而,當「add1」實際上是「真正的長計算」時,現在很多功能語言可以讓您輕鬆地進行並行處理。每種語言都有自己的方法,但我建議利用期貨在Racket中利用多個核心。
儘管編譯器自動爲您自動判定事物是很好的,但將「映射」更改爲「pmap」並不是一個壞的折衷,您認爲它可以幫助而不是處理其他地方的減速,因爲編譯器也是如此雄心勃勃。明智使用時
東西一樣基本
(define (pmap f xs)
(map touch (map (λ(x) (future (λ() (f x)))) xs)))
可以讓你很遠,但你應該用你的數據分塊了喂到並行線程嘗試。
自動並行化仍然很少見。如果一些FP愛好者說FP語言程序「更好地並行化」,那麼他/她可能意味着程序員'你'。 – 2010-07-19 07:36:11