Przy równoległych algorytmach pukających do drzwi może być dobry moment, aby pomyśleć o obsłudze błędów.
Więc na początku były kody błędów. Ci ssani. Można było je zignorować, abyś mógł późno zawieść i stworzyć trudny do debugowania kod.
Potem przyszły wyjątki. Nie można ich zignorować, gdy się pojawią, a większość ludzi (z wyjątkiem Joela) bardziej je lubi.
A teraz mamy biblioteki, które pomagają w równoległym kodzie. Problem polega na tym, że nie można obsługiwać wyjątków w kodzie równoległym tak łatwo, jak to możliwe w przypadku kodu nierównoległego. Jeśli asynchronicznie uruchomisz zadanie i zgłasza ono wyjątek, nie ma śladu stosu obok niego, aby się zrelaksować; najlepiej, co możesz zrobić, to przechwycić go i zarejestrować w obiekcie zadania, jeśli taki obiekt istnieje. Jednak pokonuje podstawową siłę wyjątków: musisz je sprawdzić i możesz je zignorować bez dodatkowego wysiłku , podczas gdy w kodzie jednowątkowym wyjątek koniecznie wywoła odpowiednie działania (nawet jeśli oznacza to zakończenie programu).
W jaki sposób implementacje językowe lub biblioteki powinny obsługiwać błędy w kodzie równoległym?