> -- Евгений Темиргалеев писал(а):
> Не согласен.  Средство системное и контролируемое (IMPORT SYSTEM)IMPORT SYSTEM будет в том модуле, который создал процедуру с пометкой [ code ]. А модули, импортировавшие эту процедуру, ничего и не подозревают. В том числе, могут экспортировать дальше, но уже без SYSTEM## Код:
```
MODULE Low;
IMPORT SYSTEM; (* Напугали. БУ! *)
PROCEDURE [ code ] And* (a, b: INTEGER): INTEGER;
HAX, HAX, HAX;
END Low.

MODULE Middle;
IMPORT Low; (* Уже не так страшно *)
PROCEDURE Add* (a, b: INTEGER): INTEGER;
BEGIN RETURN Low.Add (a, b) (* сюда будет заинлайнено *)
END Add;
END Middle.

MODULE Top;
IMPORT Middle; (* Уже совсем не страшно *)
PROCEDURE Add* (a, b: INTEGER): INTEGER;
BEGIN RETURN Middle.Add (a, b) (* сюда инлайна не будет *)
END Add;
END Top.
```
После нескольких изменений Low.Add и нескольких перекомпиляций Low и Middle становится довольно трудно предсказать, что именно будет выполнено при вызове Top.Add после перезапуска системы и перезагрузки всех модулей. Если инлайн не используется (либо есть запрет на экспорт code-процедур), то Top.Add выполнит самый последний, текущий вариант Low.Add. Если инлайн используется, то текущий вариант Low.Add будет выполнен только при одном условии: если модуль Middle был перекомпилирован позднее Low. Гарантировать это можно только в том случае, если изменение тела code-процедуры изменяет её сигнатуру, что приводило бы к изменению интерфейса и необходимости перекомпилировать Middle.> -- Иван Горячев писал(а):
> Проблема есть. Я бы сказал в случае с инлайнами нарушается сам принцип модульности - часть кода модуля перестаёт ему принадлежать и начинает неконтролируемо распространяться по системе.Отлично сказано.