Раздел 46 · Effect: Тихая Академия

Босс: башня не течёт

middle-senior~70 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Шесть уроков назад башня открывала линию и не знала, кто её закроет. Теперь у каждого ресурса есть возврат, у каждого возврата область, у каждой области исход. Сегодня это проверяется на программе целиком: от запуска до кода выхода, при каждом исходе, который Рыдкулл может устроить.

Что нужно башне

Тесты накопительные: всё, что башня умеет с этапа 12, и старые тесты этапов 1, 7, 8, 10. Сверху три вещи в src/main.ts.

  • shiftProgram(lines), смена как программа. Архив открыт на всю смену через withResources из урока 55, смена под охраной guarded из урока 57, а внутри смена с именем из урока 52. Ошибка смены только WireDown: всё остальное башня уже записывает в отчёт.
  • launch(host, layer, lines), ночь от запуска до кода выхода через runMainOn из урока 58. Слой собирается внутри главного файбера: сигнал хозяина прерывает и смену, и сборку, а линия из слоя закрывается последней.
  • leaks(log), что открыто и не закрыто, по записям склада. Чистая функция; ей проверяют каждую ночь.

Чек-лист перед сдачей

  1. Тесты всех живых прошлых этапов зелёные.
  2. Хорошая ночь: код 0, склад видел четыре записи, линия, архив, архив, линия. leaks пуст.
  3. Архив не открылся: код 1, линия закрыта с fail, смена не начиналась.
  4. Линия не открылась: код 1, склад не видел ничего.
  5. Сигнал посреди ночи: код 130, оба ресурса закрыты с interrupt, архив раньше линии. leaks пуст.
  6. leaks различает два одинаковых имени: открыли дважды, закрыли один раз, значит, одно открыто.

Башня, этап 25

Почему порядок такой

Нарисуй, что живёт внутри чего:

главный файбер (runMainOn)
└── Effect.provide(слой)          область слоя: линия
    └── guarded                   ensuring «смена сдана»
        └── withResources         область смены: архив
            └── namedShift        работа

Сигнал прерывает главный файбер. Работа останавливается на ближайшем ожидании. Закрывается область смены: архив, исход interrupt. Срабатывают onInterrupt и ensuring у guarded. Закрывается область слоя: линия, исход тот же. Только потом teardown считает код и отдаёт его хозяину. Каждый шаг ты написал в отдельном уроке; босс проверяет, что они сложились в правильном порядке.

Практика

Итог

Три ночи, три записи склада, три кода выхода: 0, 1 и 130. В каждой записи на каждое «открыт» есть своё «закрыт», и в правильном порядке.

Высокий гость кивает Рыдкуллу и уходит по коридору. Песочные часы в его руке ни разу не перевернулись раньше времени.

Дальше

Ночью из подвала доносится стрекот. Пондер спускается к Гексу и долго смотрит на стеклянные трубки.

Следующий раздел курса это EF7 «Муравейник»: файберы, гонки и координация. Начинается он с урока 61.