Параллельная карта (Генератор) Оператор - PullRequest
0 голосов
/ 26 октября 2009

Я заинтересован в определении оператора параллельной карты для моего языка. Преобразует список в новый список с выражением. Это будет иметь синтаксис, похожий на генератор. В отличие от генераторов в 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? Конечно, я бы сказал, не делать этого в документации, но большинство программистов не читают языковую документацию. : -)

Полагаю, главный вопрос заключается в том, могут ли современные программисты адаптироваться к неявной семантике обработки параллельных списков на своем языке или им нужны вещи, которые будут более явными?

Ответы [ 2 ]

2 голосов
/ 26 октября 2009

Вы правы в том, что большинство пользователей не будут читать документацию, и поэтому, вероятно, поместят не потокобезопасный код в блок witheach (особенно с именем и синтаксисом, очень похожим на foreach). Вы должны либо довериться своим пользователям, либо выполнить статический анализ одновременной безопасности этого блока. Если вы выбрали более позднюю версию, вы можете не беспокоиться о witheach - просто автоматически распараллелить foreach, когда это возможно.

Относительно того, готовы ли пользователи взять на себя ответственность за то, чтобы быть потенциально опасным, я бы поставил «да», если они заранее знают, что безопасно. Многие языки заставляют вас делать этот выбор каждый день (указатели, ручное управление памятью, параллелизм совместно используемой памяти). Возможно, вы захотите сделать свой синтаксис менее двусмысленным (то есть назвать его parallelforeach), чтобы люди знали, на что они подписываются.

1 голос
/ 26 октября 2009

Вы имеете в виду что-то вроде pmap ?

...