Paralelo Mapa (Generator) Operator
-
06-07-2019 - |
Pergunta
Estou interessado em definir um operador de mapa paralelo para a minha língua. Ele transforma uma lista em uma nova lista dada uma expressão. Ele teria uma sintaxe semelhante a um gerador. Ao contrário dos geradores em C # e Python, seria potencialmente ser avaliadas em paralelo, se os desejos do compilador (por exemplo, existe um núcleo ocioso, ea lista é muito grande). Ele seria chamado witheach
para distingui-lo foreach
que é executada sequencialmente.
Por exemplo, considere:
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);
A minha pergunta é, é que isto vai ser muito intuitiva para os programadores que podem colocar efeitos colaterais em f
? Claro, eu diria para não fazer isso na documentação, mas a maioria dos programadores não ler a documentação da linguagem. : -)
Eu acho que a grande questão, é possível programadores modernos se adaptar a lista paralela implícita semântica de processamento em sua língua, ou eles precisam de coisas para ser mais explícito?
Solução
Você tem razão em que a maioria dos usuários não vai ler a documentação, e, como tal, provavelmente, colocar o código seguro non-thread em um bloco witheach
(especialmente com um nome e sintaxe tão semelhante ao foreach
). Você quer vai ter que confiar em seus usuários, ou realizar alguma análise estática sobre a segurança simultânea do bloco. Se você escolheu o mais tarde, então você pode muito bem não se preocupar com witheach
- apenas foreach
automaticamente parallelise quando possível.
Quanto a saber se os usuários estão prontos para a responsabilidade de escolher a ser potencialmente perigoso, eu seria capaz de apostar "sim", enquanto eles sabem de antemão o que é seguro. Muitas línguas forçá-lo a fazer esta escolha cada dia (ponteiros, gerenciamento de memória manual, a simultaneidade de memória compartilhada). Você pode querer fazer a sua sintaxe menos ambígua (isto é chamá-lo parallelforeach
), para que as pessoas sabem o que estão inscrevendo.
Outras dicas
Você quer dizer algo como pmap ?