Pregunta

Estoy interesado en definir un operador de mapa paralelo para mi idioma. Transforma una lista en una nueva lista dada una expresión. Tendría una sintaxis similar a un generador. A diferencia de los generadores en C # y Python, potencialmente se evaluaría en paralelo, si el compilador lo desea (por ejemplo, hay un núcleo inactivo y la lista es realmente grande). Se llamaría witheach para distinguirlo de foreach que se ejecuta secuencialmente.

Por ejemplo, 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);

Mi pregunta es, ¿será demasiado poco intuitivo para los programadores que pueden poner efectos secundarios en f ? Por supuesto, yo diría que no haga esto en la documentación, pero la mayoría de los programadores no leen la documentación del idioma. :-)

Supongo que la pregunta más importante es si los programadores modernos pueden adaptarse a la semántica de procesamiento de listas paralelas implícitas en su idioma, o ¿necesitan que las cosas sean más explícitas?

¿Fue útil?

Solución

Tienes razón en que la mayoría de los usuarios no leerán la documentación y, como tal, probablemente colocarán un código seguro que no sea de subprocesos en un bloque withach (especialmente con un nombre y una sintaxis tan similares a foreach ). Tendrá que confiar en sus usuarios o realizar un análisis estático sobre la seguridad concurrente de ese bloque. Si elige la opción posterior, es mejor que no se moleste con withhe , solo paralelice automáticamente foreach cuando sea posible.

En cuanto a si los usuarios están preparados para la responsabilidad de elegir ser potencialmente peligrosos, apostaría "sí", siempre y cuando sepan de antemano qué es seguro. Muchos idiomas lo obligan a tomar esta decisión todos los días (punteros, administración manual de memoria, concurrencia de memoria compartida). Es posible que desee que su sintaxis sea menos ambigua (es decir, llámela parallelforeach ), para que las personas sepan para qué se están registrando.

Otros consejos

¿Te refieres a algo como pmap ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top