Вопрос

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top