13

有沒有並行化的R5RS或更高版本的Scheme實現?例如,如果我說要做:是否存在並行的Scheme實現?

(map (lambda (x) 
     (pure-functional-stuff x)) 
    '(1 3 5 7 11 13)) 

它會同時處理1,3,5和7如果機器可以做到這一點?這應該是函數式編程的一大優點,但我找不到一個維護的,最新的Scheme。除非我斷言該函數沒有副作用,否則我會很好地處理這個問題。

+1

自動並行化仍然很少見。如果一些FP愛好者說FP語言程序「更好地並行化」,那麼他/她可能意味着程序員'你'。 – 2010-07-19 07:36:11

回答

5

我是Schemik的開發人員,我認爲它是您正在尋找的方案。該項目仍在開發和維護中。今年年初,我發佈了一個可以提高與R5RS兼容性的版本。不幸的是,Schemik是一個專注於表達評估過程的研究項目,因此其標準庫仍然比較小。 Schemik有什麼特別的功能嗎?

+0

我正在挖掘它。我當然不知道,但它看起來很有希望。 – JasonFruit 2010-07-20 18:55:43

+0

它現在就做我需要的東西---謝謝!我一直想嘗試這樣的方式。 – JasonFruit 2010-07-22 17:59:03

2

我剛剛發現Schemik

http://schemik.sourceforge.net/

,這似乎是維持到至少2009年,雖然我不知道這是否是R5RS做。

+0

它讓我感到困惑,它聲稱它是一種「Scheme和Common Lisp的方言」。他們的意思是「Lisp的一種方言」嗎? – JasonFruit 2010-07-19 11:47:12

+0

它確實接近R5RS,儘管我不得不通過提交評論來發現它。作爲一個整體,嚴重沒有記錄,它的公交係數爲1,但它有潛力。 – JasonFruit 2010-07-19 21:51:19

3

Racketfutures做一些非常相似的事情,並且在不久的將來也會有第二種並行方法(將被稱爲「地方」)。

+0

我會讀一下Racket的未來。我沒有注意到他們。 – JasonFruit 2010-07-19 11:47:43

3

事實證明,你真的不希望編譯器來嘗試,因爲你最終會做一些簡單的像時,甚至浪費時間協調努力並行一切

(map add1 '(1 2 3)) 

會更快只在一個線程上做。然而,當「add1」實際上是「真正的長計算」時,現在很多功能語言可以讓您輕鬆地進行並行處理。每種語言都有自己的方法,但我建議利用期貨在Racket中利用多個核心。

儘管編譯器自動爲您自動判定事物是很好的,但將「映射」更改爲「pmap」並不是一個壞的折衷,您認爲它可以幫助而不是處理其他地方的減速,因爲編譯器也是如此雄心勃勃。明智使用時

東西一樣基本

(define (pmap f xs) 
    (map touch (map (λ(x) (future (λ() (f x)))) xs))) 

可以讓你很遠,但你應該用你的數據分塊了喂到並行線程嘗試。

相關問題