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でしょうか? もちろん、ドキュメントではこれを行うべきではないと言いたいのですが、ほとんどのプログラマーは言語ドキュメントを読みません。:-)

より大きな問題は、現代のプログラマーが言語の暗黙的な並列リスト処理セマンティクスに適応できるか、それともより明示的にする必要があるかということです。

4

2 に答える 2

2

ほとんどのユーザーがドキュメントを読まないという点で、あなたは正しいです。そのため、おそらくスレッドセーフでないコードをwitheachブロックに入れます (特に名前と構文が に非常に似ている場合foreach)。ユーザーを信頼するか、そのブロックの同時安全性について静的分析を実行する必要があります。後者を選択した場合は、気にする必要はありません。可能な場合witheachは自動的に並列化foreachするだけです。

ユーザーが潜在的に危険であることを選択する責任を負う準備ができているかどうかについては、何が安全かを前もって知っている限り、私は「はい」と賭けます. 多くの言語では、毎日この選択を行う必要があります (ポインター、手動のメモリ管理、共有メモリの同時実行)。シンタックスのあいまいさを減らしたいと思うかもしれません (つまり、 と呼びますparallelforeach)。そうすれば、人々は自分が何にサインアップしているのかを知ることができます。

于 2009-10-26T13:30:08.420 に答える
1

pmapのようなものですか?

于 2009-10-26T13:34:06.870 に答える