العطل هو الهدف يرفض. والخطأ هو التدفّق ينكسر. والتمييز يقرّر أين يذهب معالجك.
فالعطل يعود من شيءٍ استدعيته: أعادت الخدمة خطأً، أو رفض الهدف السجلّ، أو أبلغ المحوّل عن مشكلةٍ في الطلب. وهو استجابة، وهو قابلٌ للالتقاط — فتستطيع لفّ الاستدعاء والتقاط العطل وقراءة ما قال والقرار.
والخطأ تدفّقك يخفق: فراغٌ في تعبير، أو متغيّر يُقرأ قبل إسناده، أو حمولةٌ أكبر من اللازم، أو ربطٌ تعذّر عليه إنتاج مُخرَجٍ صالح. وبعضها تلتقطه المنصّة وبعضها يُنهي النسخة حيث هي.
ولماذا يقرّر التمييز أين يذهب المعالج. فمعالج عطلٍ ملفوف حول استدعاءٍ واحد يلتقط رفوض ذلك الهدف ويعرف أي استدعاءٍ أخفق ولماذا بالضبط. ومعالجٌ أعلى التدفّق يلتقط كل شيء ولا يعرف شيئًا تقريبًا — فحين يبلغه الإخفاق يكون السياق الذي يخبرك أي سجلٍّ وأي خطوة قد ذهب.
فلُفّ الاستدعاءات، وعالِج الأعطال حيث تقع، وأبقِ معالجًا على المستوى الأعلى شبكةَ أمانٍ لا تصميمًا. الدرس ٣.
والعاقبة العملية للأخطاء: امنع لا تلتقط. فحارس فراغٍ قبل تعبير، ومتغيّرٌ مهيَّأ، وحمولةٌ محدودة — تلك تزيل فئةً كاملة من الإخفاق لا يستطيع أي معالجٍ الإبلاغ عنها بنفع. وخطأٌ يُلتقَط أعلى تدفّقٍ يعطيك كومةً لا تشخيصًا، ولذلك تنفق وحدة الربط درسًا على الفراغ.
