0

我有興趣爲我的語言定義一個並行映射運算符。它將一個列表轉換成一個給定表達式的新列表。它會有一個類似於生成器的語法。與C#和Python中的生成器不同,如果編譯器需要(例如,有一個空閒內核,並且列表非常大),它可能會被並行評估。它將被稱爲witheach,以便將它與順序執行的foreach區分開來。並行映射(發生器)運算符

例如考慮:

var f = function(int x) : int { return x * 2; } 
var my_list = 0..1000000; 
var my_mapped_list = witheach (i in mylist) yield f(i); 

我的問題是,這是怎麼回事成爲誰可放入f副作用程序員太不直觀?當然,我會說不要在文檔中這樣做,但大多數程序員不會閱讀語言文檔。 :-)

我猜更大的問題是,現代程序員可以適應他們的語言中的隱式並行列表處理語義,還是需要更明確的東西?

+0

「他們需要更明確的東西」 - 是的,不要稱之爲「witheach」,而是「WARNING_DO_NOT_SIDE_EFFECT_HERE_PARALLEL_MAP」。 – Svante 2009-10-26 13:35:56

+0

我猜這在臉頰上有點令人討厭? – cdiggins 2009-10-26 16:10:51

回答

2

你是對的,因爲大多數用戶不會閱讀文檔,因此可能會將非線程安全代碼放入witheach塊(特別是名稱和語法與foreach非常相似)。您要麼必須信任您的用戶,要麼對該塊的併發安全性進行一些靜態分析。如果你選擇後者,那麼你可能不會打擾witheach - 只要可能,自動平行foreach

至於用戶是否願意承擔選擇潛在危險的責任,只要他們知道什麼是安全的,我就會下注「是」。許多語言強迫你每天做出這樣的選擇(指針,手動內存管理,共享內存併發)。您可能希望使語法更加模糊(即將其稱爲parallelforeach),以便人們知道他們要註冊的內容。

+0

這些都是好點。 – cdiggins 2009-10-26 13:56:54

1

你的意思是類似pmap

+0

是的,它實際上是一樣的東西,只是更多的Java-ISH語法。 – cdiggins 2009-10-26 13:56:06