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?

Foi útil?

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 ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top