> -- Илья Ермаков писал(а):
> Учитывая то, что при выгрузке модуля область виртуальной памяти можно просто выводить навсегда из использования, операция не является априори опасной. Ну т.е. может приводить к логической ошибке вызова на нулевую область кода, но не к каким-либо разрушениям процесса.
И, кмк, эту ошибку вызова вполне можно отловить и превратить в авост.

А можно сконструировать процедуру проверки валидности процедурной переменной, условно:
## Код:
```
PROCEDURE IsValid (p: ANYPROCEDURE): BOOLEAN;
```

чтобы предотвращать авосты. Правда, ее, наэн, придется встраивать в SYSTEM, поскольку нет типа ANYPROCEDURE:
## Код:
```
SYSTEM.ISVALID(p: any procedure): BOOLEAN
```

Либо перейти к адресам:
## Код:
```
PROCEDURE IsCallable (adr: ADDRESS (* = INTEGER*)): BOOLEAN
```


Этот последний способ гораздо проще, чем править сборщик мусора и делать трассировку процедурных переменных или проверять стек вызовов или править в компиляторе модуль SYSTEM. И, пожалуй, как раз бы подошли тем 10% случаев, о которых Илья Евгенич пишет.