Con algoritmos paralelos tocando a la puerta, podría ser un buen momento para pensar en el manejo de errores.
Así que al principio había códigos de error. Esos apestaron. Era gratis ignorarlos, por lo que podría fallar tarde y producir código difícil de depurar.
Luego vinieron las excepciones. Se hizo imposible ignorarlos una vez que ocurrieron, y la mayoría de las personas (excepto Joel) les gustan más.
Y ahora tenemos bibliotecas que ayudan al código paralelo. El problema es que no puede manejar excepciones en código paralelo tan fácilmente como lo haría con código no paralelo. Si inicia una tarea de forma asincrónica y arroja una excepción, no hay rastro de pila más allá para desenrollarla; lo mejor que puede hacer es capturarlo y registrarlo en el objeto de la tarea, si existe tal objeto. Sin embargo, derrota la fuerza principal de las excepciones: debe verificarlas y puede ignorarlas sin ningún esfuerzo adicional , mientras que en el código de un solo subproceso una excepción necesariamente desencadenará las acciones apropiadas (incluso si eso significa terminar su programa).
¿Cómo deberían las implementaciones de lenguaje o las bibliotecas admitir errores en código paralelo?