Шесть уроков назад башня открывала линию и не знала, кто её закроет. Теперь у каждого ресурса есть возврат, у каждого возврата область, у каждой области исход. Сегодня это проверяется на программе целиком: от запуска до кода выхода, при каждом исходе, который Рыдкулл может устроить.
Что нужно башне
Тесты накопительные: всё, что башня умеет с этапа 12, и старые тесты этапов 1, 7, 8, 10. Сверху три вещи в src/main.ts.
shiftProgram(lines), смена как программа. Архив открыт на всю смену черезwithResourcesиз урока 55, смена под охранойguardedиз урока 57, а внутри смена с именем из урока 52. Ошибка смены толькоWireDown: всё остальное башня уже записывает в отчёт.launch(host, layer, lines), ночь от запуска до кода выхода черезrunMainOnиз урока 58. Слой собирается внутри главного файбера: сигнал хозяина прерывает и смену, и сборку, а линия из слоя закрывается последней.leaks(log), что открыто и не закрыто, по записям склада. Чистая функция; ей проверяют каждую ночь.
Чек-лист перед сдачей
- Тесты всех живых прошлых этапов зелёные.
- Хорошая ночь: код 0, склад видел четыре записи, линия, архив, архив, линия.
leaksпуст. - Архив не открылся: код 1, линия закрыта с
fail, смена не начиналась. - Линия не открылась: код 1, склад не видел ничего.
- Сигнал посреди ночи: код 130, оба ресурса закрыты с
interrupt, архив раньше линии.leaksпуст. leaksразличает два одинаковых имени: открыли дважды, закрыли один раз, значит, одно открыто.
Башня, этап 25
Почему порядок такой
Нарисуй, что живёт внутри чего:
главный файбер (runMainOn)
└── Effect.provide(слой) область слоя: линия
└── guarded ensuring «смена сдана»
└── withResources область смены: архив
└── namedShift работа
Сигнал прерывает главный файбер. Работа останавливается на ближайшем ожидании. Закрывается область смены: архив, исход interrupt. Срабатывают onInterrupt и ensuring у guarded. Закрывается область слоя: линия, исход тот же. Только потом teardown считает код и отдаёт его хозяину. Каждый шаг ты написал в отдельном уроке; босс проверяет, что они сложились в правильном порядке.
Практика
Итог
Три ночи, три записи склада, три кода выхода: 0, 1 и 130. В каждой записи на каждое «открыт» есть своё «закрыт», и в правильном порядке.
Высокий гость кивает Рыдкуллу и уходит по коридору. Песочные часы в его руке ни разу не перевернулись раньше времени.
Дальше
Ночью из подвала доносится стрекот. Пондер спускается к Гексу и долго смотрит на стеклянные трубки.
Следующий раздел курса это EF7 «Муравейник»: файберы, гонки и координация. Начинается он с урока 61.