Якщо паралельні алгоритми стукають у двері, можливо, вдалий час подумати про обробку помилок.
Тож спочатку були коди помилок. Ті смоктали. Можна було їх ігнорувати, тож ви могли пізно вийти з ладу та створити важкий для налагодження код.
Потім прийшли винятки. Після їх виникнення було неможливо ігнорувати, і більшість людей (крім Джоеля) їм подобаються більше.
І ось ми отримали бібліотеки, які допомагають паралельному коду. Проблема полягає в тому, що ви не можете обробляти винятки з паралельного коду так легко, як ви могли з непаралельним кодом. Якщо ви асинхронно запускаєте завдання, і воно викидає виняток, немає жодного сліду стека, який він прокручує; Найкраще, що ви можете зробити - це захопити його та зареєструвати на об’єкті завдання, якщо такий об’єкт є. Однак він перемагає первинну силу винятків: ви повинні перевірити їх, і ви можете ігнорувати їх без додаткових зусиль , тоді як в однопотоковому коді виняток обов’язково запустить відповідні дії (навіть якщо це означає припинення вашої програми).
Як мовні реалізації або бібліотеки повинні підтримувати помилки в паралельному коді?