поэтому на практике у нас есть два варианта. точнее, три, на самом деле, но третий нам сейчас неинтересен.
вариант 1: просто никогда не освобождать память, занятую модулем при его выгрузке — достаточно скрывать его из списка активных. так делает BBCB, например.
вариант 2: при загрузке модуля копировать десктипторы в отдельный блок памяти — и… никогда его не освобождать, потому что цитата поясняет, почему.
итого, в любом случае ключевая техника тут — «никогда не освобождать» (как оно и делается в большинстве оберонов). поэтому и сканировать тайпдески не надо.
p.s.: третий вариант — полный скан при выгрузке модуля, который реализовали, кажется, в A2, и я в LC. но это совершенно отдельный сканер, который вызывается только при ручной выгрузке модуля, и заменяет стратегию «никогда не освобождать» на «освобождать только если безопасно». основную идею это не меняет: описания типов считаются персистентными и живут в специальной памяти, которую гц никогда не освобождает.
|