Domanda

Sono interessato a definire un operatore di mappe parallele per la mia lingua. Trasforma un elenco in un nuovo elenco con un'espressione. Avrebbe una sintassi simile a un generatore. A differenza dei generatori in C # e Python, sarebbe potenzialmente valutato in parallelo, se il compilatore lo desidera (ad esempio, c'è un core inattivo e l'elenco è davvero grande). Si chiamerebbe witheach per distinguerlo da foreach che viene eseguito in sequenza.

Ad esempio, considera:

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);

La mia domanda è: sarà troppo poco intuitivo per i programmatori che potrebbero mettere effetti collaterali in f ? Ovviamente, direi di non farlo nella documentazione, ma la maggior parte dei programmatori non legge la documentazione linguistica. : -)

Suppongo che la domanda più grande sia: i programmatori moderni possono adattarsi alla semantica implicita dell'elaborazione di elenchi paralleli nella loro lingua o hanno bisogno di cose per essere più espliciti?

È stato utile?

Soluzione

Hai ragione nel dire che la maggior parte degli utenti non leggerà la documentazione e come tale probabilmente inserirà un codice sicuro non thread in un blocco witheach (specialmente con un nome e una sintassi così simili a foreach ). Dovrai fidarti dei tuoi utenti o eseguire alcune analisi statiche sulla sicurezza concorrente di quel blocco. Se hai scelto la versione successiva, potresti anche non preoccuparti di witheach - quando possibile, parallelizza automaticamente foreach .

Se gli utenti sono pronti per la responsabilità di scegliere di essere potenzialmente pericolosi, scommetterei "sì", purché sappiano in anticipo cosa è sicuro. Molte lingue ti costringono a fare questa scelta ogni giorno (puntatori, gestione manuale della memoria, concorrenza della memoria condivisa). Potresti voler rendere la tua sintassi meno ambigua (ovvero chiamarla parallelforeach ), in modo che le persone sappiano a cosa si stanno iscrivendo.

Altri suggerimenti

Intendi qualcosa come pmap ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top